Автор работы: Пользователь скрыл имя, 29 Апреля 2013 в 22:10, курсовая работа
В данной курсовой работе я представил программу, написанную на языке С++ в которой мы можем играть в игру пятнашки.
Самый первый вопрос, который мы должны себе задать, звучит примерно так: "Что должна делать эта программа? Какие функции она должна выполнять? Какими особенностями должна она обладать? Как должна выглядеть работа программы?" Ответы на эти вопросы составят приблизительный список требований, предъявляемый к программе и помогут нам яснее представить себе, что именно нам предстоит сделать.
Введение
1 Математическая теория игры
2 Проектирование структур программы
3 Среда программирования Code::Blocks
4 Инструкция пользователя
5 Выводы
6 Список использованной литературы
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 перед выходом
}