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

Разработка программы логической игры в "крестики-нолики" пять в ряд на поле размера 15х15 клеток с применением графики на языке Pascal с использованием объектно-ориентированного программирования. Структура алгоритма программы и описание ее работы.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 13.02.2012
Размер файла 821,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Оглавление

Введение

1. Анализ проблемы

2. Алгоритмическое конструирование

3. Программное проектирование

4. Тестирование программы

Заключение

Список использованной литературы

Приложение

Введение

На данный момент существует великое множество компьютерных игр, так же разнообразны подходы в их создании.

Например, популярные в последнее время небольшие игры (чаще всего многопользовательские, через сеть Интернет) создаются по технологии Flash с использованием языка ActionScript. Такие игры крайне популярны на разнообразных развлекательных интернет-ресурсах и а социальных сетях.

Большие, сложные игры с реалистичной 3D графикой пишутся на C++, отдельные модули к ним могут быть написаны на других языках (например AI - «искусственный интеллект» - на Lisp). Вообще, язык для создания игры выбирается как компромисс между требованиями к игре, к компьютерному железу и к стоимости разработки.

На подавляющем большинстве мобильных телефонов установлены ARM процессоры. Поэтому игры для мобильных телефонов на платформе Java пишутся на специальном языке для мобильных телефонов MobileBasic, а также на диалекте языка Pascal - MIDletPascal.

Также существуют специальные программы для написания игр. Яркий пример - программа GameMaker, автором которой является Марк Овермас. Эта программа позволяет написать захватывающую игру даже без знания языков программирования!

В рамках курсовой работы необходимо разработать небольшую программу игры в «крестики-нолики» пять в ряд на поле размера 15х15 клеток с применением графики на языке высокого уровня с использованием объектно-ориентированного программирования.

«Крестики-нолики» - популярная игра людей всех возрастов. Она отличается простотой, способствует развитию внимания и элементарной логики. В данной работе эта игра реализована на языке Pascal.

1. Анализ проблемы

Для реализации этой задачи использовался язык программирования Pascal и среда разработки PascalABC.Net - оболочка, основанная на Delphi (Object Pascal) и сочетающая простоту языка Паскаль и огромные возможности платформы .NET (платформа от корпорации MicroSoft).

Крестики-нолики -- логическая игра между двумя противниками на квадратном поле 3 на 3 клетки или боольшего размера (вплоть до «бесконечного поля»). Один из игроков играет «крестиками», второй -- «ноликами».

Классические «крестики-нолики» на поле 3x3 не представляют никакого практического интереса -- общеизвестен алгоритм, который при правильной игре гарантирует ничью любой стороне, а при ошибке противника позволяет выиграть. Таким образом, игра находится в состоянии «ничейной смерти».

Передо мной стояла задача разработать небольшую программу игры в крестики-нолики пять в ряд на поле размера 15х15 клеток с применением графики, c ожиданием хода от очередного игрока не более 1-ой минуты.

Игра ведется на поле 15х15, разлинованном в клетку, рассчитана на 2-х игроков. Первый ход совершает пользователь, играющий крестиками. Перед игрой противники решают, кто будет играть крестиками, а кто ноликами. В ходе игры противники ставят по очереди крестик или нолик (в зависимости от договоренности перед началом игры) в свободную клетку на поле.

Цель игры - построить линию из 5 стоящих рядом по вертикали, горизонтали или диагонали крестиков или ноликов. Первый игрок, построивший такую комбинацию из знаков своего типа (крестиков или ноликов) выигрывает.

Если свободные клетки поля закончились, но никто из игроков не одержал победы, то считают, что игра закончилась «ничьей».

Компоненты, которые должны входить в приложение можно стандартно разделить на две составляющие: интерфейс и программная часть.

В интерфейсе должно присутствовать игровое поле, возможность выбирать нужную ячейку клавишами навигации, при нажатии на соответствующую клавишу заносить знак “Х” или ”О”, выводиться информация о ходе игры и пр.

Программно игра должна быть реализована с использованием двумерного массива, представляющий игровое поле. Каждый элемент массива представляет клетку поля. Индексы массива соответствуют положению клеток на поле.

Элемент массива может принимать следующие значения:

0 - клетка пуста;

1 - в клетке крестик;

2 - в клетке нолик;

Алгоритм работы: производится перерисовка клеток игрового поля. В зависимости от значений массива выводится в клетку:

