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

 

Оглавление


Введение

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

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

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

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

Заключение

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

Приложение


Введение


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

Например, популярные в последнее время небольшие игры (чаще всего многопользовательские, через сеть Интернет) создаются по технологии 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 стоящих рядом по вертикали, горизонтали или диагонали крестиков или ноликов. Первый игрок, построивший такую комбинацию из знаков своего типа (крестиков или ноликов) выигрывает.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Для всех операций были использованы стандартные возможности Паскаля, так что не понадобилось даже использования сторонних библиотек. Возможно, к списку сторонних модулей можно отнести модуль 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Вывод сообщений и прочей информации

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

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

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

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


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


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


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


Заключение


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

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

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


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


URL: www.pascalabc.net - Статьи и материалы по работе со средой PascalABC.NET: www.pascalabc.net - Статьи и материалы по работе со средой PascalABC.NET: www.ru.wikipedia.org - Википедия, полезные статьи и материалы


Приложение


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

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

program qqq;, Base, graphABC, Timers;: Timer;: TBase; q2: TGrafika;, j: integer;ch: char;keydown(key: integer);key of_Escape: Window.Close;;;

('Игра "Крестики - Нолики"');:= TBase.Create;:= TGrafika.Create;.StartMenu;;.ud := 1; Q1.lr := 1;.x0 := 50; Q1.y0 := 50;.t := new Timer(999, q1.TimerProc);.ii := 60;.k := 1;i := 1 to 15 doj := 1 to 15 do q1.a[i, j] := 0;; .Pole;.KtoHodit;;(1);(ord(q1.ch) = 27) or (ord(q1.ch) = 32);.t.Stop;.ExitMenu;;;(3000);:= keydown;;q1.ch = #27;.close;.


«Модуль Grafika»

unit Grafika;;= classCreate();Kursor(var x, y: integer; var ud, lr: shortint; c: color);StartMenu;ExitMenu;Pole;HowPlay;Symbol(x, y: integer; zn: char);;TGrafika.Create;;TGrafika.StartMenu;(25);(color.Gold);(FontStyleType.fsBold);(30, 30, ' Игра "Крестики-Нолики"');(16);(color.Blue);(FontStyleType.fsBoldUnderline);

TextOut(20, 90, 'Инструкция к игре:');(FontStyleType.fsBold);(13);(40, 120, 'Для перемещения курсора используйте');(60, 140, 'ВЛЕВО >'); (60, 160, 'ВПРАВО <');

TextOut(60, 180, 'ВВЕРХ ^'); (60, 200, 'ВНИЗ ');

TextOut(40, 240, 'Используйте ENTER для ввода ');(40, 260, 'Для начала игры нажмите ENTER!!!!');

sleep(3000);;;

TGrafika.ExitMenu;{Меню после игры -------}(color.Gold);(FontStyleType.fsBold);

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

end;

TGrafika.kursor(var x, y: integer; var ud, lr: shortint; c: color);(c);(3);:= 30 + (lr * 20);:= 30 + (ud * 20);(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);;

TGrafika.Pole;{Вид игрового поля}(color.Red);(13);(color.SkyBlue);(3);

{reshetka}(50, 50, 350, 50);line(70, 50, 70, 350);(50, 70, 350, 70); line(90, 50, 90, 350);(50, 90, 350, 90);line(110, 50, 110, 350);(50, 110, 350, 110);line(130, 50, 130, 350);(50, 130, 350, 130);line(150, 50, 150, 350);(50, 150, 350, 150);line(170, 50, 170, 350);(50, 170, 350, 170);line(190, 50, 190, 350);(50, 190, 350, 190);line(210, 50, 210, 350);(50, 210, 350, 210);line(230, 50, 230, 350);(50, 230, 350, 230);line(250, 50, 250, 350);(50, 250, 350, 250);line(270, 50, 270, 350);(50, 270, 350, 270);line(290, 50, 290, 350);(50, 290, 350, 290);line(310, 50, 310, 350);(50, 310, 350, 310);line(330, 50, 330, 350);(50, 330, 350, 330);line(350, 50, 350, 350);(50, 350, 350, 350);line(50, 50, 50, 350);(fontstyletype.fsBoldItalic);(20, 10, 'Играйте!');;

