Разработка программы-игры "Крестики-нолики"
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
граммы, об основных и вспомогательных функциях, о назначении массивов и методов, структуре алгоритма программы.
Структура программы состоит из двух классов: первый отвечает за интерфейс программы, второй - содержит основной алгоритм решения поставленной задачи. Оба класса имеют важное значение в программе.
Клетки, образующие игровое поле, задаются матрицей элементов размерностью 15х15.
Алгоритм выполнения очередного хода. Игрок выполняет очередной ход при нажатии клавиши Enter на игровом поле. При этом в массив, если данная ячейка не занята, заносится 1 или 2 в зависимости от того, кто выполняет ход на данный момент. Для прорисовки крестиков и ноликов используется процедура Symbol. Затем вызывается процедура Pobeditel, которая проверяет каждую ячейку массива на возможность выигрышной ситуации. На рис. 1 приведена блок-схема алгоритма основной программы.
программа алгоритм игра pascal
Рисунок 1 - Блок-схема алгоритма основной программы
Игрокам разрешается делать ход только через раз, тем самым соблюдая очередность выполнения хода. Каждый раз после выполнения очередного удачного хода переменная i увеличивается на единицу. Переменная i перед каждым ходом проверяется на четность: нечетна - ходят крестики, четна - ходят нули. Блок-схема реализации данного алгоритма представлена на рисунке 2.
-+
Рисунок 2 - Блок-схема алгоритма, определяющего игрока текущего хода
Игра управляется с клавиатуры, если нажата ненужная клавиша, то она игнорируется, в игре не происходит никаких изменений, игра продолжается; если нажаты указанные ниже клавиши, то происходят события:
Клавиши-стрелки - номер ячейки игрового поля увеличивается или уменьшается на единицу, исходя из того, какая клавиша была нажата, если достигнут край поля, то номеру присваивается начальное или конечное значение в зависимости от края поля. Эти значения очень важны в программе, так как используются для занесения в двумерный массив значений 1 или 2 при нажатии Enter на свободной ячейке поля, а также значения передаются в процедуру Kursor, которая графически отображает движение курсора по ячейкам.
Клавиша Enter - элемент матрицы становится равным 1 или 2, в зависимости от того, кому принадлежит возможность совершить ход. Затем вызывается процедура, которая выводит символ Х или О в нужную ячейку.
Клавиша Space - игра перезагружается заново.
Клавиша Escape - нажатие прекращает работу программы.
Рисунок 3 - Блок-схема алгоритма, обрабатывающего код нажатой клавиши
Блок-схема алгоритма представлена на рис. 3.
После очередного хода каждая ячейка поля проверяется на присутствие выигрышной комбинации - выстроены ли в ряд 4 крестика или нолика. Алгоритм содержит 2 цикла. При выполнении одного из условий выводится соответствующее сообщение: "Крестики выстроили ряд!" или "Нолики выстроили ряд!" или Ничья!. На рисунке 4 представлена блок-схема алгоритма.
Рисунок 4 - Блок-схема алгоритма проверки победной ситуации или ничьи
3. Программное проектирование
В ходе написания программного продукта было разработано два модуля: модуль Grafika и модуль Base.
Модуль Grafika отвечает за графический интерфейс программы. В нем реализуются такие функции, как:
oНачальное окно-заставка игры
oРисование игрового поля 15 на 15 клеток
oДвижение курсора по клеткам поля
oВвод символа
oВывод сообщений и прочей информации
Подпрограммы:
oStartMenu
oPole
oKursor
oSymbol
oExitMenu
Описание подпрограмм:
oProcedure StartMenu. Данная подпрограмма выводит начальное окно игры. В нем содержится информация о название игры, а также необходимая инструкция к игре. В этой подпрограмме используются стандартные процедуры:
SetFontStyle; - устанавливает стиль выводимого текста (библиотека GraphABC);
TextOut(x, y, S); - печатает строку S, начиная с позиции (x, y); (библиотека GraphABC);
SetFontColor(цвет); - выбирает цвет; (библиотека GraphABC);
Sleep(k) - выполняется задержка на указанное количество миллисекунд.
oProcedure Pole. Подпрограмма рисует игровое поле: игровая решетка + заголовок, разного цвета. Подпрограмма использует стандартные функции и процедуры:
Line(x1, y1, x2, y2); - проводит линию из точки (x1, y1) в точку (x2, y2); (библиотека GraphABC);
TextOut(x, y, S); - печатает строку S, начиная с позиции (x, y);
SetFontColor(c:color); - выбирает цвет; (библиотека GraphABC);
SetPenStyle(s:style) - устанавливает стиль текущего пера;
SetPenColor(c:color) - устанавливает цвет текущего пера;
oProcedure HowPlay. Данная процедура выводит на экран инструкцию по игре. Набот стандартных процедур идентичен такому набору как в процедуре StartMenu.
oProcedure Kursor (var x, y: integer; var ud, lr: shortint; c: color). Данная процедура служит для вывода на экран квадратного курсора,