0 - ничего не выводит;

1 - крестик зеленым цветом;

2 - нолик красным цветом;

Для каждой клетки на игровом поле просматриваются соседние клетки по горизонтали, вертикали, вниз и вправо, по диагонали. Если в одном из направлений символы во всех клетках на расстоянии до 4 совпадают с символом в текущей клетке, то игра считается выигранной.

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

1) Код нажатых клавиш клавиатуры.

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

1) Игровое поле, заполненное крестиками и ноликами, отображаемое на экране.

2) В случае выигрыша одного из игроков, вывод соответствующего сообщения и дополнительной информации.

Для всех операций были использованы стандартные возможности Паскаля, так что не понадобилось даже использования сторонних библиотек. Возможно, к списку сторонних модулей можно отнести модуль Timers (встроенный модуль в PascalABC.NET) для вывода оставшегося времени на совершение хода игрока.

Для написания интерфейса в работе использовался модуль GraphABC.

2. Алгоритмическое конструирование

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

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

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

Подпрограммы:

o StartMenu

o Pole

o Kursor

o Symbol

o ExitMenu

Описание подпрограмм:

o Procedure StartMenu. Данная подпрограмма выводит начальное окно игры. В нем содержится информация о название игры, а также необходимая инструкция к игре. В этой подпрограмме используются стандартные процедуры:

· SetFontStyle; - устанавливает стиль выводимого текста (библиотека GraphABC);

· TextOut(x, y, S); - печатает строку S, начиная с позиции (x, y); (библиотека GraphABC);

· SetFontColor(цвет); - выбирает цвет; (библиотека GraphABC);

· Sleep(k) - выполняется задержка на указанное количество миллисекунд.

o Procedure 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) - устанавливает цвет текущего пера;

o Procedure HowPlay. Данная процедура выводит на экран инструкцию по игре. Набот стандартных процедур идентичен такому набору как в процедуре StartMenu.

o Procedure Kursor (var x, y: integer; var ud, lr: shortint; c: color). Данная процедура служит для вывода на экран квадратного курсора, с помощью которого можно перемещаться между ячейками игрового поля и фиксировать символ в нужной ячейке.

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

· x, y:integer; - начальные координаты верхнего левого угла игрового поля;

· с:color; - цвет курсора;

· ud, lr: shortint; - номер строки и столба, т.е. координаты ячейки игрового поля;

Подпрограмма Kursor вызывается подпрограммой KeyDown.

o procedure 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);

После получения координат курсора процедура выводит символ в соответствующую ячейку на игровом поле.

o ExitMenu. Эта процедура вызывается из тела главной программы после окончания игрового кона. Она выводит информационное окно с предложением выйти из игры, либо начать заново.

Используемые стандартные функции и процедуры:

· Line(x1, y1, x2, y2);

· SetFontStyle;

· TextOut(x, y, S);

· SetFontColor(цвет);

Модуль Base содержит основной код игры. В нем реализуются:

o Обработчик таймера

o Обработчик нажатия на клавишу

o Разрешение хода игроку

o Проверка случая победы или ничьи

Описание подпрограмм:

o procedure TBase.TimerProc. Производит отсчет таймера в течение каждой последующей минуты. В том случае, когда время отведенное игроку на совершение хода иссякнет, ход переходит к сопернику .

o procedure KtoHodit. По четности переменной «i» определяется игрок, который вправе ставить символ «Х» или «О» в клетку игрового поля.

o procedure KeyDown(Key: integer); Подпрограмма является обработчиком события OnKeyDown.

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

· Key : integer; - содержит виртуальный код нажатой клавиши.

Эта процедура вызывается при нажатии на клавиши и, в зависимости от нажатых клавиш, выполняет соотвествующие им по программе действия . Если нажаты клавиши перемещения по игровому полю, то происходит запоминание нового положения на поле, если, к примеру, курсор находится в самой верхней ячейке и нажата клавиша «вверх», то курсор перемещается в самую нижнюю ячейку этого же столбца. Затем вызывается процедура Kursor, которая отображает перемещение курсора в игровом поле по вертикали и горизонтали (вверх, вниз, влево, вправо).

При нажатии на Space происходит перезапуск игры, при нажатии на Escape - выход из игры.

o Procedure 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 совпадают с символом в текущей клетке, то игра считается выигранной. На рис. 10 и 11 изображены варианты победы.

