Написать программу игры в пятнашки

Автор работы: Пользователь скрыл имя, 29 Апреля 2013 в 22:10, курсовая работа

Краткое описание

В данной курсовой работе я представил программу, написанную на языке С++ в которой мы можем играть в игру пятнашки.
Самый первый вопрос, который мы должны себе задать, звучит примерно так: "Что должна делать эта программа? Какие функции она должна выполнять? Какими особенностями должна она обладать? Как должна выглядеть работа программы?" Ответы на эти вопросы составят приблизительный список требований, предъявляемый к программе и помогут нам яснее представить себе, что именно нам предстоит сделать.

Содержание

Введение
1 Математическая теория игры
2 Проектирование структур программы
3 Среда программирования Code::Blocks
4 Инструкция пользователя
5 Выводы
6 Список использованной литературы

Прикрепленные файлы: 1 файл

Курсовая.doc

— 217.00 Кб (Скачать документ)

 

 

void Chaos()

{

 

int Chaos = 0; //Количество беспорядков на поле

  int CurrNum; //Костяшка, для которой мы рассматриваем беспорядки

  for (int i = 0; i < 14; i++) //Считаем для костяшек на первых 14 позициях (для 15-й это бессмысленно)

   {

   CurrNum = Nums[i];

   for (int j = i + 1; j < 15; j++)

    if (CurrNum > Nums[j])

     Chaos++;

   }

  if (Chaos % 2 == 1) //Если общее число беспорядков нечетное,

   { //меняем  местами костяшки на 14-й и 15-й  позициях

   int temp = Nums[13];

   Nums[13] = Nums[14];

   Nums[14] = temp;

   }

for (int i = 0; i < 15; i++)

  Field[i % 4][i / 4] = Nums[i]; //a % b - остаток от деления a на b

  Field[3][3] = 0;

  EmptyX = 3; EmptyY = 3;

}

 

void DrawField()

  {

  system("cls"); //Очищаем экран

  for (int j = 0; j < 4; j++) //Рисуем построчно четыре горизонтальных ряда костяшек

   {

   for (int i = 0; i < 4; i++) //Рисуем верхнюю часть  ряда

    {

    if (Field[i][j])

     cout << "++++";

    else

     cout << "    ";

    }

     cout << '\n';

   for (int i = 0; i < 4; i++) //Рисуем среднюю часть ряда (с номерами)

    {

    if (Field[i][j])

     {

     cout << "+";

     cout.width(2);

     cout << Field[i][j] << "+";

     }

    else

     cout << "    ";

    }

     cout << '\n';

   for (int i = 0; i < 4; i++) //Рисуем нижнюю часть  ряда

    {

    if (Field[i][j])

     cout << "++++";

    else

     cout << "    " ;

    }

   cout << '\n';

   }

  }

 

 

void Move(Direction dir)

  {

  switch (dir)

   {

   case LEFT:

    {

    if (EmptyX < 3)

     {

     Field[EmptyX][EmptyY] = Field[EmptyX + 1][EmptyY];

     Field[EmptyX + 1][EmptyY] = 0;

     EmptyX++;

     }

    } break;

   case UP:

    {

    if (EmptyY < 3)

     {

     Field[EmptyX][EmptyY] = Field[EmptyX][EmptyY + 1];

     Field[EmptyX][EmptyY + 1] = 0;

     EmptyY++;

     }

    } break;

   case RIGHT:

    {

    if (EmptyX > 0)

     {

     Field[EmptyX][EmptyY] = Field[EmptyX - 1][EmptyY];

     Field[EmptyX - 1][EmptyY] = 0;

     EmptyX--;

     }

    } break;

   case DOWN:

    {

    if (EmptyY > 0)

     {

     Field[EmptyX][EmptyY] = Field[EmptyX][EmptyY - 1];

     Field[EmptyX][EmptyY - 1] = 0;

     EmptyY--;

     }

    } break;

   }

  }

 

bool FieldIsCorrect()

  {

  for (int i = 0; i < 15; i++)

   if (Field[i % 4][i / 4] != i + 1)

    return false; //При первом же нахождении несоответствия выходим и возвращаем false

  return true;//Если не найдено ни одного несоответствия - поле собрано верно

  }

 

 

 

 

int main()

{

 

CreateField(); //Генерация поля

Chaos();

DrawField(); //Первоначальное рисование поля

 char c; //В эту переменную мы считываем символ нажатой клавиши

 while (!FieldIsCorrect()) //Игровой цикл (выполняется пока поле не будет собрано)

{

 c = getch(); //Считываем нажатие клавиши

 switch(c) //В зависимости от нажатой клавиши (от ее целочисленного кода) двигаем костяшки

 {

case 75: Move(LEFT); break; //Нажата клавиша "Влево"

case 72: Move(UP); break; //Нажата клавиша "Вверх"

case 77: Move(RIGHT); break; //Нажата клавиша "Вправо"

case 80: Move(DOWN); break; //Нажата клавиша "Вниз"

case 27: return 0; //Нажата  клавиша "Escape"

}

DrawField(); //Рисование  поля

}

cout << "\n\nCongratulations! Press Enter to exit!"; //Поздравление игрока

cin.get(); //Ждем ввода строки и нажатия Enter перед выходом

 }


Информация о работе Написать программу игры в пятнашки