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