Рисунок 10 - Победа «крестиков»

Рисунок 11 - Победа «ноликов»

Были протестированы различные ситуации в игре. При возникновении ошибок, программа подвергалась доработке. Тем самым можно полагаться на то, что программа работает достаточно правильно, хотя говорить о полной ликвидации всех ошибок еще нельзя. Вполне возможно, что сейчас мы имеем исправную и весьма интересную игру.

Заключение

В данной работе написана хорошо всем известная игра «Крестики-Нолики».

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

Несмотря на внешнюю простоту, программа представляет собой сложную систему взаимодействующих друг с другом функций. Игра требовала немало сил и времени на написание. И все же может быть усовершенствован код программы, а также добавлены новые функции.

Список литературы

URL: www.pascalabc.net - Статьи и материалы по работе со средой PascalABC.NET

URL: www.pascalabc.net - Статьи и материалы по работе со средой PascalABC.NET

URL: www.ru.wikipedia.org - Википедия, полезные статьи и материалы

Приложение

Код программы

«Основная программа»

program qqq;

uses

Grafika, Base, graphABC, Timers;

var

t: Timer;

q1: TBase; q2: TGrafika;

i, j: integer;ch: char;

procedure keydown(key: integer);

begin

case key of

VK_Escape: Window.Close;

end;

end;

begin

SetWindowCaption('Игра "Крестики - Нолики"');

repeat

q1 := TBase.Create;

q2 := TGrafika.Create;

Q2.StartMenu;

redraw;

Q1.ud := 1; Q1.lr := 1;

Q1.x0 := 50; Q1.y0 := 50;

q1.t := new Timer(999, q1.TimerProc);

Q1.ii := 60;

Q1.k := 1;

for i := 1 to 15 do

for j := 1 to 15 do q1.a[i, j] := 0;

LockDrawing;

repeat

q2.Pole;

q1.KtoHodit;

Redraw;

Sleep(1);

until (ord(q1.ch) = 27) or (ord(q1.ch) = 32);

q1.t.Stop;

q2.ExitMenu;

redraw;

UnlockDrawing;

sleep(3000);

OnKeyDown := keydown;

clearwindow;

until q1.ch = #27;

Window.close;

end.

«Модуль Grafika»

unit Grafika;

interface

uses

GraphABC;

type

TGrafika = class

public

constructor Create();

procedure Kursor(var x, y: integer; var ud, lr: shortint; c: color);

procedure StartMenu;

procedure ExitMenu;

procedure Pole;

procedure HowPlay;

procedure Symbol(x, y: integer; zn: char);

end;

implementation

constructor TGrafika.Create;

begin

end;

procedure TGrafika.StartMenu;

begin

SetFontSize(25);

SetFontColor(color.Gold);

SetFontStyle(FontStyleType.fsBold);

TextOut(30, 30, ' Игра "Крестики-Нолики"');

SetFontSize(16);

SetFontColor(color.Blue);

SetFontStyle(FontStyleType.fsBoldUnderline);

TextOut(20, 90, 'Инструкция к игре:');

SetFontStyle(FontStyleType.fsBold);

SetFontSize(13);

TextOut(40, 120, 'Для перемещения курсора используйте');

TextOut(60, 140, 'ВЛЕВО >');

TextOut(60, 160, 'ВПРАВО <');

TextOut(60, 180, 'ВВЕРХ ^');

TextOut(60, 200, 'ВНИЗ ');

TextOut(40, 240, 'Используйте ENTER для ввода ');

TextOut(40, 260, 'Для начала игры нажмите ENTER!!!!');

sleep(3000);

ClearWindow;

end;

procedure TGrafika.ExitMenu;{Меню после игры -------}

begin

SetFontColor(color.Gold);

SetFontStyle(FontStyleType.fsBold);

TextOut(20, 380, 'Для выхода из игры нажмите ''ESCAPE''');

TextOut(20, 360, 'Будет начата новая игра');

end;

procedure TGrafika.kursor(var x, y: integer; var ud, lr: shortint; c: color);

begin

SetPenColor(c);

SetPenWidth(3);

x := 30 + (lr * 20);

y := 30 + (ud * 20);

line(x + 2, y + 2, x + 18, y + 2);line(x + 2, y + 18, x + 18, y + 18);line(x + 2, y + 2, x + 2, y + 18);line(x + 18, y + 2, x + 18, y + 18);

end;

