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

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

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



граммы, об основных и вспомогательных функциях, о назначении массивов и методов, структуре алгоритма программы.

Структура программы состоит из двух классов: первый отвечает за интерфейс программы, второй - содержит основной алгоритм решения поставленной задачи. Оба класса имеют важное значение в программе.

Клетки, образующие игровое поле, задаются матрицей элементов размерностью 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). Данная процедура служит для вывода на экран квадратного курсора,