Разработка программы-игры "Крестики-нолики"
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
? помощью которого можно перемещаться между ячейками игрового поля и фиксировать символ в нужной ячейке.
Входные данные:
x, y:integer; - начальные координаты верхнего левого угла игрового поля;
с:color; - цвет курсора;
ud, lr: shortint; - номер строки и столба, т.е. координаты ячейки игрового поля;
Подпрограмма Kursor вызывается подпрограммой KeyDown.
oprocedure Symbol(x, y: integer; zn: char). Данная процедура вызывается из KeyDown после нажатия клавиши ENTER. Если во время вызова курсор находится в нужной ячейке, то устанавливает необходимый символ с заданным цветом в выбранной ячейке.
Входные данные:
x,y:integer; - текущие координаты курсора.
zn:char; - символ для установки в ячейку, Х или О.
Используемые стандартные функции и процедуры:
SetFontColor(color); - выбирает цвет; (библиотека GraphAbc);
SetFontStyle- устанавливает стиль выводимого текста; (библиотека GraphAbc);
TextOut(x, y, S); - печатает строку S, начиная с позиции (x, y); (библиотека GraphAbc);
После получения координат курсора процедура выводит символ в соответствующую ячейку на игровом поле.
oExitMenu. Эта процедура вызывается из тела главной программы после окончания игрового кона. Она выводит информационное окно с предложением выйти из игры, либо начать заново.
Используемые стандартные функции и процедуры:
Line(x1, y1, x2, y2);
SetFontStyle;
TextOut(x, y, S);
SetFontColor(цвет);
Модуль Base содержит основной код игры. В нем реализуются:
oОбработчик таймера
oОбработчик нажатия на клавишу
oРазрешение хода игроку
oПроверка случая победы или ничьи
Описание подпрограмм:
oprocedure TBase.TimerProc. Производит отсчет таймера в течение каждой последующей минуты. В том случае, когда время отведенное игроку на совершение хода иссякнет, ход переходит к сопернику .
oprocedure KtoHodit. По четности переменной i определяется игрок, который вправе ставить символ Х или О в клетку игрового поля.
oprocedure KeyDown(Key: integer); Подпрограмма является обработчиком события OnKeyDown.
Входные данные:
Key : integer; - содержит виртуальный код нажатой клавиши.
Эта процедура вызывается при нажатии на клавиши и, в зависимости от нажатых клавиш, выполняет соотвествующие им по программе действия . Если нажаты клавиши перемещения по игровому полю, то происходит запоминание нового положения на поле, если, к примеру, курсор находится в самой верхней ячейке и нажата клавиша вверх, то курсор перемещается в самую нижнюю ячейку этого же столбца. Затем вызывается процедура Kursor, которая отображает перемещение курсора в игровом поле по вертикали и горизонтали (вверх, вниз, влево, вправо).
При нажатии на Space происходит перезапуск игры, при нажатии на Escape - выход из игры.
oProcedure Pobeditel. Осуществляет проверку, выстроены ли в ряд 4 крестика или нолика и выводит соответствующие сообщения при выполнении этих условий. Процедура содержит 2 цикла в которых реализована case-конструкция. При выполнении одного из условий выводится соответствующее сообщение: "Победил игрок Х!" или "Победил игрок О!".
В теле основной программы начинается цикл с постусловием, который по сути является основным циклом игры. В нем задаются начальные координаты курсора, обнуляются элементы массива происходит вызов стартового окна игры - StartMenu и начинается второй цикл с постусловием, который представляет из себя игровой кон.
Затем в цикле с постусловием вызываются процедура Pole и KtoHodit, цикл выполняется пока не нажата клавиша Escape или Space, или пока не будет известен победитель в игре.В процедуре KtoHodit определяется текущий символ (Х или О) по четности переменной i. После этого считывается нажатая клавиша и вызывается процедура KeyDown, если это одна из клавиш-стрелок, то происходит соответствующие им действия, т.е. вызов процедуры Kursor, Если нажата клавиша Enter - вызывается процедура Symbol, и соответствующему элементу массива присваивается значение 1 или 2, в зависимости от текущего символа (Х или О). После этого происходит проверка победы или ничьи. Цикл текущего игрового кона заканчиваетсяв случае победы, ничьи, либо по нажатии клавиши Escape или Space.
В основном цикле игры после завершения игрового кона вызывается процедура ExitMenu; если нажат Escape, то происходит выход из основного цикла с последующим завершением программы, если нажата любая другая клавиша, основной цикл начнется заново.
4. Тестирование программы
При запуске программы выводится окно с названием игры и небольшой инструкцией (см. рисунок 5).
Рисунок 5 - Стартовое окно игры
Игра начинается после небольшой паузы. В окне выводится игровое поле с предложением начать игру (см. рисунок 6).
Рисунок 6 - Начало игры
Игроку разрешается делать ход только через раз. После того, как игрок сделал ход, право следующего хода переходит к его сопернику. На рис. 7 и 8 представлена типичная ситуация игры.
Рисунок 7 - Игрок Х совершил ход
Рисунок 8 - Игрок О совершил ход
Ход полагается делать за отведенный промежуток времени. На рисунке 9 изображен случай, когда игрок не успел сделать ход за отведенное ему время, ход перешел к сопернику.
Рисунок 9 -Переход хода к сопернику.
Для каждой клетки на игровом поле просматриваются соседние клетки по горизонтали, вертикали и по диагонали. Если в одном из направлений символы во всех клетках на расстоянии до 4 совпадают с