procedure TGrafika.Pole;{Вид игрового поля}

begin

setfontcolor(color.Red);

SetFontSize(13);

SetPenColor(color.SkyBlue);

SetPenWidth(3);

{reshetka}

line(50, 50, 350, 50);line(70, 50, 70, 350);

line(50, 70, 350, 70); line(90, 50, 90, 350);

line(50, 90, 350, 90);line(110, 50, 110, 350);

line(50, 110, 350, 110);line(130, 50, 130, 350);

line(50, 130, 350, 130);line(150, 50, 150, 350);

line(50, 150, 350, 150);line(170, 50, 170, 350);

line(50, 170, 350, 170);line(190, 50, 190, 350);

line(50, 190, 350, 190);line(210, 50, 210, 350);

line(50, 210, 350, 210);line(230, 50, 230, 350);

line(50, 230, 350, 230);line(250, 50, 250, 350);

line(50, 250, 350, 250);line(270, 50, 270, 350);

line(50, 270, 350, 270);line(290, 50, 290, 350);

line(50, 290, 350, 290);line(310, 50, 310, 350);

line(50, 310, 350, 310);line(330, 50, 330, 350);

line(50, 330, 350, 330);line(350, 50, 350, 350);

line(50, 350, 350, 350);line(50, 50, 50, 350);

SetFontStyle(fontstyletype.fsBoldItalic);

textout(20, 10, 'Играйте!');

end;

procedure TGrafika.HowPlay;{Как играть}

begin

setfontcolor(color.Green);

line(225, 0, 225, 300);

line(225, 300, 500, 300);

line(500, 0, 500, 300);

line(225, 0, 500, 0);

SetFontColor(color.Blue);

SetFontStyle(FontStyleType.fsBoldUnderline);

TextOut(240, 30, 'Инструкция');

SetFontStyle(FontStyleType.fsBold);

SetFontSize(10);

TextOut(250, 80, 'Для перемещения используйте');

TextOut(295, 105, 'LEFT'); TextOut(350, 105, chr(97));

TextOut(295, 125, 'RIGHT'); TextOut(350, 125, chr(100));

TextOut(295, 145, 'UP'); TextOut(350, 145, chr(115));

TextOut(295, 165, 'DOWN'); TextOut(350, 165, chr(119));

TextOut(230, 230, 'Нажмите Enter чтобы поставить X или Y');

end;

procedure TGrafika.Symbol(x, y: integer; zn: char);{Символ X или O в игровом поле}

begin

var c: color;

if zn = 'X' then c := Color.Green else c := Color.Red;

setFontcolor(c);SetFontStyle(fontstyletype.fsBold);

TextOut(x + 5, y + 1, zn);

end;

end.

«Модуль Base»

unit Base;

interface

uses

grafika, Timers, GraphABC;

type

TBase = class(Tgrafika)

public

t: timer;

x0, y0, i, ii, k, j: integer;

ch, zn: char; c: color;

a: array[1..15, 1..15] of shortint;

n, ud, lr, Zero: shortint;

public

constructor Create;

procedure TBase.TimerProc;

procedure KtoHodit;

procedure KeyDown(Key: integer);

procedure Pobeditel;

end;

implementation

constructor TBase.Create;

begin

end;

procedure TBase.TimerProc();

begin

TextOut(400, 10, 'Осталось ' + inttostr(ii) + ' сек.!');

dec(ii);

if ii < 0 then begin

t.Stop; inc(k); ii := 60;

setfontcolor(color.Black);

setfontsize(12);

TextOut(400, 40, 'Ход переходит к сопернику');

KtoHodit; end;

end;

procedure TBase.KeyDown(Key: integer);

begin

case Key of

VK_Left:

begin

var c := color.White; kursor(x0, y0, ud, lr, c); {left}

if lr = 1 then lr := 15 else dec(lr);

c := color.HotPink;

kursor(x0, y0, ud, lr, c);

end;

VK_Right:

begin

c := color.White; kursor(x0, y0, ud, lr, c);

if lr = 15 then lr := 1 else inc(lr);{right}

c := color.HotPink;

kursor(x0, y0, ud, lr, c);

end;

VK_Up:

begin

c := color.White; kursor(x0, y0, ud, lr, c);{клавиша Вверх}

if ud = 1 then ud := 15 else dec(ud);

c := color.HotPink;

kursor(x0, y0, ud, lr, c);

