Создание игровой программы "Морской бой"

Построение и анализ математической модели игры. Определение вероятности обнаружения кораблей при всевозможном их расположении и различных системах поиска. Разработка алгоритмов для работы искусственного интеллекта. Структура программы и ее компоненты.

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

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

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

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

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

Министерство образования Республики Беларусь

«Белорусский государственный университет информатики и радиоэлектроники»

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовой работе

по курсу «Основы алгоритмизации и программирования»

Выполнил

студент группы 281014 Е.С. Петлах

Содержание

Введение

1. Математическая постановка задачи

2. Метод решения задачи

3. Укрупненная структура разработанного программного средства и описание назначения ее компонент

4. Схемы алгоритмов решения задачи и их описание

5. Результаты тестирования разработанного программного средства

6. Методика работы пользователя с разработанным программным средством

Литература

Приложение А. Исходный текст программного средства

Введение

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

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

В данной курсовой работе речь пойдет о создании несложной игровой программы «Морской бой», которая и будет являться объектом исследования.

В данной пояснительной записке представлены следующие главы:

1. математическая постановка задачи (в данной главе описаны математические принципы построения проекта);

2. метод решения задачи (в данной главе описаны реализация метода и принципы проектирования);

3. укрупненная структура разработанной программы и описание назначения ее компонентов (в данной главе структура всех данных и наименование юнитов);

4. схемы алгоритмов решения задачи (в данной главе описаны алгоритмы, применяющиеся при решении);

5. результаты тестирования разработанной программы (в данной главе описана методика тестирования);

6. методика работы пользователя с разработанной программой (в данной главе описана область применения проекта).

1. Математическая постановка задача

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

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

На поле из n клеток расположен одноклеточный корабль. Определим вероятность попадания в корабль k-ым выстрелом, то есть его уничтожение.

В качестве пространства элементарных исходов выбора игрока В рассмотрим множество стратегий обстрела игрового поля, каждая стратегия состоит из n выстрелов,

,

где - номер выбранной клетки, то есть рассмотрим множество всех выборок из n по n клеток. Очевидно, что это пространство содержит элементов и все эти стратегии равновозможны. Количество стратегий с благоприятным исходом, то есть количество выборок, содержащих на k-ом месте искомую клетку

.

Вероятность попадания

.

Определим вероятность уничтожения корабля за k выстрелов. Это событие состоит в том, что корабль может быть уничтожен либо первым выстрелом, либо вторым и т.д., то есть благоприятная выборка из k клеток содержит искомую клетку с кораблем. Количество благоприятных стратегий определится как число неупорядоченных выборок из множества n - 1 клеток по k - 1 (одна клетка, занятая кораблем не учитывается при выборке), умноженное на число перестановок в самой выборке k! и число перестановок клеток оставшихся за выборкой (n - k)!:)!. Вероятность попадания в одноклеточный корабль за k выстрелов

.(1)

Усложним задачу. На поле из n клеток расположен двухклеточный корабль. Определим вероятность первого попадания в корабль (в одну из его клеток) выстрелом с номером k. Полное число всевозможных стратегий, как и в предыдущем случае, равно , а число благоприятных стратегий определяется как сумма благоприятных стратегий попадания в одну клетку и попадания во вторую клетку, то есть . Вероятность попадания k-ым выстрелом равна .

Очевидно, что при обстреле m-клеточного корабля или m одноклеточных кораблей, вероятность попадания k-ым выстрелом равна

.

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

,

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

и после преобразований получим

. (2)

Заметим, что аналогичным образом можно определить вероятность попадания за k выстрелов в корабль из m клеток. Задача попадания за k выстрелов в многоклеточный корабль хотя бы один раз является задачей поиска корабля. Очевидно, что если учесть геометрию корабля, то можно предложить систему его поиска, при которой вероятность обнаружения становится выше. Действительно, при поиске двухклеточного корабля можно рассмотреть подмножество всех стратегий, содержащих обстрел, например, клеток только с четными или с нечетными номерами. Поиск двухклеточного корабля сведется к поиску одноклеточного корабля на этом подмножестве. Полагая n четным, для оптимальной вероятности попадания за k выстрелов получим

. (3)

Найденное значение вероятности больше вероятности, полученной выше

,

при всех значениях .

Оптимальная стратегия поиска трехклеточного и четырехклеточного корабля может быть получена аналогичным образом.

Вероятность попадания в игре «Морской бой»

