Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Если начать новую игру не завершив предыдущую, то массивы и переменные должны корректно инициализироваться. ⇐ ПредыдущаяСтр 3 из 3
… rotation:=false; k11:=3; k33:=2; k32:=5; k31:=9; endofgame:=False; For i:=1 to 10 do for j:=1 to 10 do begin bField1[i,j]:=0; bField2[i,j]:=0; end; …
Заключение В результате выполнения данного курсового проекта был разработан игровой программный продукт «Морской бой». При помощи этой программы можно приятно проводить время и развивать логическое мышление. Программа не занимает много места, не требовательна к установленному программному обеспечению. Также было проведено исследование полученного программного продукта. В результате были выявлены следующие достоинства и недостатки полученного программного продукта: Достоинства: · Существует возможность автоматической расстановки кораблей игрока; · Программный продукт малотребователен к системным ресурсам компьютера. Недостатки: · Низкий искусственный интеллект, т.е. ход компьютера осуществляется случайным образом, что делает маловероятным победу компьютера; · Невозможность возврата на несколько ходов назад; · Работоспособность приложения только в среде Windows. В целом цель, поставленная в начале курсового проекта, была достигнута. В программе выполняются все необходимые функциональные требования.
Список использованной литературы 1. Фаронов, В.В. Программирование в Delphi 7: учеб. пособие / В.В. Фаронов. -7-е изд., перераб.- М.:Нолидж, 2006.- 412с. 2. Ставровский, А.Б. Delphi в задачах и примерах: учеб. для вузов / А.Б. Ставровский. - Киев: BНV, 2004.-399с. 3. Кнут, Д.Э. Искусство программирования: учеб. пособие: в 3 т.:пер. с англ. Т.1: Основные алгоритмы.- 3-е изд.-М. и др.: Вильямс, 2000.-720 с. 4. Гловацкая, А.П. Методы и алгоритмы вычислительной математики: учеб. пособие для вузов / А.П. Головыцкая.- М.: Радио и связь, 1999.-408с. 5. Бежанова, М.М. Практическое программирование: структуры данных и алгоритмы: учеб. для вузов / М.М. Бежанова, Л.А. Москвина, И.В. Поттосин.- М.: Логос, 2001.-223с.
Приложения Приложение 1 Листинг программы unit mainprogram; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Menus, XPMan, jpeg; type TForm1 = class(TForm) Panel1: TPanel; Image1: TImage; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; Label11: TLabel; Panel2: TPanel; Image2: TImage; Label14: TLabel; Label15: TLabel; Label16: TLabel; Label17: TLabel; Label18: TLabel; Label19: TLabel; Label20: TLabel; Label21: TLabel; Label22: TLabel; Label23: TLabel;
button1: TButton; button2: TButton; Label1: TLabel; label13: TLabel; labelplayer: TLabel; label25: TLabel; image3: TImage; Button3: TButton; CheckBox1: TCheckBox; RadioButton1: TRadioButton; RadioButton2: TRadioButton; Button4: TButton; Button5: TButton; Label12: TLabel; Image4: TImage; Image5: TImage; procedure FormCreate(Sender: TObject); procedure button1Click(Sender: TObject); procedure button2Click(Sender: TObject); procedure nash(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure shoot(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Button3Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; i,j,x1,y1,palub3,palub2,palubField1, //где palubField1,palub2,palub3 кол-во одно,двух,трех-палубников m,n,z,k11,k33,k31,k32,ozid:integer; //нужны для рандомной расстановки bField1,bField2:Array[1..11,1..11] of integer;//квадратные матрицы, поля игроков rotation,near,endofgame,win,babax,popal,looser:boolean; implementation uses Unit2; {$R *.dfm} /////////////////////////////////////////////////////////////////////////////// procedure TForm1.FormCreate(Sender: TObject); begin Panel2.Visible:=False; button1.Visible:=False; CheckBox1.Visible:=False; RadioButton1.Visible:=False; RadioButton2.Visible:=false; Image4.Visible:=False; Image5.Visible:=false; ozid:=0; k11:=3; k33:=2; k32:=5; k31:=9; palub3:=0; palub2:=0; palubField1:=0; //расстановка кораблей компьютера //четырехпалубник(один) randomize; m:=random(10)+1;//рандомные переменные для определения клетки n:=random(10)+1; z:=random(1);//это то как располагается корабль 0-горизонтально остальные-вертикально case n of 1..7: case m of 1..7: for i:=0 to 3 do if z=0 then bField2[m+i,n]:=2 else bField2[m,n+i]:=2; 8..10: for i:=0 to 3 do if z=0 then bField2[m-i,n]:=2 else bField2[m,n+i]:=2; end; 8..10: case m of 1..7: for i:=0 to 3 do if z=0 then bField2[m+i,n]:=2 else bField2[m,n-i]:=2; 8..10: for i:=0 to 3 do if z=0 then bField2[m-i,n]:=2 else bField2[m,n-i]:=2; end; end; //трехпалубник(2штуки) while palub3<2 do begin m:=random(10)+1;//по х n:=random(6)+1; //по у z:=random(1); case n of 1..7: case m of 1..7: case z of 0: if (bField2[m,n]<>2) and //Проверяем возможность установки корабля. Т.е незанятую клетку (bField2[m-1,n-1]<>2) and (bField2[m-1,n]<>2) and (bField2[m-1,n+1]<>2) and (bField2[m,n-1]<>2)and (bField2[m+1,n+1]<>2)and (bField2[m+1,n]<>2) and (bField2[m+1,n-1]<>2) and (bField2[m,n+1]<>2) and (bField2[m+1,n+2]<>2) and //По правилу игры расстояние между кораблями должно быть как минимум 1 клетка. Проверяем и это (bField2[m-1,n+2]<>2) and (bField2[m,n+2]<>2) and (bField2[m+1,n+3]<>2) and (bField2[m-1,n+3]<>2) and (bField2[m,n+3]<>2) then begin //Если все вышенаписанные условия верны, то устанавливаем корабль for i:=0 to 2 do bField2[m,n+i]:=2; palub3:=palub3+1 end; 1: if (bField2[m,n]<>2) and (bField2[m+1,n+1]<>2) and
(bField2[m,n+1]<>2) and (bField2[m-1,n+1]<>2) and (bField2[m-1,n]<>2)and (bField2[m-1,n-1]<>2)and (bField2[m,n-1]<>2) and (bField2[m+1,n-1]<>2) and (bField2[m+1,n]<>2) and (bField2[m+2,n-1]<>2) and (bField2[m+2,n+1]<>2) and (bField2[m+2,n]<>2) and (bField2[m+3,n-1]<>2) and (bField2[m+3,n+1]<>2) and (bField2[m+3,n]<>2) and (bField2[m+3,n]<>2) then begin for i:=0 to 2 do bField2[m+i,n]:=2; palub3:=palub3+1 end end; 8..10: case z of 0: if (bField2[m,n]<>2) and (bField2[m+1,n+1]<>2) and (bField2[m,n+1]<>2) and (bField2[m-1,n+1]<>2) and (bField2[m-1,n]<>2)and (bField2[m-1,n-1]<>2)and (bField2[m,n-1]<>2) and (bField2[m+1,n-1]<>2) and (bField2[m-2,n-1]<>2) and (bField2[m-2,n+1]<>2) and (bField2[m-2,n]<>2) and (bField2[m-3,n-1]<>2) and (bField2[m-3,n+1]<>2) and (bField2[m-3,n]<>2) then begin for i:=0 to 2 do bField2[m-i,n]:=2; palub3:=palub3+1 end; 1: if (bField2[m,n]<>2) and (bField2[m-1,n-1]<>2) and (bField2[m-1,n]<>2) and (bField2[m-1,n+1]<>2) and (bField2[m,n-1]<>2)and (bField2[m+1,n+1]<>2)and (bField2[m+1,n]<>2) and (bField2[m+1,n-1]<>2) and (bField2[m,n+1]<>2) and (bField2[m+1,n+2]<>2) and (bField2[m-1,n+2]<>2) and (bField2[m,n+2]<>2) and
(bField2[m+1,n+3]<>2) and (bField2[m-1,n+3]<>2) and (bField2[m,n+3]<>2) and (bField2[m,n+3]<>2) then begin for i:=0 to 2 do bField2[m,n+i]:=2; palub3:=palub3+1 end; end end; end end;
//двухпалубники(3штуки) while palub2<3 do begin m:=random(7)+1; n:=random(10)+1; z:=random(1); //Алгоритм тот же что и с трехпалубниками case n of 1..8: case m of 1..8: case z of 0: if (bField2[m,n]<>2) and (bField2[m-1,n-1]<>2) and (bField2[m-1,n]<>2) and (bField2[m-1,n+1]<>2) and (bField2[m,n-1]<>2)and (bField2[m+1,n+1]<>2)and (bField2[m+1,n]<>2) and (bField2[m+1,n-1]<>2) and (bField2[m,n+1]<>2) and (bField2[m+1,n+2]<>2) and (bField2[m-1,n+2]<>2) and (bField2[m,n+2]<>2) then begin for i:=0 to 1 do bField2[m,n+i]:=2; palub2:=palub2+1 end; 1: if (bField2[m,n]<>2) and (bField2[m+1,n+1]<>2) and (bField2[m,n+1]<>2) and (bField2[m-1,n+1]<>2) and (bField2[m-1,n]<>2)and (bField2[m-1,n-1]<>2)and (bField2[m,n-1]<>2) and (bField2[m+1,n-1]<>2) and (bField2[m+1,n]<>2) and (bField2[m+2,n-1]<>2) and (bField2[m+2,n+1]<>2) and (bField2[m+2,n]<>2) then begin for i:=0 to 1 do bField2[m+i,n]:=2; palub2:=palub2+1 end end; 9..10: case z of 0: if (bField2[m,n]<>2) and (bField2[m+1,n+1]<>2) and (bField2[m,n+1]<>2) and (bField2[m-1,n+1]<>2) and (bField2[m-1,n]<>2)and (bField2[m-1,n-1]<>2)and (bField2[m,n-1]<>2) and (bField2[m+1,n-1]<>2) and
(bField2[m-2,n-1]<>2) and (bField2[m-2,n+1]<>2) and (bField2[m-2,n]<>2) then begin for i:=0 to 1 do bField2[m-i,n]:=2; palub2:=palub2+1 end; 1: if (bField2[m,n]<>2) and (bField2[m-1,n-1]<>2) and (bField2[m-1,n]<>2) and (bField2[m-1,n+1]<>2) and (bField2[m,n-1]<>2)and (bField2[m+1,n+1]<>2)and (bField2[m+1,n]<>2) and (bField2[m+1,n-1]<>2) and (bField2[m,n+1]<>2) and
(bField2[m+1,n+2]<>2) and (bField2[m-1,n+2]<>2) and (bField2[m,n+2]<>2) then begin for i:=0 to 1 do bField2[m,n+i]:=2; palub2:=palub2+1 end; end end; end end; //Однопалубники(4шт) while palubField1<4 do begin m:=random(10)+1; n:=random(10)+1; if (bField2[m,n]<>2) and (bField2[m+1,n+1]<>2) and (bField2[m,n+1]<>2) and (bField2[m-1,n+1]<>2) and (bField2[m-1,n]<>2)and (bField2[m-1,n-1]<>2)and (bField2[m,n-1]<>2) and (bField2[m+1,n-1]<>2) and (bField2[m+1,n]<>2) then begin bField2[m,n]:=2; palubField1:=palubField1+1; end
end; /////////////////////// Image1.Canvas.Pen.Width:=2; For i:=1 to 10 do //рисуем квадрутную сетку поля игрока for j:=1 to 10 do begin bField1[i,j]:=0; image1.Canvas.Rectangle(30*i-30,30*j-30,30*i,30*j); end; end; ///////////////// procedure TForm1.nash(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); //процедура постановки корабля begin if ozid=1 then begin x1:=(X div 30)+1; y1:=(Y div 30)+1; if k11>=0 then begin //смотрит поставлены все корабли или нет if RadioButton1.Checked=True then begin //производит ротацию корабля по нажатии правой кн мыши rotation:=False; end; if RadioButton2.Checked=True then begin rotation:=true; end; if rotation=false then begin //ставит корабль по горизонтали case k11 of //смотрит какой корабль ставить 0: case x1 of //смотрит есть ли рядом с однопалубным кораблём другие корабли 1: if (bField1[x1,y1]<>2) and (bField1[x1+1,y1+1]<>2) and (bField1[x1,y1+1]<>2) and (bField1[x1,y1-1]<>2) and (bField1[x1+1,y1-1]<>2) and (bField1[x1+1,y1]<>2) then begin bField1[x1,y1]:=2; near:=true end
else near:=false; 2..10: if (bField1[x1,y1]<>2) and (bField1[x1+1,y1+1]<>2) and (bField1[x1,y1+1]<>2) and (bField1[x1-1,y1+1]<>2) and (bField1[x1-1,y1]<>2)and (bField1[x1-1,y1-1]<>2)and (bField1[x1,y1-1]<>2) and (bField1[x1+1,y1-1]<>2) and (bField1[x1+1,y1]<>2) then begin bField1[x1,y1]:=2; near:=true end else near:=false; end; 1: case x1 of //смотрит есть ли рядом с двупалубным кораблём другие корабли 1:if(bField1[x1,y1]<>2) and (bField1[x1+1,y1+1]<>2) and (bField1[x1,y1+1]<>2) and (bField1[x1,y1-1]<>2) and (bField1[x1+1,y1-1]<>2) and (bField1[x1+2,y1-1]<>2) and (bField1[x1+2,y1+1]<>2) and (bField1[x1+2,y1]<>2) and (x1+1<11) then for i:=0 to k11 do begin bField1[x1+i,y1]:=2; near:=true end else near:=false;
2..10: if (bField1[x1,y1]<>2) and (bField1[x1+1,y1+1]<>2) and (bField1[x1,y1+1]<>2) and (bField1[x1-1,y1+1]<>2) and (bField1[x1-1,y1]<>2)and (bField1[x1-1,y1-1]<>2)and (bField1[x1,y1-1]<>2) and (bField1[x1+1,y1-1]<>2) and (bField1[x1+2,y1-1]<>2) and (bField1[x1+2,y1+1]<>2) and (bField1[x1+2,y1]<>2) and (x1+1<11) then for i:=0 to k11 do begin bField1[x1+i,y1]:=2; near:=true end else near:=false; end; 2: case x1 of //смотрит есть ли рядом с трехпалубным кораблём другие корабли 1: if (bField1[x1,y1]<>2) and (bField1[x1+1,y1+1]<>2) and (bField1[x1,y1+1]<>2) and (bField1[x1,y1-1]<>2) and (bField1[x1+1,y1-1]<>2) and (bField1[x1+2,y1-1]<>2) and (bField1[x1+2,y1+1]<>2) and (bField1[x1+3,y1-1]<>2) and (bField1[x1+3,y1+1]<>2) and
(bField1[x1+3,y1]<>2) and (x1+2<11) then for i:=0 to k11 do begin bField1[x1+i,y1]:=2; near:=true end else near:=false; 2..10: if (bField1[x1,y1]<>2) and (bField1[x1+1,y1+1]<>2) and (bField1[x1,y1+1]<>2) and (bField1[x1-1,y1+1]<>2) and (bField1[x1-1,y1]<>2)and (bField1[x1-1,y1-1]<>2)and (bField1[x1,y1-1]<>2) and (bField1[x1+1,y1-1]<>2) and (bField1[x1+2,y1-1]<>2) and (bField1[x1+2,y1+1]<>2) and (bField1[x1+3,y1-1]<>2) and (bField1[x1+3,y1+1]<>2) and (bField1[x1+3,y1]<>2) and (x1+2<11) then for i:=0 to k11 do begin bField1[x1+i,y1]:=2; near:=true end else near:=false end; 3: if x1+3<11 then //ставит четырехпалубный корабль begin for i:=0 to k11 do bField1[x1+i,y1]:=2; near:=true end else near:=false; end;
if near=true then begin //смотрит если корабль поставлен то уменьшает счетчик if (k11=3) then begin; k11:=k11-1; end;
if (k11=2) and (k33=0) then begin k11:=k11-1; k33:=k33-1 end else k33:=k33-1;
if (k11=1) and (k32=0) then begin k11:=k11-1; k32:=k32-1 end else k32:=k32-1; if (k11=0) and (k31=0) then begin k11:=k11-1; k31:=k31-1 end else k31:=k31-1; end; end
else //ставит корабль по вертикали begin case k11 of //смотрит какой корабль ставить 0: case x1 of //смотрит есть ли рядом с однопалубным кораблём другие корабли 1: if (bField1[x1,y1]<>2) and (bField1[x1+1,y1+1]<>2) and (bField1[x1,y1+1]<>2) and (bField1[x1,y1-1]<>2) and (bField1[x1+1,y1-1]<>2) and (bField1[x1+1,y1]<>2) then begin bField1[x1,y1]:=2; near:=true end else near:=false;
2..10: if (bField1[x1,y1]<>2) and (bField1[x1+1,y1+1]<>2) and (bField1[x1,y1+1]<>2) and (bField1[x1-1,y1+1]<>2) and (bField1[x1-1,y1]<>2)and (bField1[x1-1,y1-1]<>2)and (bField1[x1,y1-1]<>2) and (bField1[x1+1,y1-1]<>2) and (bField1[x1+1,y1]<>2) then begin bField1[x1,y1]:=2; near:=true end else near:=false; end; 1: case x1 of //смотрит есть ли рядом с двупалубным кораблём другие корабли
1: if (bField1[x1,y1]<>2) and (bField1[x1,y1-1]<>2)and (bField1[x1+1,y1+1]<>2)and (bField1[x1+1,y1]<>2) and (bField1[x1+1,y1-1]<>2) and (bField1[x1+1,y1+2]<>2) and (bField1[x1,y1+2]<>2) and (y1+1<11) then for i:=0 to k11 do begin bField1[x1,y1+i]:=2; near:=true end else near:=false; 2..10: if (bField1[x1,y1]<>2) and (bField1[x1-1,y1-1]<>2) and (bField1[x1-1,y1]<>2) and (bField1[x1-1,y1+1]<>2) and (bField1[x1,y1-1]<>2)and (bField1[x1+1,y1+1]<>2)and (bField1[x1+1,y1]<>2) and (bField1[x1+1,y1-1]<>2) and (bField1[x1+1,y1+2]<>2) and (bField1[x1-1,y1+2]<>2) and (bField1[x1,y1+2]<>2) and (y1+1<11) then for i:=0 to k11 do begin bField1[x1,y1+i]:=2; near:=true end else near:=false end; 2: case x1 of //смотрит есть ли рядом с двупалубным кораблём другие корабли 1: if (bField1[x1,y1]<>2) and (bField1[x1,y1-1]<>2)and (bField1[x1+1,y1+1]<>2)and (bField1[x1+1,y1]<>2) and (bField1[x1+1,y1-1]<>2) and (bField1[x1+1,y1+2]<>2) and (bField1[x1+1,y1+3]<>2) and (bField1[x1,y1+3]<>2) and (y1+2<11) then for i:=0 to k11 do begin bField1[x1,y1+i]:=2; near:=true end else near:=false; 2..10: if (bField1[x1,y1]<>2) and (bField1[x1-1,y1-1]<>2) and (bField1[x1-1,y1]<>2) and (bField1[x1-1,y1+1]<>2) and (bField1[x1,y1-1]<>2)and (bField1[x1+1,y1+1]<>2)and (bField1[x1+1,y1]<>2) and (bField1[x1+1,y1-1]<>2) and (bField1[x1+1,y1+2]<>2) and (bField1[x1-1,y1+2]<>2) and (bField1[x1+1,y1+3]<>2) and (bField1[x1-1,y1+3]<>2) and (bField1[x1,y1+3]<>2) and (y1+2<11) then for i:=0 to k11 do begin bField1[x1,y1+i]:=2; near:=true end else near:=false end; //ставит 4палубный корабль 3: if y1+3<11 then begin for i:=0 to k11 do bField1[x1,y1+i]:=2; near:=true end else near:=false end; if near=true then begin //смотрит если корабль поставлен то уменьшает счетчик if (k11=3) then begin; k11:=k11-1; end; if (k11=2) and (k33=0) then begin k11:=k11-1; k33:=k33-1 end else k33:=k33-1; if (k11=1) and (k32=0) then begin k11:=k11-1; k32:=k32-1 end else k32:=k32-1; if (k11=0) and (k31=0) then begin k11:=k11-1; k31:=k31-1 end else k31:=k31-1; end; end; For i:=1 to 10 do for j:=1 to 10 do begin if bField1[i,j]=2 then begin image1.Canvas.Brush.Color:=claqua; image1.Canvas.Rectangle(30*i-30,30*j-30,30*i,30*j); end; end; if k11<0 then begin Button5.Visible:=False; Button4.Visible:=false; button1.Visible:=True; CheckBox1.Visible:=True; panel2.Visible:=True; RadioButton1.Visible:=false; RadioButton2.Visible:=false; for i:=1 to 10 do //рисует белую сетку поля компьютера for j:=1 to 10 do begin image2.Canvas.Brush.Color:=clwhite; Image2.Canvas.Pen.Width:=2; image2.Canvas.Rectangle(30*i-30,30*j-30,30*i,30*j); end end end; end else Exit; end; //процедура выстрела procedure TForm1.shoot(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin x1:=(X div 30)+1; y1:=(Y div 30)+1;
if endofgame=false then //проверка закончилась игра или нет begin case bField2[x1,y1] of 0: bField2[x1,y1]:=3; //если попал в пустую клетку то она становится - простреленной 2: bField2[x1,y1]:=4; //если попал в клетку с кораблем то она становится- подбитой 3,4,10: exit; //если попал в клетку в которую уже стрелял то ничего не происходит end; for i:=1 to 10 do //обновляем графическое поле компьютера, в соответсвии с игрой. for j:=1 to 10 do begin case bField2[i,j] of 4: begin //клетка в котрой стоит убитый или подбитый корабль if ((bField2[i+1,j]=2) //подбитый корабль or(bField2[i,j+1]=2) //проверяем для всех видов кораблей кроме однопалубного, есть ли рядом or(bField2[i-1,j]=2) //целые клетки корабля, нужно для корректной отрисовки поля боя or(bField2[i,j-1]=2)) or (((bField2[i+1,j]=4)and(bField2[i+2,j]=2)) or((bField2[i,j+1]=4)and(bField2[i,j+2]=2)) or((bField2[i-1,j]=4)and(bField2[i-2,j]=2)) or((bField2[i,j-1]=4)and(bField2[i,j-2]=2))) or(((bField2[i+1,j]=4)and(bField2[i+2,j]=4) and (bField2[i+3,j]=2)) or((bField2[i,j+1]=4)and(bField2[i,j+2]=4)and(bField2[i,j+3]=2)) or((bField2[i-1,j]=4)and(bField2[i-2,j]=4)and(bField2[i-3,j]=2)) or((bField2[i,j-1]=4)and(bField2[i,j-2]=4)and(bField2[i,j-3]=2))) then //если корабль подбит, то рисуем на клетке в которую попали крест
begin image2.Canvas.Brush.Color:=clAqua; image2.Canvas.Rectangle(30*i-30,30*j-30,30*i,30*j); image2.Canvas.pen.Color:=clred; image2.Canvas.MoveTo(30*i-29,30*j-29); image2.Canvas.LineTo(30*i-1,30*j-1); image2.Canvas.MoveTo(30*i-1,30*j-29); image2.Canvas.LineTo(30*i-29,30*j-1); image2.Canvas.pen.Color:=clblack; end else //иначе закрашивам корабль красным(убит) begin image2.Canvas.Brush.Color:=clred; image2.Canvas.Rectangle(30*i-30,30*j-30,30*i,30*j); bField2[i,j]:=10; end; end; 3: begin //простреленная пустая клетка image2.Canvas.Brush.Color:=clwhite; image2.Canvas.Ellipse(30*i-20,30*j-20,30*i-10,30*j-10) end; end; end; if CheckBox1.Checked=True then begin For i:=1 to 10 do for j:=1 to 10 do begin if bField2[i,j]=10 then begin if bField2[i+1,j]<>10 then bField2[i+1,j]:=3; if bField2[i-1,j]<>10 then bField2[i-1,j]:=3; if bField2[i,j+1]<>10 then bField2[i,j+1]:=3; if bField2[i,j-1]<>10 then bField2[i,j-1]:=3; if bField2[i+1,j+1]<>10 then bField2[i+1,j+1]:=3; if bField2[i+1,j-1]<>10 then bField2[i+1,j-1]:=3; if bField2[i-1,j+1]<>10 then bField2[i-1,j+1]:=3; if bField2[i-1,j-1]<>10 then bField2[i-1,j-1]:=3; end; end; for i:=1 to 10 do for j:=1 to 10 do begin if bField2[i,j]=3 then begin image2.Canvas.Brush.Color:=clwhite; image2.Canvas.Ellipse(30*i-20,30*j-20,30*i-10,30*j-10) end; end; end; win:=true; For i:=1 to 10 do //если находится хотябы один неподбитый корабль то победы нет for j:=1 to 10 do if bField2[i,j]=2 then win:=false; if win=true then //вывод сообщения при победе begin showmessage ('Победа!'); endofgame:=true; exit end; if bField2[x1,y1]=4 then //если игрок попал то компьютер не ходит exit; //выстрел компьютера babax:=false; popal:=true; while (babax=false) or (popal=true) do //стрел-ть до тех пор пока не попал в клетку в которую не стрылял и если она пустая begin m:=random(10)+1; n:=random(10)+1; case bField1[m,n] of 0: begin bField1[m,n]:=3;//попал в пустую клетку babax:=true; popal:=false end; 2: begin bField1[m,n]:=4; //в клетку с кораблем babax:=true; popal:=true end end; For i:=1 to 10 do //рисуется графическое поле игрока for j:=1 to 10 do begin case bField1[i,j] of 3: begin //простреленая пустая клетка image1.Canvas.Brush.Color:=clwhite; image1.Canvas.Ellipse(30*i-20,30*j-20,30*i-10,30*j-10) end; 4:begin //клетка в котрой стоит подбитый или не доконца подбитый корабль if ((bField1[i+1,j]=2) //подбитый корабль or(bField1[i,j+1]=2) //проверяем для всех видов кораблей кроме однопалубного, есть ли рядом or(bField1[i-1,j]=2) //целые клетки корабля, нужно для корректной отрисовки поля боя or(bField1[i,j-1]=2)) or (((bField1[i+1,j]=4)and(bField1[i+2,j]=2)) or((bField1[i,j+1]=4)and(bField1[i,j+2]=2)) or((bField1[i-1,j]=4)and(bField1[i-2,j]=2)) or((bField1[i,j-1]=4)and(bField1[i,j-2]=2))) or(((bField1[i+1,j]=4)and(bField1[i+2,j]=4) and (bField1[i+3,j]=2)) or((bField1[i,j+1]=4)and(bField1[i,j+2]=4)and(bField1[i,j+3]=2)) or((bField1[i-1,j]=4)and(bField1[i-2,j]=4)and(bField1[i-3,j]=2)) or((bField1[i,j-1]=4)and(bField1[i,j-2]=4)and(bField1[i,j-3]=2))) then //если корабль подбит, то рисуем на клетке в которую попали крест begin image1.Canvas.Brush.Color:=clAqua; image1.Canvas.Rectangle(30*i-30,30*j-30,30*i,30*j); image1.Canvas.pen.Color:=clred; image1.Canvas.MoveTo(30*i-29,30*j-29); image1.Canvas.LineTo(30*i-1,30*j-1); image1.Canvas.MoveTo(30*i-1,30*j-29); image1.Canvas.LineTo(30*i-29,30*j-1); image1.Canvas.pen.Color:=clblack; end else //иначе закрашивам корабль красным(убит) begin image1.Canvas.Brush.Color:=clred; image1.Canvas.Rectangle(30*i-30,30*j-30,30*i,30*j); bField1[i,j]:=10; end; end; end; end; For i:=1 to 10 do for j:=1 to 10 do begin if bField1[i,j]=10 then begin if bField1[i+1,j]<>10 then bField1[i+1,j]:=3; if bField1[i-1,j]<>10 then bField1[i-1,j]:=3; if bField1[i,j+1]<>10 then bField1[i,j+1]:=3; if bField1[i,j-1]<>10 then bField1[i,j-1]:=3; if bField1[i+1,j+1]<>10 then bField1[i+1,j+1]:=3; if bField1[i+1,j-1]<>10 then bField1[i+1,j-1]:=3; if bField1[i-1,j+1]<>10 then bField1[i-1,j+1]:=3; if bField1[i-1,j-1]<>10 then bField1[i-1,j-1]:=3; end; end; looser:=true; For i:=1 to 10 do //если находится хотябы один неподбитый корабль то проигрыша нет for j:=1 to 10 do if bField1[i,j]=2 then looser:=false; if looser=true then begin endofgame:=true; showmessage ('Поражение'); exit end; end; end; end; procedure TForm1.button1Click(Sender: TObject); //новая игра begin image1.Canvas.Brush.Color:=clwhite; rotation:=false; k11:=3; k33:=2; k32:=5; k31:=9; endofgame:=False; For i:=1 to 10 do //обнуляет массивы for j:=1 to 10 do begin bField1[i,j]:=0; bField2[i,j]:=0; end; Button5.Visible:=true; Button4.Visible:=true; label12.visible:=True; FormCreate(self); //использует процедуру создания формы end; procedure TForm1.button2Click(Sender: TObject); begin close; end; procedure TForm1.Button3Click(Sender: TObject); begin form2.show; end; procedure TForm1.Button4Click(Sender: TObject); begin ozid:=1; RadioButton1.Visible:=True; RadioButton2.Visible:=True; Button4.Visible:=False; Button5.Visible:=false; Label12.Visible:=False; Image4.Visible:=true; Image5.Visible:=True; end; end.
Приложение 2 Графический интерфейс программы Рис. 1. Главное окно программы Рис. 2. Окно начала игры Рис. 3. Процесс игры Рис. 4. Сообщение о победе Рис. 4. Сообщение о поражении Рис. 5. Окно «О программе»
|
|||||||||
Последнее изменение этой страницы: 2016-04-19; просмотров: 348; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.119.143.4 (0.441 с.) |