Y: Integer); //расстановка кораблей на поле игрока
Begin
image1.Canvas.Brush.Color:=clwhite;
y1:=(Y div 20)+1;
x1:=(X div 20)+1;
For i:=1 to 10 do
for j:=1 to 10 do
begin
if (b1[i,j]<>2) and (b1[i,j]<>3) and (b1[i,j]<>4) then
begin
b1[i,j]:=0;
image1.Canvas.Rectangle(20*i-20,20*j-20,20*i,20*j);
end;
end;
if rot=false then begin //ротация кораблей по горизонтали
Case k11 of //смотрит какой корабль надо располагать
0: begin if (b1[x1,y1]<>2) then
for i:=0 to 0 do
b1[x1+i,y1]:=1; end;
1: begin if (b1[x1,y1]<>2) and (b1[x1+1,y1]<>2)then
for i:=0 to 1 do begin
b1[x1+i,y1]:=1 end; end;
2: begin if (b1[x1,y1]<>2) and (b1[x1+1,y1]<>2) and (b1[x1+2,y1]<>2) then
for i:=0 to 2 do
b1[x1+i,y1]:=1; end;
3: begin if (b1[x1,y1]<>2) and (b1[x1+1,y1]<>2) and (b1[x1+2,y1]<>2) and (b1[x1+3,y1]<>2) then
for i:=0 to 3 do
b1[x1+i,y1]:=1; end;
end;
For i:=1 to 10 do //рисует желтым цветом текущее положение корабля
for j:=1 to 10 do
begin
if (b1[i,j]=1) then
begin
image1.Canvas.Brush.Color:=clyellow;
image1.Canvas.Rectangle(20*i-20,20*j-20,20*(i),20*(j));
end;
end;
End
Else //ротация кораблей по вертикали
Begin
Case k11 of
0: begin if (b1[x1,y1]<>2) then
for i:=0 to 0 do
b1[x1,y1+i]:=1; end;
1: begin if (b1[x1,y1]<>2) and (b1[x1,y1+1]<>2)then
for i:=0 to 1 do begin
b1[x1,y1+i]:=1 end; end;
2: begin if (b1[x1,y1]<>2) and (b1[x1,y1+1]<>2) and (b1[x1,y1+2]<>2) then
for i:=0 to 2 do
b1[x1,y1+i]:=1; end;
3: begin if (b1[x1,y1]<>2) and (b1[x1,y1+1]<>2) and (b1[x1,y1+2]<>2) and (b1[x1,y1+3]<>2) then
for i:=0 to 3 do
b1[x1,y1+i]:=1; end;
end;
For i:=1 to 10 do
for j:=1 to 10 do
begin
if (b1[i,j]=1) then
begin
image1.Canvas.Brush.Color:=clyellow;
image1.Canvas.Rectangle(20*i-20,20*j-20,20*(i),20*(j));
end;
end;
end;
end;
procedure TForm1.nash(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); //процедура постановки корабля
Begin
PlaySound('SET_WAV', HInstance, SND_RESOURCE or SND_ASYNC or SND_NOWAIT);
x1:=(X div 20)+1;
y1:=(Y div 20)+1;
if k11>=0 then begin //смотрит поставлены все корабли или нет
if button=mbright then begin //производит ротацию корабля по нажатии правой кн мыши
if rot=true then
rot:=false
else
rot:=true;
begin
image1.Canvas.Brush.Color:=clwhite;
For i:=1 to 10 do //рисует в пустых клетках белые квадрвты
for j:=1 to 10 do
begin
if b1[i,j]<>2 then
begin
b1[i,j]:=0;
image1.Canvas.Rectangle(20*i-20,20*j-20,20*i,20*j);
end;
end;
if rot=false then begin //ротация кораблей по горизонтали
Case k11 of //смотрит какой корабль сейчас надо расстанавливать
0: begin if (b1[x1,y1]<>2) then
b1[x1,y1]:=1; end;
1: begin if (b1[x1,y1]<>2) and (b1[x1+1,y1]<>2)then
for i:=0 to 1 do begin
b1[x1+i,y1]:=1 end; end;
2: begin if (b1[x1,y1]<>2) and (b1[x1+1,y1]<>2) and (b1[x1+2,y1]<>2) then
for i:=0 to 2 do
b1[x1+i,y1]:=1; end;
3: begin if (b1[x1,y1]<>2) and (b1[x1+1,y1]<>2) and (b1[x1+2,y1]<>2) and (b1[x1+3,y1]<>2) then
for i:=0 to 3 do
b1[x1+i,y1]:=1; end;
end;
For i:=1 to 10 do //рисует желтым цветом корабль(ещё не поставленный)
for j:=1 to 10 do
begin
if (b1[i,j]=1) then
begin
image1.Canvas.Brush.Color:=clyellow;
image1.Canvas.Rectangle(20*i-20,20*j-20,20*(i),20*(j));
end;
end;
End
Else //ротация кораблей по вертикали
Begin
Case k11 of //смотрит какой корабль сейчас надо расстанавливать
0: begin if (b1[x1,y1]<>2) then
b1[x1,y1]:=1; end;
1: begin if (b1[x1,y1]<>2) and (b1[x1,y1+1]<>2)then
for i:=0 to 1 do begin
b1[x1,y1+i]:=1 end; end;
2: begin if (b1[x1,y1]<>2) and (b1[x1,y1+1]<>2) and (b1[x1,y1+2]<>2) then
for i:=0 to 2 do
b1[x1,y1+i]:=1; end;
3: begin if (b1[x1,y1]<>2) and (b1[x1,y1+1]<>2) and (b1[x1,y1+2]<>2) and (b1[x1,y1+3]<>2) then
for i:=0 to 3 do
b1[x1,y1+i]:=1; end;
end;
For i:=1 to 10 do //рисует желтым цветом корабль(ещё не поставленный)
for j:=1 to 10 do
begin
if (b1[i,j]=1) then
begin
image1.Canvas.Brush.Color:=clyellow;
image1.Canvas.Rectangle(20*i-20,20*j-20,20*(i),20*(j));
end;
end;
end;
end;
End
Else
if rot=false then begin //ставит корабль по горизонтали
Case k11 of //смотрит какой корабль ставить
0: case x1 of //смотрит есть ли рядом с однопалубным кораблём другие корабли
1: if (b1[x1,y1]<>2) and
(b1[x1+1,y1+1]<>2) and
(b1[x1,y1+1]<>2) and
(b1[x1,y1-1]<>2) and
(b1[x1+1,y1-1]<>2) and
(b1[x1+1,y1]<>2) then
begin
b1[x1,y1]:=2;
riad:=true
end
else
riad:=false;
2..10: if (b1[x1,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,y1-1]<>2) and
(b1[x1+1,y1-1]<>2) and
(b1[x1+1,y1]<>2) then begin
b1[x1,y1]:=2;
riad:=true
end
else
riad:=false;
end;
1: case x1 of //смотрит есть ли рядом с двупалубным кораблём другие корабли
1:if(b1[x1,y1]<>2) and
(b1[x1+1,y1+1]<>2) and
(b1[x1,y1+1]<>2) and
(b1[x1,y1-1]<>2) and
(b1[x1+1,y1-1]<>2) and
(b1[x1+2,y1-1]<>2) and
(b1[x1+2,y1+1]<>2) and
(b1[x1+2,y1]<>2) and (x1+1<11)
then
for i:=0 to k11 do
begin
b1[x1+i,y1]:=2;
riad:=true
end
else
riad:=false;
2..10: if (b1[x1,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,y1-1]<>2) and
(b1[x1+1,y1-1]<>2) and
(b1[x1+2,y1-1]<>2) and
(b1[x1+2,y1+1]<>2) and
(b1[x1+2,y1]<>2) and (x1+1<11) then
for i:=0 to k11 do begin
b1[x1+i,y1]:=2;
riad:=true
end
else
riad:=false;
end;
2: case x1 of //смотрит есть ли рядом с трехпалубным кораблём другие корабли
1: if (b1[x1,y1]<>2) and
(b1[x1+1,y1+1]<>2) and
(b1[x1,y1+1]<>2) and
(b1[x1,y1-1]<>2) and
(b1[x1+1,y1-1]<>2) and
(b1[x1+2,y1-1]<>2) and
(b1[x1+2,y1+1]<>2) and
(b1[x1+3,y1-1]<>2) and
(b1[x1+3,y1+1]<>2) and
(b1[x1+3,y1]<>2) and (x1+2<11) then
for i:=0 to k11 do begin
b1[x1+i,y1]:=2;
riad:=true
end
else
riad:=false;
2..10:
if (b1[x1,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,y1-1]<>2) and
(b1[x1+1,y1-1]<>2) and
(b1[x1+2,y1-1]<>2) and
(b1[x1+2,y1+1]<>2) and
(b1[x1+3,y1-1]<>2) and
(b1[x1+3,y1+1]<>2) and
(b1[x1+3,y1]<>2) and (x1+2<11) then
for i:=0 to k11 do begin
b1[x1+i,y1]:=2;
riad:=true
end
else
riad:=false
end;
3: if x1+3<11 then //ставит четырехпалубный корабль
begin
for i:=0 to k11 do
b1[x1+i,y1]:=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
Else //ставит корабль по горизонтали
begin