Всего клеток 100

а) вероятность попасть в какой-нибудь корабль равна ;

б) вероятность попасть в четырехпалубный равна ;

в) вероятность попасть в однопалубный равна ;

Всего кораблей 10, не однопалубных 6, «клеточек» 16.

а) вероятность попасть в четырехпалубный равна ;

б) вероятность попасть в трехпалубный равна ;

в) вероятность попасть в двухпалубный равна .

2. Метод решения задачи

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

Для этого необходимо разбить исходный код на несколько частей. А так же разработать стратегию игры искусственного интеллекта. Задача заключается в разработке алгоритма, по которому компьютер сможет играть в "Морской бой" с максимальным качеством и при этом не подглядывая расположение флота игрока. Дополнительное и очевидное условие: при каждой новой игре вне зависимости от размещения сил противника компьютер должен играть по-разному, т.е. его ходы должны быть не предсказуемы. Если реализовать поиск цели компьютером в виде отдельной процедуры, то надо как-то научить его запоминать исходы прошлых выстрелов, чтобы адекватно произвести следующий. Из этого факта вытекает, что самое простое и рациональное решение данной проблемы можно оформить в виде конечного автомата, наиболее точно описывающего последовательность действий. Можно выделить три состояния:

1. прострел игрового поля по случайным координатам до попадания по кораблю, после чего переход во второе состояние;

2. обстрел вокруг подбитой ячейки поля для определения направления корабля (вертикальное или горизонтальное), после очередного попадания - переход в третье состояние;

3. расстрел корабля в полученном направлении до полного его уничтожения, после чего переход в первое состояние.

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

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

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

Для эффективной работы с программным средством необходимо предусмотреть систему меню, панель инструментов, систему «Справка».

3. Укрупненная структура разработанной программы и описание назначения ее компонент

Разработанное программное средство включает два.

Unit 1 является главным модулем. Он объединяет все модули и представляет собой разработку внешней структуры программного средства, то есть её интерфейс - форма seabattle, а также определяет ход выполнения функций других модулей, в зависимости от выбранных пользователем действий.

В данном модуле осуществлен алгоритм отвечающий за искусственный интеллект, реализована система «Справка» и осуществлен доступ к описанию реализованных алгоритмов.

Так Unit1 содержит реализацию алгоритма ходов компьютера. Данный модуль содержит следующие процедуры и функции:

- procedure IntitMass - данная процедура позволяет создать два массива для реализации полей для морского боя;

- function check1 - данная функция реализует алгоритм стрельбы компьютера по случайным координатам;

- function check2 - данная функция обеспечивает обстрел вокруг подбитой ячейки поля для определения направления корабля (вертикальное или горизонтальное);

- function check3 - реализует расстрел корабля в полученном направлении до полного его уничтожения, после чего переход в первое состояние;

- function Kri - осуществляет простановку координат после уничтожения корабля противника;

- function TfmBattle - осуществляет прорисовку поля для сражения компьютера с игроком.

- procedure FindDead - данная процедура осуществляет отображение уничтоженных корабле противника;

- function Lost - эта функция осуществляет использование другой стратегии искусственного интелекта;

- procedure Enab - данная процедура инициализирует переменные и обнуляет поля игры;

- function Froeer - осуществляет простановку координат после уничтожения корабля противника;

- function Fire1 - данная функция реализует алгоритм стрельбы компьютера по случайным координатам;;

- function Kri - осуществляет простановку координат после уничтожения корабля противника.

Unit2 содержит реализацию системы шифрования Цезаря с ключевым словом. Данный модуль содержит следующие процедуры и функции:

- function Name - осуществляет алгоритм ввода имени или ник-нейма пользователя;

- function Bot - осуществляет выбор стратегии используемые компьютером.

4 .Схемы алгоритмов решения задачи и их описание

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

Ниже в виде схем Насси-Шнейдермана представлены алгоритмы основных функций, используемых в программе, а именно: Функция Draw (схема 1), Функция ShootPlayer (x, y, n) (схема 3), Функция Shoot (схема 5).

Так же основне алгоритмы представлены ниже в виде основних схем Дамке, а именно: Функция Draw (схема 2), Функция ShootPlayer (x, y, n) (схема 4), Функция Shoot (схема 5).

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

Затем происходит формирование заполнения поля компьютера.

Схема 1 - Алгоритм функции Draw, отвечающей за рисование кораблей по методу Насси-Шнейдермана