TGrafika.HowPlay;{Как играть}(color.Green);(225, 0, 225, 300);(225, 300, 500, 300);(500, 0, 500, 300);(225, 0, 500, 0);(color.Blue);(FontStyleType.fsBoldUnderline);(240, 30, 'Инструкция');(FontStyleType.fsBold);(10);(250, 80, 'Для перемещения используйте');(295, 105, 'LEFT'); TextOut(350, 105, chr(97));(295, 125, 'RIGHT'); TextOut(350, 125, chr(100));(295, 145, 'UP'); TextOut(350, 145, chr(115));(295, 165, 'DOWN'); TextOut(350, 165, chr(119));

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

end;

TGrafika.Symbol(x, y: integer; zn: char);{Символ X или O в игровом поле}c: color;zn = 'X' then c := Color.Green else c := Color.Red;(c);SetFontStyle(fontstyletype.fsBold);(x + 5, y + 1, zn);;

end.

«Модуль Base»

unit Base;, Timers, GraphABC;= class(Tgrafika): timer;, y0, i, ii, k, j: integer;, zn: char; c: color;: array[1..15, 1..15] of shortint;, ud, lr, Zero: shortint;

Create;TBase.TimerProc;KtoHodit;KeyDown(Key: integer);Pobeditel;;TBase.Create;;TBase.TimerProc();(400, 10, 'Осталось ' + inttostr(ii) + ' сек.!');(ii);ii < 0 then begin.Stop; inc(k); ii := 60;(color.Black);(12);(400, 40, 'Ход переходит к сопернику'); ; end;;TBase.KeyDown(Key: integer);Key of_Left: c := color.White; kursor(x0, y0, ud, lr, c); {left}lr = 1 then lr := 15 else dec(lr);:= color.HotPink;(x0, y0, ud, lr, c);; _Right: := color.White; kursor(x0, y0, ud, lr, c); lr = 15 then lr := 1 else inc(lr);{right}:= color.HotPink;(x0, y0, ud, lr, c);;_Up: := color.White; kursor(x0, y0, ud, lr, c);{клавиша Вверх}ud = 1 then ud := 15 else dec(ud);:= color.HotPink;(x0, y0, ud, lr, c);;_Down: := color.White; kursor(x0, y0, ud, lr, c);{клавиша Вниз}ud = 15 then ud := 1 else inc(ud);:= color.HotPink;(x0, y0, ud, lr, c);;_Enter:(a[ud, lr] = 0) and (ord(ch) <> 32) then [ud, lr] := n; inc(k); symbol(x0, y0, zn); ii := 60; pobeditel; end;;_Escape: .Close;;_space: ch := chr(32) ;;;

TBase.KtoHodit;:= 0;(k mod 2 <> 0) then begin zn := 'X'; n := 1; t.Start; endbegin zn := 'O'; n := 2; t.Start end;:= KeyDown;;

TBase.Pobeditel;, j: integer;i := 1 to 15 doj := 1 to 15 doi of

..4: j of

..4: ((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(400, 220, 'Победил игрок ' + zn);:= chr(32);;;


..11: ((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(400, 220, 'Победил игрок ' + zn);:= chr(32);;;

..15:((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(400, 220, 'Победил игрок ' + zn);:= chr(32);;;;;

..11:j of

..4: ((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(400, 220, 'Победил игрок ' + zn);:= chr(32);;;

..11: ((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(400, 220, 'Победил игрок ' + zn);:= chr(32);;;

..15:((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(400, 220, 'Победил игрок ' + zn);:= chr(32);;;;;

..15:j of

..4: ((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(400, 220, 'Победил игрок ' + zn);:= chr(32);;;

..11:((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(400, 220, 'Победил игрок ' + zn);:= chr(32);;;

..15: ((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(400, 220, 'Победил игрок ' + zn);:= chr(32);;;;;;;i := 1 to 15 doj := 1 to 15 doa[i, j] = 0 then inc(Zero);Zero = 0 then(400, 150, 'Ничья!');:= chr(32);;;.


Оглавление Введение . Анализ проблемы . Алгоритмическое конструирование . Программное проектирование . Тестирование программы Заключение

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