end;

VK_Down:

begin

c := color.White; kursor(x0, y0, ud, lr, c);{клавиша Вниз}

if ud = 15 then ud := 1 else inc(ud);

c := color.HotPink;

kursor(x0, y0, ud, lr, c);

end;

VK_Enter:

begin

if (a[ud, lr] = 0) and (ord(ch) <> 32) then

begin

a[ud, lr] := n; inc(k); symbol(x0, y0, zn); ii := 60; pobeditel; end;

end;

VK_Escape:

begin

Window.Close;

end;

vk_space: ch := chr(32) ;

end;

end;

procedure TBase.KtoHodit;

begin

Zero := 0;

if (k mod 2 <> 0) then begin zn := 'X'; n := 1; t.Start; end

else begin zn := 'O'; n := 2; t.Start end;

OnKeyDown := KeyDown;

end;

procedure TBase.Pobeditel;

var

i, j: integer;

begin

for i := 1 to 15 do

for j := 1 to 15 do

begin

case i of

1..4:

begin

case j of

1..4:

begin

if ((a[i, j] = n) and (a[i + 1, j] = n) and (a[i + 2, j] = n) and (a[i + 3, j] = n) and (a[i + 4, j] = n)) or ((a[i, j] = n) and (a[i, j + 1] = n) and (a[i, j + 2] = n) and (a[i, j + 3] = n) and (a[i, j + 4] = n)) or ((a[i, j] = n) and (a[i + 1, j + 1] = n) and (a[i + 2, j + 2] = n) and (a[i + 3, j + 3] = n) and (a[i + 4, j + 4] = n)) then

begin

textout(400, 220, 'Победил игрок ' + zn);

ch := chr(32);

end;

end;

5..11:

begin

if ((a[i, j] = n) and (a[i + 1, j] = n) and (a[i + 2, j] = n) and (a[i + 3, j] = n) and (a[i + 4, j] = n)) or ((a[i, j] = n) and (a[i, j + 1] = n) and (a[i, j + 2] = n) and (a[i, j + 3] = n) and (a[i, j + 4] = n)) or ((a[i, j] = n) and (a[i + 1, j + 1] = n) and (a[i + 2, j + 2] = n) and (a[i + 3, j + 3] = n) and (a[i + 4, j + 4] = n)) or ((a[i, j] = n) and (a[i, j - 1] = n) and (a[i, j - 2] = n) and (a[i, j - 3] = n) and (a[i, j - 4] = n)) or ((a[i, j] = n) and (a[i + 1, j - 1] = n) and (a[i + 2, j - 2] = n) and (a[i + 3, j - 3] = n) and (a[i + 4, j - 4] = n)) then

begin

textout(400, 220, 'Победил игрок ' + zn);

ch := chr(32);

end;

end;

12..15:

begin

if ((a[i, j] = n) and (a[i, j - 1] = n) and (a[i, j - 2] = n) and (a[i, j - 3] = n) and (a[i, j - 4] = n)) or ((a[i, j] = n) and (a[i + 1, j - 1] = n) and (a[i + 2, j - 2] = n) and (a[i + 3, j - 3] = n) and (a[i + 4, j - 4] = n)) or ((a[i, j] = n) and (a[i + 1, j] = n) and (a[i + 2, j] = n) and (a[i + 3, j] = n) and (a[i + 4, j] = n)) then

begin

textout(400, 220, 'Победил игрок ' + zn);

ch := chr(32);

end;

end;

end;

end;

5..11:

begin

case j of

1..4:

begin

if ((a[i, j] = n) and (a[i - 1, j] = n) and (a[i - 2, j] = n) and (a[i - 3, j] = n) and (a[i - 4, j] = n)) or ((a[i, j] = n) and (a[i + 1, j] = n) and (a[i + 2, j] = n) and (a[i + 3, j] = n) and (a[i + 4, j] = n)) or ((a[i, j] = n) and (a[i, j + 1] = n) and (a[i, j + 2] = n) and (a[i, j + 3] = n) and (a[i, j + 4] = n)) or ((a[i, j] = n) and (a[i - 1, j + 1] = n) and (a[i - 2, j + 2] = n) and (a[i - 3, j + 3] = n) and (a[i - 4, j + 4] = n)) or ((a[i, j] = n) and (a[i + 1, j + 1] = n) and (a[i + 2, j + 2] = n) and (a[i + 3, j + 3] = n) and (a[i + 4, j + 4] = n)) then

