Procedure TForm1.rastkor(Sender: TObject; Shift: TShiftState; X

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: