Объясните листинг программы по игре морской бой - Delphi

Узнай цену своей работы

Формулировка задачи:

(Перенесено из Turbo Pascal) Объясните листинг программы по игре морской бой. Программа во вложении. Делфи м.rar

Решение задачи: «Объясните листинг программы по игре морской бой»

textual
Листинг программы
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;

Объяснение кода листинга программы

  1. В данной программе реализуется игра Морской бой.
  2. Переменные A, B и C представляют собой массивы размером 10x10, которые используются для хранения информации о расположении кораблей и результатах прослушивания.
  3. Функция check1 проверяет, находится ли корабль указанного типа (1, 2, 3 или 4) на позиции (k, l) с направлением (d, b). Если это так, то функция возвращает значение TRUE, иначе - FALSE.
  4. Функция check2 проверяет, можно ли разместить корабль указанного типа (1, 2, 3 или 4) на позиции (k, l) с направлением (d, b). Если это так, то функция возвращает значение TRUE, иначе - FALSE.
  5. Функция check3 проверяет, достаточно ли места для размещения корабля указанного типа (1, 2, 3 или 4) на поле игры. Если это так, то функция возвращает значение TRUE, иначе - FALSE.
  6. Процедура GetB используется для случайного размещения кораблей на игровом поле. Она ищет свободные ячейки и размещает на них корабли.
  7. Функция mru возвращает значение 1, если корабль указанного типа (1, 2, 3 или 4) находится на позиции (k, l), и 0 в противном случае.
  8. В основной части программы сначала инициализируются массивы A, B и C нулями. Затем с помощью функции GetB на поле игры размещаются корабли. После этого происходит обмен ходами между игроками и проверка наличия победных комбинаций с помощью функции mru.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.077 из 5
Похожие ответы