Следующая диаграмма отображает алгоритм функции Draw, отвечающей за рисование кораблей с помощью диаграммы Дамке (схема 2).

Схема 2 - диаграмма Дамке для алгоритма функции Draw, отвечающей за рисование кораблей

Следующая диаграмма отображает алгоритм функции ShootPlayer, отвечающей за рисование кораблей с помощью диаграммы Насси-Шнейдермана (схема 3).

Схема 3 - диаграмма Насси-Шнейдермана для алгоритма функции ShootPlayer, отвечающей выстрелы игрока в корабли

Ниже в виде схем Дамке представлен алгоритм функции ShootPlayer для ведения огня игроком(схема 4).

Схема 4 - алгоритм функции ShootPlayer по методу Дамке

Следующая диаграмма отображает алгоритм функции Shoot, отвечающей за попадания в корабли компьютера с помощью диаграммы Насси-Шнейдермана (схема 5).

Схема 5 - диаграмма Насси-Шнейдермана для алгоритма функции Shoot

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

Схема 6 - алгоритм функции Shoot, отвечающей за попадания в корабли компьютера по методу Дамке

5. Результаты тестирования разработанного программного средства

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

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

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

При разработке данного программного были допущены следующие синтаксические ошибки:

- неправильное использование оператора присвоения («=»);

- неверное объявление динамических массивов;

- передача неверных типов данных в окно сообщений, вызываемое командой ShowMessage();

- неверное заполнение и очистка динамических массивов.

Все перечисленные ошибки были исправлены при компиляции проекта, учитывая синтаксические особенности языка программирования Object Pascal.

Кроме синтаксических, также были допущены некоторые ошибки при выполнении программного средства:

- выход за границы пределов массивов - ошибка была устранена с помощью установки правильных пределов циклов;

- неверное переключение между закладками - ошибка исправлена путем пересмотра переменных, отвечающих за переключение между закладками;

- ошибки при неверном сравнении переменных, имеющих строковый тип - ошибка исправлена путем замены алгоритма сравнения другим;

- неверное удаление повторяющихся букв- ошибка исправлена путем пересмотра границ цикла.

Также в программном средстве возникали логические ошибки при выполнении.

Данные ошибки возникали при разработке:

- запрет на ввод некорректных данных запрещал ввод совершенно любой информации;

- при работе с массивами содержащие координаты кораблей;

- зацикливание программного средства.

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

Исправив все перечисленные выше ошибки программного средства можно перейти к его тестированию.

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

Демонстрационный пример представлен на рисунке 1.

Рисунок 1 - Главная форма расстановки кораблей по правилам морского боя

6. Методика работы пользователя с разработанным программным средством

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

Рисунок 2 - Ехе файл для запуска программного средства

После запуска программного средства перед пользователем появляется главное окно, представленное на рисунке 3.

Рисунок 3 - Главное окно

Система меню включает четыре пункта:

«Игра» - позволяет начать игру заново, загрузить или сохранить игру;

«Справка» - содержит сведения о программе, а так же осуществляет вызовов справочной системы;

Данная система позволяет быстро и легко перемещаться между необходимыми для работы разделами программного средства;

Произведём запуск игры, для этого входим в меню нажмем на кнопку «Начать игру». После этого у нас выскочит форма для заполнения настроек как показано на рисунке 4.

Рисунок 4 - Окно для настроек

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

Рисунок 5 - Расстановка кораблей вручную

После всей расстановки начинаем игру кнопкой «Начать морской бой» После этого необходимо начать прострел противника по правой зоне клеток. Атака кораблей противника изображена на рисунке изображено на рисунке 6.

Рисунок 6 - Прострел кораблей противника

После уничтожения всех кораблей выводится соответствующая форма с оповещение о поражении или победе, которая предоставлена на рисунке 7.

Рисунок 7 - Сообщение о победе

Для того чтобы завершить игру в главном меню программы выбираем пункт «Игра» и операцию «Выход» изображено на рисунке 8.

Рисунок 19 - Завершение игры

игра программа искусственный интеллект

Литература

1. Архангельский А.Я. Delphi 7. Справочное пособие. - М:ООО «Бином-Пресс», 2003 -1024 с.: ил.

2. Бобровский С. Delphi и Kylix: библиотека программиста. - СПб.: Питер, 2002. - 560с.

3. Фаронов В. В. Delphi. Программирование на языке высокого уровня.- М.: Питер, 2004. - 640 с.

