Разработка программы-игры "Крестики-нолики"

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование



? помощью которого можно перемещаться между ячейками игрового поля и фиксировать символ в нужной ячейке.

Входные данные:

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 совпадают с