begin

textout(400, 220, 'Победил игрок ' + zn);

ch := chr(32);

end;

end;

5..11:

begin

if ((a[i, j] = n) and (a[i - 1, j] = n) and (a[i - 2, j] = n) and (a[i - 3, j] = n) and (a[i - 4, j] = n)) or ((a[i, j] = n) and (a[i + 1, j] = n) and (a[i + 2, j] = n) and (a[i + 3, j] = n) and (a[i + 4, j] = n)) or ((a[i, j] = n) and (a[i, j - 1] = n) and (a[i, j - 2] = n) and (a[i, j - 3] = n) and (a[i, j - 4] = n)) or ((a[i, j] = n) and (a[i, j + 1] = n) and (a[i, j + 2] = n) and (a[i, j + 3] = n) and (a[i, j + 4] = n)) or ((a[i, j] = n) and (a[i - 1, j + 1] = n) and (a[i - 2, j + 2] = n) and (a[i - 3, j + 3] = n) and (a[i - 4, j + 4] = n)) or ((a[i, j] = n) and (a[i + 1, j - 1] = n) and (a[i + 2, j - 2] = n) and (a[i + 3, j - 3] = n) and (a[i + 4, j - 4] = n)) or ((a[i, j] = n) and (a[i + 1, j + 1] = n) and (a[i + 2, j + 2] = n) and (a[i + 3, j + 3] = n) and (a[i + 4, j + 4] = n)) or ((a[i, j] = n) and (a[i - 1, j - 1] = n) and (a[i - 2, j - 2] = n) and (a[i - 3, j - 3] = n) and (a[i - 4, j - 4] = n)) then

begin

textout(400, 220, 'Победил игрок ' + zn);

ch := chr(32);

end;

end;

12..15:

begin

if ((a[i, j] = n) and (a[i - 1, j] = n) and (a[i - 2, j] = n) and (a[i - 3, j] = n) and (a[i - 4, j] = n)) or ((a[i, j] = n) and (a[i + 1, j] = n) and (a[i + 2, j] = n) and (a[i + 3, j] = n) and (a[i + 4, j] = n)) or ((a[i, j] = n) and (a[i, j - 1] = n) and (a[i, j - 2] = n) and (a[i, j - 3] = n) and (a[i, j - 4] = n)) or ((a[i, j] = n) and (a[i + 1, j - 1] = n) and (a[i + 2, j - 2] = n) and (a[i + 3, j - 3] = n) and (a[i + 4, j - 4] = n)) or ((a[i, j] = n) and (a[i - 1, j - 1] = n) and (a[i - 2, j - 2] = n) and (a[i - 3, j - 3] = n) and (a[i - 4, j - 4] = n)) then

begin

textout(400, 220, 'Победил игрок ' + zn);

ch := chr(32);

end;

end;

end;

end;

12..15:

begin

case j of

1..4:

begin

if ((a[i, j] = n) and (a[i - 1, j] = n) and (a[i - 2, j] = n) and (a[i - 3, j] = n) and (a[i - 4, j] = n)) or ((a[i, j] = n) and (a[i, j + 1] = n) and (a[i, j + 2] = n) and (a[i, j + 3] = n) and (a[i, j + 4] = n)) or ((a[i, j] = n) and (a[i - 1, j + 1] = n) and (a[i - 2, j + 2] = n) and (a[i - 3, j + 3] = n) and (a[i - 4, j + 4] = n)) then

begin

textout(400, 220, 'Победил игрок ' + zn);

ch := chr(32);

end;

end;

5..11:

begin

if ((a[i, j] = n) and (a[i - 1, j] = n) and (a[i - 2, j] = n) and (a[i - 3, j] = n) and (a[i - 4, j] = n)) or ((a[i, j] = n) and (a[i, j - 1] = n) and (a[i, j - 2] = n) and (a[i, j - 3] = n) and (a[i, j - 4] = n)) or ((a[i, j] = n) and (a[i, j + 1] = n) and (a[i, j + 2] = n) and (a[i, j + 3] = n) and (a[i, j + 4] = n)) or ((a[i, j] = n) and (a[i - 1, j + 1] = n) and (a[i - 2, j + 2] = n) and (a[i - 3, j + 3] = n) and (a[i - 4, j + 4] = n)) or ((a[i, j] = n) and (a[i - 1, j - 1] = n) and (a[i - 2, j - 2] = n) and (a[i - 3, j - 3] = n) and (a[i - 4, j - 4] = n)) then