4. Фленов М.Е. Библия Delphi. - 3-е изд., перераб. и доп. - СПб.:БХВ-Петербург, 2011. -688с.

5. Википедия. Свободная библиотека. Ю. Лифшиц. Курс лекций «Современные задачи криптографии» [Электрон. ресурс] / Режим доступа: http://ru.wikipedia.org/wiki/.

Приложение А

Исходный текст программного средства

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, Menus, StdCtrls, Buttons, XPMan, ExtDlgs, ShellAPI;

type

mas = array[-1..10,-1..10]of integer;

rmas = array[0..9,0..9]of real;

TfmBattle = class(TForm)

pnFields: TPanel;

myField: TImage;

cField: TImage;

MainMenu1: TMainMenu;

N1: TMenuItem;

Panel1: TPanel;

Panel2: TPanel;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

Panel3: TPanel;

N5: TMenuItem;

N6: TMenuItem;

N7: TMenuItem;

N8: TMenuItem;

Label1: TLabel;

rb4: TRadioButton;

rb3: TRadioButton;

rb2: TRadioButton;

rb1: TRadioButton;

lbName: TLabel;

Label3: TLabel;

N9: TMenuItem;

XPManifest1: TXPManifest;

pnLegend: TPanel;

Shape3: TShape;

Shape4: TShape;

Shape5: TShape;

Shape6: TShape;

StaticText1: TStaticText;

StaticText2: TStaticText;

StaticText3: TStaticText;

Memo1: TMemo;

OpenDialog1: TOpenDialog;

SaveDialog1: TSaveDialog;

Button1: TButton;

Button2: TButton;

Button3: TButton;

Button4: TButton;

Panel4: TPanel;

Shape1: TShape;

Shape2: TShape;

rbV: TRadioButton;

rbG: TRadioButton;

procedure FormActivate(Sender: TObject);

procedure myFieldMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure bbReClick(Sender: TObject);

