Автор работы: Пользователь скрыл имя, 26 Октября 2010 в 17:19, Не определен
Игрушка, созданная на языке Delphi
end
else
riad:=false
end;
2: case x1 of //смотрит есть ли рядом с двупалубным кораблём другие корабли
1:if (b1[x1,y1]<>2) and
(b1[x1,y1-1]<>2)and
(b1[x1+1,y1+1]<>2)and
(b1[x1+1,y1]<>2) and
(b1[x1+1,y1-1]<>2) and
(b1[x1+1,y1+2]<>2) and
(b1[x1+1,y1+3]<>2) and
(b1[x1,y1+3]<>2) and (y1+2<11) then
for i:=0 to k11 do begin
b1[x1,y1+i]:=2;
riad:=true
end
else
riad:=false;
2..10:
if (b1[x1,y1]<>2) and
(b1[x1-1,y1-1]<>2) and
(b1[x1-1,y1]<>2) and
(b1[x1-1,y1+1]<>2) and
(b1[x1,y1-1]<>2)and
(b1[x1+1,y1+1]<>2)and
(b1[x1+1,y1]<>2) and
(b1[x1+1,y1-1]<>2) and
(b1[x1+1,y1+2]<>2) and
(b1[x1-1,y1+2]<>2) and
(b1[x1+1,y1+3]<>2) and
(b1[x1-1,y1+3]<>2) and
(b1[x1,y1+3]<>2) and (y1+2<11) then
for i:=0 to k11 do begin
b1[x1,y1+i]:=2;
riad:=true
end
else
riad:=false
end;
3: if y1+3<11 then
begin
for i:=0 to k11 do
b1[x1,y1+i]:=2;
riad:=true
end
else
riad:=false
end;
if riad=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 b1[i,j]=2 then
begin
image1.Canvas.Brush.Color:=
image1.Canvas.Rectangle(20*i-
end;
end;
if k11<0 then begin //проверяет поставлены ли все корабли, если "да" то начинает игру с компьютером
label12.Height:=0;
label13.Height:=13;
label14.Height:=13;
label15.Height:=13;
label16.Height:=13;
label17.Height:=13;
label18.Height:=13;
label19.Height:=13;
label20.Height:=13;
label21.Height:=13;
label22.Height:=13;
label23.Height:=13;
label26.Height:=13;
image2.Height:=200;
image2.Width:=200;
for i:=1 to 10 do //ресует белую сетку поля компьютера
for j:=1 to 10 do begin
image2.Canvas.Brush.Color:=
image2.Canvas.Rectangle(20*i-
end
end;
end;
procedure TForm1.N2Click(Sender: TObject); //начинает новыю игру
begin
image1.Canvas.Brush.Color:=
rot:=false;
k11:=3;
k33:=2;
k32:=5;
k31:=9;
label12.Height:=62;
image2.Height:=0;
For i:=1 to 10 do //обнуляет массивы
for j:=1 to 10 do
begin
b1[i,j]:=0;
b2[i,j]:=0;
image1.Canvas.Rectangle(20*i-
end;
FormCreate(self);
//использует процедуру создания формы
end;
procedure TForm1.vistrel(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); //процедура обмена выстрелов
begin
x1:=(X div 20)+1;
y1:=(Y div
20)+1;
if kon=false then begin //проверка закончилась игра или нет
case b2[x1,y1] of
0: b2[x1,y1]:=3; //если попал в пустую клетка становится - просреленной пустой
2: b2[x1,y1]:=4;
//если попал в клетку с
3,4: exit; //если попал в клетку в которую уже стрелял то ничего не происходит
end;
for
i:=1 to 10 do
//рисуется графическое поле
for j:=1 to 10 do
begin
case b2[i,j] of
4: begin //клетка в котрой стоит подбитый или не доконца подбитый корабль
if ((b2[i+1,j]=2) //не доконца подбитый корабль
or(b2[i,j+1]=2)
or(b2[i-1,j]=2)
or(b2[i,j-1]=2))
or (((b2[i+1,j]=4)and(b2[i+2,j]=
or((b2[i,j+1]=4)and(b2[i,j+2]=
or((b2[i-1,j]=4)and(b2[i-2,j]=
or((b2[i,j-1]=4)and(b2[i,j-2]=
or(((b2[i+1,j]=4)and(b2[i+2,j]
or((b2[i,j+1]=4)and(b2[i,j+2]=
or((b2[i-1,j]=4)and(b2[i-2,j]=
or((b2[i,j-1]=4)and(b2[i,j-2]=
then
begin
image2.Canvas.Brush.Color:=
image2.Canvas.Rectangle(20*i-
image2.Canvas.pen.Color:=
image2.Canvas.MoveTo(20*i-19,
image2.Canvas.LineTo(20*i-1,
image2.Canvas.MoveTo(20*i-1,
image2.Canvas.LineTo(20*i-19,
image2.Canvas.pen.Color:=
end
else
begin
image2.Canvas.Brush.Color:=
image2.Canvas.Rectangle(20*i-
end;
end;
3: begin
image2.Canvas.Brush.Color:=
image2.Canvas.Rectangle(20*i-
end;
end;
end;
win:=true;
For i:=1 to 10 do //если находится хотябы один неподбитый корабль то победы нет
for j:=1 to 10 do
if b2[i,j]=2 then
win:=false;
if win=true then //вывод сообщения при победе
begin
showmessage ('Поздравляю!'+#13+'Вы победили.');
kon:=true;
exit
end;
if b2[x1,y1]=4 then //если игрок попал то компьютер не ходит
exit;
bum:=false;
cokil:=true;
while (bum=false) or (cokil=true) do //стрел-ть до тех пор пока не попал в клетку в которую не стрылял и если она пустая
begin
m:=random(10)+1;
n:=random(10)+1;
case b1[m,n] of
0: begin
b1[m,n]:=3;
bum:=true;
cokil:=false
end;
2: begin
b1[m,n]:=4;
bum:=true;
cokil:=true
end
end;
For i:=1 to
10 do
//рисуется графическое поле
for j:=1 to 10 do
begin
case b1[i,j] of
3: begin //простреленая пустая клетка
image1.Canvas.Brush.Color:=
image1.Canvas.Rectangle(20*i-
end;
4:begin
//клетка в котрой стоит