begin

textout(400, 220, 'Победил игрок ' + zn);

ch := chr(32);

end;

end;

12..15:

begin

if ((a[i, j] = n) and (a[i - 1, j] = n) and (a[i - 2, j] = n) and (a[i - 3, j] = n) and (a[i - 4, j] = n)) or ((a[i, j] = n) and (a[i, j - 1] = n) and (a[i, j - 2] = n) and (a[i, j - 3] = n) and (a[i, j - 4] = n)) or ((a[i, j] = n) and (a[i - 1, j - 1] = n) and (a[i - 2, j - 2] = n) and (a[i - 3, j - 3] = n) and (a[i - 4, j - 4] = n)) then

begin

textout(400, 220, 'Победил игрок ' + zn);

ch := chr(32);

end;

end;

end;

end;

end;

end;

for i := 1 to 15 do

for j := 1 to 15 do

if a[i, j] = 0 then inc(Zero);

if Zero = 0 then

begin

TextOut(400, 150, 'Ничья!');

ch := chr(32);

end;

end;

end.

Размещено на Allbest.ru


Подобные документы

  • Разработка программы игры в крестики-нолики. Примеры игровой ситуации на игровом поле. Описание входных и выходных данных, переменных и функций программы. Реализация алгоритма работы программы на языке C++. Текст программы и примеры ее выполнения.

    курсовая работа [352,8 K], добавлен 14.04.2011

  • Проект программы "Крестики-нолики". Блок-схема алгоритма. Описание работы программного продукта. Инструкция по инсталляции. Инструкция программисту, возможность доработки с целью упрощения исполняемых кодов. Инструкция по проверке и тестированию.

    курсовая работа [235,8 K], добавлен 05.12.2009

  • Разработка алгоритма, выполняющего поиск наилучшего решения на каждый ход в игре "крестики-нолики" (используя минимальный алгоритм). Обоснование выбора программных средств для решения задачи. Блок-схема интеллектуального алгоритма реализации программы.

    контрольная работа [380,0 K], добавлен 28.04.2014

  • Программный продукт для игры "Крестики-нолики". Описание пользовательского интерфейса. Факт базы данных, определяющий состояние счёта. Предикат изменяющий состояние игрового процесса и подсчитывающий количество занятых ячеек поля. Исходный код программы.

    курсовая работа [34,6 K], добавлен 19.05.2014

  • Разработка популярной развлекательной игры крестики-нолики. Возможность играть с компьютером, который играет согласно созданному алгоритму. Новые возможности Visual Studio. Легкое усвоение программы. Удобный интерфейс - "визитная карточка" приложения.

    курсовая работа [74,6 K], добавлен 20.12.2009

  • Знакомство с интерфейсом пользователя и сценарием использования программы игры в крестики и нолики. Функциональные и нефункциональные требования для персонального компьютера. Исключительные ситуации и реакция программы. Пример кода игры и комментарии.

    курсовая работа [236,5 K], добавлен 27.01.2014

  • Разработка аналога игры "Крестики-нолики", где игроки выбирают размер поля. Правила игры. Интерфейс программы. Главная функция main. Класс XO. Метод вывода поля и хода игроков. Методы поиска крестиков, ноликов. Методы проверки выигрышных ситуаций игроков.

    курсовая работа [281,5 K], добавлен 30.01.2018

  • Разработка консольного приложения: описание и сценарий использования программы, интерфейс пользователя. Поэтапное описание создание кода компьютерной игры "Крестики нолики". Функциональные и нефункциональные требования, описание исключительных ситуаций.

    методичка [819,6 K], добавлен 12.05.2013

  • Общая характеристика языков программирования. Краткий обзор C, C++, Java, PHP, Python, Delphi и Visual Basic. Процесс разработки программы игра "Крестики и нолики" с помощью AppWizard. Компиляция и компоновка модулей, определение интерфейса приложения.

    курсовая работа [2,5 M], добавлен 27.05.2014

  • Технические и пользовательские характеристики игры, требования к программному обеспечению и среде разработки C#. Составление блок-схемы алгоритма, uml-диаграммы и текста программы, тестирование корректности компьютерного кода и результатов его работы.

    курсовая работа [1,8 M], добавлен 05.03.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.