procedure cFieldMouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure N8Click(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure N9Click(Sender: TObject);

procedure N6Click(Sender: TObject);

procedure N3Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

fmBattle: TfmBattle;

A,B,C:mas;

D:rmas;

Sh,Ch,ds:array[1..4]of integer;

p,strg:integer;

flag,nol:boolean;

ds1,ds2:integer;

State:integer;

y,z,napr,o,pp,kp:integer;

S:Set of byte;

stt:File of rmas;

implementation

uses Unit3;

{$R *.dfm}

procedure InitMas(var A,B,C:mas);

var i,j:integer;

begin

for i:=-1 to 10 do

for j:=-1 to 10 do

begin

A[i,j]:=0;

B[i,j]:=0;

C[i,j]:=0;

end;

for i:=1 to 4 do

begin

Sh[i]:=5-i;

Ch[i]:=5-i;

Ds[i]:=5-i;

end;

p:=0;

For j:=-1 to 10 do

begin

C[-1,j]:=-5;

C[j,-1]:=-5;

end;

end;

function check1(k,l,d,b:integer;A:mas):boolean;

var f:boolean;

i,j:integer;

begin

f:=TRUE;

Case b of

1:begin

f:=True;

i:=k-1;

while f and (i<=k+d+1) do

begin

j:=l-1;

while f and (j<=l+1) do

begin

f:=(A[j,i]=0);

j:=j+1;

end;

i:=i+1;

end;

end;

2:begin

f:=True;

j:=l-1;

while f and (j<=l+d+1) do

begin

i:=k-1;

while f and (i<=k+1) do

begin

f:=(A[j,i]=0);

i:=i+1;

end;

j:=j+1;

end;

end;

end;

check1:=f;

end;

function check2(k,l,d,b:integer):boolean;

var f:boolean;

begin

f:=TRUE;

Case b of

1:f:=(k+d<=9);

2:f:=(l+d<=9);

end;

check2:=f;

end;

function check3(d:integer):boolean;

begin

check3:=(Sh[d+1]>0);

end;

procedure GetB(var B:mas);

var k,l,i,j,t,p:integer;

f1,f2,f3,f4:boolean;

begin

Randomize;

f1:=False;

f2:=False;

f3:=False;

f4:=False;

repeat

k:=Random(10);

l:=Random(10);

p:=Random(2)+1;

if check1(k,l,3,p,B)and check2(k,l,3,p)

then

begin

Case p of

1: for t:=k to k+3 do

B[l,t]:=4;

2: for t:=l to l+3 do

B[t,k]:=4;

end;

dec(Ch[4]);

f4:=True;

end;

until f4;

for i:=1 to 2 do

begin

f3:=False;

Repeat

k:=Random(10);

l:=Random(10);

p:=Random(2)+1;

if check1(k,l,2,p,B)and check2(k,l,2,p)

then

begin

Case p of

1: for t:=k to k+2 do

B[l,t]:=3;

2: for t:=l to l+2 do

B[t,k]:=3;

end;

dec(Ch[3]);

f3:=True;

end;

until f3;

end;

for i:=1 to 3 do

begin

f2:=False;

Repeat

k:=Random(10);

l:=Random(10);

p:=Random(2)+1;

if check1(k,l,1,p,B)and check2(k,l,1,p)

then

begin

Case p of

1: for t:=k to k+1 do

B[l,t]:=2;

2: for t:=l to l+1 do

B[t,k]:=2;

end;

dec(Ch[2]);

f2:=True;

end;

until f2;

end;

for i:=1 to 4 do

begin

f1:=False;

Repeat

k:=Random(10);

l:=Random(10);

p:=Random(2)+1;

if check1(k,l,0,p,B)and check2(k,l,0,p)

then

begin

Case p of

1: B[l,k]:=1;

2: B[l,k]:=1;

end;

dec(Ch[1]);

f1:=True;

end;

until f1;

end;

end;

function mru(k,l:integer;B:mas):integer;

begin

if (B[l,k]<=0)

then

mru:=0;

if (B[l,k]>0)

then

mru:=1;

end;

procedure TfmBattle.FormActivate(Sender: TObject);

var i,j:integer;

begin

if Fileexists('f1.stt')

then

begin

AssignFile(stt,'f1.stt');

Reset(stt);

Read(stt,D);

CloseFile(stt);

end

else

for i:=0 to 9 do

for j:=0 to 9 do

D[i,j]:=0;

nol:=true;

shape5.Brush.Color:=rgb(238,180,34);

shape6.Brush.Color:=rgb(205,38,38);

for i:=0 to 210 do

for j:=0 to 210 do

begin

myField.Canvas.Pixels[i,j]:=clAqua;

cField.Canvas.Pixels[i,j]:=clAqua;

end;

for j:=0 to 210 do

begin

myField.Canvas.Pixels[j,0]:=clNavy;

myField.Canvas.Pixels[0,j]:=clNavy;

cField.Canvas.Pixels[j,0]:=clNavy;

cField.Canvas.Pixels[0,j]:=clNavy;

myField.Canvas.Pixels[j,209]:=clNavy;

myField.Canvas.Pixels[209,j]:=clNavy;

cField.Canvas.Pixels[j,209]:=clNavy;

cField.Canvas.Pixels[209,j]:=clNavy;

end;

i:=21;

While i<=210 do

begin

For j:=1 to 210 do

begin

myField.Canvas.Pixels[i,j]:=clNavy;

cField.Canvas.Pixels[i,j]:=clNavy;

myField.Canvas.Pixels[j,i]:=clNavy;

cField.Canvas.Pixels[j,i]:=clNavy;

end;

i:=i+21;

end;

InitMas(A,B,C);

GetB(B);

ds1:=0;

ds2:=0;

S:=[];

o:=1;

pp:=2;

end;

procedure TfmBattle.myFieldMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

var i,j,k,l,t,d:integer;

begin

k:=X div 21;

l:=Y div 21;

d:=3;

If rb4.Checked

then

d:=3;

If rb3.Checked

then

d:=2;

If rb2.Checked

then

d:=1;

If rb1.Checked

then

d:=0;

If rbG.Checked

then

begin

if check1(k,l,d,1,A)and check2(k,l,d,1)and check3(d)

then

begin

for i:=k*21+1 to (k+d)*21+20 do

for j:=l*21+1 to l*21+20 do

if myField.Canvas.Pixels[i,j]<>clNavy

then

myField.Canvas.Pixels[i,j]:=clTeal;

for t:=k to k+d do

A[l,t]:=d+1;

p:=p+1;

dec(Sh[d+1]);

if Sh[d+1]=0

then

Case d of

0:rb1.Enabled:=False;

1:rb2.Enabled:=False;

2:rb3.Enabled:=False;

3:rb4.Enabled:=False;

end;

end;

end

else

begin

if check1(k,l,d,2,A)and check2(k,l,d,2)and check3(d)

then

begin

for i:=k*21+1 to k*21+20 do

for j:=l*21+1 to (l+d)*21+20 do

if myField.Canvas.Pixels[i,j]<>clNavy

then

myField.Canvas.Pixels[i,j]:=clTeal;

for t:=l to l+d do

A[t,k]:=d+1;

p:=p+1;

dec(Sh[d+1]);

if Sh[d+1]=0

then

Case d of

0:rb1.Enabled:=False;

1:rb2.Enabled:=False;

2:rb3.Enabled:=False;

3:rb4.Enabled:=False;

end;

end;

end;

If p=10

then

Button4.Enabled:=True;

end;

procedure TfmBattle.bbReClick(Sender: TObject);

var i,j:integer;

begin

for i:=0 to 210 do

for j:=0 to 210 do

begin

myField.Canvas.Pixels[i,j]:=clAqua;

cField.Canvas.Pixels[i,j]:=clAqua;

end;

for j:=0 to 210 do

begin

myField.Canvas.Pixels[j,0]:=clNavy;

myField.Canvas.Pixels[0,j]:=clNavy;

cField.Canvas.Pixels[j,0]:=clNavy;

cField.Canvas.Pixels[0,j]:=clNavy;

myField.Canvas.Pixels[j,209]:=clNavy;

myField.Canvas.Pixels[209,j]:=clNavy;

cField.Canvas.Pixels[j,209]:=clNavy;

cField.Canvas.Pixels[209,j]:=clNavy;

end;

i:=21;

While i<=210 do

begin

For j:=1 to 210 do

begin

myField.Canvas.Pixels[i,j]:=clNavy;

cField.Canvas.Pixels[i,j]:=clNavy;

myField.Canvas.Pixels[j,i]:=clNavy;

cField.Canvas.Pixels[j,i]:=clNavy;

end;

i:=i+21;

end;

InitMas(A,A,C);

rb1.Enabled:=True;

rb2.Enabled:=True;

rb3.Enabled:=True;

rb4.Enabled:=True;

rb4.Checked:=True;

Button4.Enabled:=False;

//Auto.Enabled:=True;

end;

procedure FindDead(d:integer;B:mas;cField:TImage);

var i,j,k,l,t,p:integer;

f1,f:boolean;

begin

f1:=True;

for l:=0 to 9 do

begin

for k:=0 to 9-d+1 do

begin

if (B[l,k]=-d-1)

then

begin

f:=True;

for t:=k+1 to k+d do

if B[l,t]<>-d-1

then

f:=False;

f1:=f;

if f1

then

begin

for i:=k*21+1 to (k+d)*21+20 do

for j:=l*21+1 to l*21+20 do

if cField.Canvas.Pixels[i,j]<>clNavy

then

cField.Canvas.Pixels[i,j]:=rgb(205,38,38);

for t:=k to k+d do

B[l,t]:=0;

t:=k-1;

for i:=(((t*21+1)+(t*21+20))div 2)-2 to(((t*21+1)+(t*21+20))div 2)+2 do

for j:=(((l*21+1)+(l*21+20))div 2)-2 to(((l*21+1)+(l*21+20))div 2)+2 do

cField.Canvas.Pixels[i,j]:=clTeal;

B[l,t]:=-5;

t:=k+d+1;

for i:=(((t*21+1)+(t*21+20))div 2)-2 to(((t*21+1)+(t*21+20))div 2)+2 do

for j:=(((l*21+1)+(l*21+20))div 2)-2 to(((l*21+1)+(l*21+20))div 2)+2 do

cField.Canvas.Pixels[i,j]:=clTeal;

B[l,t]:=-5;

for t:=k-1 to k+1+d do

begin

p:=l-1;

for i:=(((t*21+1)+(t*21+20))div 2)-2 to(((t*21+1)+(t*21+20))div 2)+2 do

for j:=(((p*21+1)+(p*21+20))div 2)-2 to(((p*21+1)+(p*21+20))div 2)+2 do

cField.Canvas.Pixels[i,j]:=clTeal;

B[p,t]:=-5;

p:=l+1;

for i:=(((t*21+1)+(t*21+20))div 2)-2 to(((t*21+1)+(t*21+20))div 2)+2 do

for j:=(((p*21+1)+(p*21+20))div 2)-2 to(((p*21+1)+(p*21+20))div 2)+2 do

cField.Canvas.Pixels[i,j]:=clTeal;

B[p,t]:=-5;

end;

end;

end;

end;

end;

f1:=True;

for l:=0 to 9 do

begin

for k:=0 to 9-d+1 do

begin

if (B[k,l]=-d-1)

then

begin

f:=True;

for t:=k+1 to k+d do

if B[t,l]<>-d-1

then

f:=False;

f1:=f;

if f1

then

begin

for i:=k*21+1 to (k+d)*21+20 do

for j:=l*21+1 to l*21+20 do

if cField.Canvas.Pixels[j,i]<>clNavy

then

cField.Canvas.Pixels[j,i]:=rgb(205,38,38);

for t:=k to k+d do

B[t,l]:=0;

t:=k-1;

for i:=(((t*21+1)+(t*21+20))div 2)-2 to(((t*21+1)+(t*21+20))div 2)+2 do

for j:=(((l*21+1)+(l*21+20))div 2)-2 to(((l*21+1)+(l*21+20))div 2)+2 do

cField.Canvas.Pixels[j,i]:=clTeal;

B[l,t]:=-5;

t:=k+d+1;

for i:=(((t*21+1)+(t*21+20))div 2)-2 to(((t*21+1)+(t*21+20))div 2)+2 do

for j:=(((l*21+1)+(l*21+20))div 2)-2 to(((l*21+1)+(l*21+20))div 2)+2 do

cField.Canvas.Pixels[j,i]:=clTeal;

B[l,t]:=-5;

for t:=k-1 to k+1+d do

begin

p:=l-1;

for i:=(((t*21+1)+(t*21+20))div 2)-2 to(((t*21+1)+(t*21+20))div 2)+2 do

for j:=(((p*21+1)+(p*21+20))div 2)-2 to(((p*21+1)+(p*21+20))div 2)+2 do

cField.Canvas.Pixels[j,i]:=clTeal;

B[p,t]:=-5;

p:=l+1;

for i:=(((t*21+1)+(t*21+20))div 2)-2 to(((t*21+1)+(t*21+20))div 2)+2 do

for j:=(((p*21+1)+(p*21+20))div 2)-2 to(((p*21+1)+(p*21+20))div 2)+2 do

cField.Canvas.Pixels[j,i]:=clTeal;

B[p,t]:=-5;

end;

end;

end;

end;

end;

end;

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


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

  • Игровая программа "шашки" для игры между человеком и компьютером. Разработка алгоритмов, историческая линия развития задач. Различные подходы к построению систем. Сокращенный листинг программы и описание алгоритма. Компоненты искусственного интеллекта.

    курсовая работа [196,2 K], добавлен 26.03.2009

  • Описание правил игры "Морской бой". Особенности современных компьютеров и искусственного интеллекта. Создание общей блок-схемы программы, ее внешний вид. Необходимые переменные, процедуры и функции. Характеристика объектов, используемых в приложении.

    курсовая работа [950,1 K], добавлен 05.11.2012

  • Анализ правил выбора хода на шахматной доске К. Шеннона. Характеристика программного модуля искусственного интеллекта для игры в шахматы. Контроль времени, поиск лучшего хода в шахматных алгоритмах. Разработка программы для игры с компьютерным оппонентом.

    дипломная работа [3,7 M], добавлен 07.07.2012

  • Программирование игр с использованием визуальных компонентов. Описание операторов, используемых при практической реализации разработанной программы. Работа над созданием программы "Морской бой", постановка задачи, алгоритм реализации работы, блок-схема.

    курсовая работа [175,9 K], добавлен 10.05.2010

  • Приемы программирования в Delphi. Алгоритм поиска альфа-бета отсечения, преимущества. Описание программного средства. Разработка программы, реализующая алгоритм игры "реверси". Руководство пользователя. Листинг программы. Навыки реализации алгоритмов.

    курсовая работа [357,1 K], добавлен 28.02.2011

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

    дипломная работа [1,5 M], добавлен 21.07.2013

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

    курсовая работа [78,9 K], добавлен 28.12.2012

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

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

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

    контрольная работа [1,3 M], добавлен 20.12.2012

  • Анализ моделей и средств построения игровой компьютерной среды предметной области. Разработка алгоритмов построения игровой компьютерной среды. Отладка и экспериментальное тестирование компьютерной игры "Представление знаний в информационных системах".

    дипломная работа [2,9 M], добавлен 12.08.2017

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