program fleet; {0 - пустой}
uses crt;
const
SHIP_NUM = 4;
var {1 - недоступный невидимый}
field:array[1..25,1..14] of shortint; {2 - недоступный видимый}
i,j,pl:shortint; {3 - корабль}
dist:array[1..4,1..2] of shortint; {4 - подбитый}
ships:array[1..SHIP_NUM] of shortint; {5 - выстрел}
ships_alive:array[1..SHIP_NUM,1..2] of shortint;
IsHumanTurn:boolean;
function placeShip(x,y,size,dis,pl:shortint):boolean;
var i:shortint;
res:boolean;
nx,ny:shortint;
d1,d2:shortint;
begin
res:=TRUE;
for i:=1 to size do begin
nx:=x+dist[dis,1]*(i-1)+2+11*(pl-1);
ny:=y+dist[dis,2]*(i-1)+2;
if field[nx,ny] > 0 then begin
res:= FALSE; break; end;
end;
if res then begin
for i:=1 to size do begin
nx:=x+dist[dis,1]*(i-1)+2+11*(pl-1);
ny:=y+dist[dis,2]*(i-1)+2;
d1:=dis-1; if d1=0 then d1:=4;
d2:=dis+1; if d2=5 then d2:=1;
field[nx+dist[d1,1],ny+dist[d1,2]]:=1;
field[nx+dist[d2,1],ny+dist[d2,2]]:=1;
field[nx,ny]:=3;
end;
nx:=x-dist[dis,1]+2+11*(pl-1);
ny:=y-dist[dis,2]+2;
field[nx+dist[d1,1],ny+dist[d1,2]]:=1;
field[nx+dist[d2,1],ny+dist[d2,2]]:=1;
field[nx,ny]:=1;
nx:=x+dist[dis,1]*size+2+11*(pl-1);
ny:=y+dist[dis,2]*size+2;
field[nx+dist[d1,1],ny+dist[d1,2]]:=1;
field[nx+dist[d2,1],ny+dist[d2,2]]:=1;
field[nx,ny]:=1;
end;
placeShip:=res;
end;
procedure refreshVisible;
var i,j:shortint;
begin
for i:=3 to 23 do
for j:=3 to 12 do
if field[i,j]=4 then begin
field[i+1,j+1]:=2;
field[i+1,j-1]:=2;
field[i-1,j+1]:=2;
field[i-1,j-1]:=2;
end;
end;
function makeShot(x,y,pl:shortint):boolean;
var nx,ny:shortint;
begin
nx:=x+2+11*(2-pl);
ny:=y+2;
if (field[nx,ny] = 3) OR (field[nx,ny] = 4) then begin field[nx,ny]:=4; makeShot:=TRUE; refreshVisible end
else begin field[nx,ny]:=5; makeShot:=FALSE end;
end;
procedure drawField;
var i,j:shortint;
begin
clrscr;
for j:=1 to 10 do begin
for i:=1 to 10 do
case field[i+2,j+2] of
3: write('0');
4: write('X');
5: write('*');
else write(' ');
end;
write('|'); if j<10 then write(' ');
write(j,'|');
for i:=1 to 10 do
case field[i+13,j+2] of
3: write(' ');
4: write('X');
5: write('*');
else write(' ');
end;
writeln;
end;
writeln('1234567890 1234567890');
end;
function makeHumanTurn:boolean;
var x,y:shortint;
begin
drawfield;
write('Coordinats:'); read(x,y);
makeHumanTurn:=makeShot(x,y,1);
end;
function testVictory:boolean;
var i,j,pl:shortint;
res1,res2:boolean;
begin
res1:=TRUE;res2:=TRUE;
for pl:=1 to 2 do
for i:=(3+11*(pl-1)) to (12+11*(pl-1)) do
for j:=3 to 11 do
if field[i,j]=3 then if pl=1 then res2:=FALSE
else res1:=FALSE;
if res1 then writeln('Player 1 vin');
if res2 then writeln('Player 2 vin');
testVictory:= res1 OR res2;
end;
function makeAiTurn:boolean;
var x,y:shortint;
begin
repeat begin x:=RANDOM(10)+1; y:=RANDOM(10)+1 end;
until NOT ( (field[x+2,y+2]=4) OR (field[x+2,y+2]=5) OR (field[x+2,y+2]=2));
makeAiTurn:= NOT makeShot(x,y,2);
end;
begin
randomize;
{-------------------------------INITIALIZING------------------------------------------}
for i:=1 to 25 do
for j:=1 to 2 do begin
field[i,j]:=1;
field[i,12+j]:=1;
end;
for i:=1 to 2 do
for j:=3 to 12 do begin
field[i,j]:=1;
field[23+i,j]:=1;
field[13,j]:=1;
end;
dist[1,1]:= 0;dist[1,2]:= 1; {вверх}
dist[2,1]:= 1;dist[2,2]:= 0; {вправо}
dist[3,1]:= 0;dist[3,2]:=-1; {влево}
dist[4,1]:=-1;dist[4,2]:= 0; {вниз}
ships[1]:=4;
ships[2]:=3;
ships[3]:=2;
ships[4]:=1;
IsHumanTurn:=TRUE;
for i:=1 to SHIP_NUM do begin
ships_alive[i,1]:=ships[i];ships_alive[i,2]:=ships[i];
end;
{-------------------------SHIP PLACEMENT--------------------------------------------}
for pl:=1 to 2 do
for i:=SHIP_NUM downto 1 do
for j:=1 to ships[i] do
repeat until placeShip(RANDOM(10)+1,RANDOM(10)+1,i,RANDOM(4)+1,pl);
{-----------------------------------------------------------------------------------}
{placeShip(1,1,4,3,1);}
repeat if IsHumanTurn then IsHumanTurn:=makeHumanTurn
else IsHumanTurn:=makeAiTurn;
until testVictory;readkey;
{ for j:=14 downto 1 do begin
for i:=1 to 25 do
write(field[i,j]);
writeln;
end;}
end.
cHJvZ3JhbSBmbGVldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezAgLSDQv9GD0YHRgtC+0Ll9CnVzZXMgY3J0Owpjb25zdAogICAgU0hJUF9OVU0gPSA0Owp2YXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7MSAtINC90LXQtNC+0YHRgtGD0L/QvdGL0Lkg0L3QtdCy0LjQtNC40LzRi9C5fQogICAgZmllbGQ6YXJyYXlbMS4uMjUsMS4uMTRdIG9mIHNob3J0aW50OyAgICAgICB7MiAtINC90LXQtNC+0YHRgtGD0L/QvdGL0Lkg0LLQuNC00LjQvNGL0Ll9CiAgICBpLGoscGw6c2hvcnRpbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHszIC0g0LrQvtGA0LDQsdC70Yx9CiAgICBkaXN0OmFycmF5WzEuLjQsMS4uMl0gb2Ygc2hvcnRpbnQ7ICAgICAgICAgIHs0IC0g0L/QvtC00LHQuNGC0YvQuX0KICAgIHNoaXBzOmFycmF5WzEuLlNISVBfTlVNXSBvZiBzaG9ydGludDsgICAgICAgezUgLSDQstGL0YHRgtGA0LXQu30KICAgIHNoaXBzX2FsaXZlOmFycmF5WzEuLlNISVBfTlVNLDEuLjJdIG9mIHNob3J0aW50OwogICAgSXNIdW1hblR1cm46Ym9vbGVhbjsKICAgIApmdW5jdGlvbiBwbGFjZVNoaXAoeCx5LHNpemUsZGlzLHBsOnNob3J0aW50KTpib29sZWFuOwp2YXIgaTpzaG9ydGludDsKICAgIHJlczpib29sZWFuOwogICAgbngsbnk6c2hvcnRpbnQ7CiAgICBkMSxkMjpzaG9ydGludDsKYmVnaW4KICAgIHJlczo9VFJVRTsKICAgIGZvciBpOj0xIHRvIHNpemUgZG8gYmVnaW4KICAgICAgICBueDo9eCtkaXN0W2RpcywxXSooaS0xKSsyKzExKihwbC0xKTsKICAgICAgICBueTo9eStkaXN0W2RpcywyXSooaS0xKSsyOwogICAgICAgIGlmIGZpZWxkW254LG55XSA+IDAgdGhlbiBiZWdpbgogICAgICAgICAgICAgICAgcmVzOj0gRkFMU0U7IGJyZWFrOyBlbmQ7CiAgICBlbmQ7CiAgICBpZiByZXMgdGhlbiBiZWdpbgogICAgICAgIGZvciBpOj0xIHRvIHNpemUgZG8gYmVnaW4KICAgICAgICAgICAgbng6PXgrZGlzdFtkaXMsMV0qKGktMSkrMisxMSoocGwtMSk7CiAgICAgICAgICAgIG55Oj15K2Rpc3RbZGlzLDJdKihpLTEpKzI7CiAgICAgICAgICAgIGQxOj1kaXMtMTsgaWYgZDE9MCB0aGVuIGQxOj00OwogICAgICAgICAgICBkMjo9ZGlzKzE7IGlmIGQyPTUgdGhlbiBkMjo9MTsKICAgICAgICAgICAgZmllbGRbbngrZGlzdFtkMSwxXSxueStkaXN0W2QxLDJdXTo9MTsKICAgICAgICAgICAgZmllbGRbbngrZGlzdFtkMiwxXSxueStkaXN0W2QyLDJdXTo9MTsKICAgICAgICAgICAgZmllbGRbbngsbnldOj0zOwogICAgICAgIGVuZDsKCiAgICAgICAgbng6PXgtZGlzdFtkaXMsMV0rMisxMSoocGwtMSk7CiAgICAgICAgbnk6PXktZGlzdFtkaXMsMl0rMjsKICAgICAgICBmaWVsZFtueCtkaXN0W2QxLDFdLG55K2Rpc3RbZDEsMl1dOj0xOwogICAgICAgIGZpZWxkW254K2Rpc3RbZDIsMV0sbnkrZGlzdFtkMiwyXV06PTE7CiAgICAgICAgZmllbGRbbngsbnldOj0xOwogICAgICAgIAogICAgICAgIG54Oj14K2Rpc3RbZGlzLDFdKnNpemUrMisxMSoocGwtMSk7CiAgICAgICAgbnk6PXkrZGlzdFtkaXMsMl0qc2l6ZSsyOwogICAgICAgIGZpZWxkW254K2Rpc3RbZDEsMV0sbnkrZGlzdFtkMSwyXV06PTE7CiAgICAgICAgZmllbGRbbngrZGlzdFtkMiwxXSxueStkaXN0W2QyLDJdXTo9MTsKICAgICAgICBmaWVsZFtueCxueV06PTE7CiAgICAgICAgCiAgICBlbmQ7CiAgICBwbGFjZVNoaXA6PXJlczsKZW5kOwoKcHJvY2VkdXJlIHJlZnJlc2hWaXNpYmxlOwp2YXIgaSxqOnNob3J0aW50OwpiZWdpbgogICAgZm9yIGk6PTMgdG8gMjMgZG8KICAgICAgICBmb3Igajo9MyB0byAxMiBkbwogICAgICAgICAgICBpZiBmaWVsZFtpLGpdPTQgdGhlbiBiZWdpbgogICAgICAgICAgICAgICAgZmllbGRbaSsxLGorMV06PTI7CiAgICAgICAgICAgICAgICBmaWVsZFtpKzEsai0xXTo9MjsKICAgICAgICAgICAgICAgIGZpZWxkW2ktMSxqKzFdOj0yOwogICAgICAgICAgICAgICAgZmllbGRbaS0xLGotMV06PTI7CiAgICAgICAgICAgIGVuZDsKZW5kOwoKZnVuY3Rpb24gbWFrZVNob3QoeCx5LHBsOnNob3J0aW50KTpib29sZWFuOwp2YXIgbngsbnk6c2hvcnRpbnQ7CmJlZ2luCiAgICBueDo9eCsyKzExKigyLXBsKTsKICAgIG55Oj15KzI7CiAgICBpZiAoZmllbGRbbngsbnldID0gMykgT1IgKGZpZWxkW254LG55XSA9IDQpIHRoZW4gYmVnaW4gZmllbGRbbngsbnldOj00OyBtYWtlU2hvdDo9VFJVRTsgcmVmcmVzaFZpc2libGUgZW5kCiAgICAgICAgZWxzZSBiZWdpbiBmaWVsZFtueCxueV06PTU7IG1ha2VTaG90Oj1GQUxTRSBlbmQ7CmVuZDsKCnByb2NlZHVyZSBkcmF3RmllbGQ7CnZhciBpLGo6c2hvcnRpbnQ7CmJlZ2luCiAgICBjbHJzY3I7CiAgICBmb3Igajo9MSB0byAxMCBkbyBiZWdpbgogICAgICAgIGZvciBpOj0xIHRvIDEwIGRvCiAgICAgICAgICAgIGNhc2UgZmllbGRbaSsyLGorMl0gb2YKICAgICAgICAgICAgICAgIDM6IHdyaXRlKCcwJyk7CiAgICAgICAgICAgICAgICA0OiB3cml0ZSgnWCcpOwogICAgICAgICAgICAgICAgNTogd3JpdGUoJyonKTsKICAgICAgICAgICAgICAgIGVsc2Ugd3JpdGUoJyAnKTsgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIGVuZDsKICAgICAgICAKICAgICAgICB3cml0ZSgnfCcpOyBpZiBqPDEwIHRoZW4gd3JpdGUoJyAnKTsKICAgICAgICB3cml0ZShqLCd8Jyk7CiAgICAgICAgZm9yIGk6PTEgdG8gMTAgZG8KICAgICAgICAgICAgY2FzZSBmaWVsZFtpKzEzLGorMl0gb2YKICAgICAgICAgICAgICAgIDM6IHdyaXRlKCcgJyk7CiAgICAgICAgICAgICAgICA0OiB3cml0ZSgnWCcpOwogICAgICAgICAgICAgICAgNTogd3JpdGUoJyonKTsKICAgICAgICAgICAgICAgIGVsc2Ugd3JpdGUoJyAnKTsKICAgICAgICAgICAgZW5kOwogICAgICAgIHdyaXRlbG47CiAgICBlbmQ7CiAgICB3cml0ZWxuKCcxMjM0NTY3ODkwICAgIDEyMzQ1Njc4OTAnKTsKZW5kOwoKZnVuY3Rpb24gbWFrZUh1bWFuVHVybjpib29sZWFuOwp2YXIgeCx5OnNob3J0aW50OwpiZWdpbgogICAgZHJhd2ZpZWxkOwogICAgd3JpdGUoJ0Nvb3JkaW5hdHM6Jyk7IHJlYWQoeCx5KTsKICAgIG1ha2VIdW1hblR1cm46PW1ha2VTaG90KHgseSwxKTsKZW5kOwoKZnVuY3Rpb24gdGVzdFZpY3Rvcnk6Ym9vbGVhbjsKdmFyIGksaixwbDpzaG9ydGludDsKICAgIHJlczEscmVzMjpib29sZWFuOwpiZWdpbgogICAgcmVzMTo9VFJVRTtyZXMyOj1UUlVFOwogICAgZm9yIHBsOj0xIHRvIDIgZG8KICAgICAgICBmb3IgaTo9KDMrMTEqKHBsLTEpKSB0byAoMTIrMTEqKHBsLTEpKSBkbwogICAgICAgICAgICBmb3Igajo9MyB0byAxMSBkbwogICAgICAgICAgICAgICAgaWYgZmllbGRbaSxqXT0zIHRoZW4gaWYgcGw9MSB0aGVuIHJlczI6PUZBTFNFCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSByZXMxOj1GQUxTRTsKICAgIGlmIHJlczEgdGhlbiB3cml0ZWxuKCdQbGF5ZXIgMSB2aW4nKTsgICAKICAgIGlmIHJlczIgdGhlbiB3cml0ZWxuKCdQbGF5ZXIgMiB2aW4nKTsKICAgIHRlc3RWaWN0b3J5Oj0gcmVzMSBPUiByZXMyOwplbmQ7CgpmdW5jdGlvbiBtYWtlQWlUdXJuOmJvb2xlYW47CnZhciB4LHk6c2hvcnRpbnQ7CmJlZ2luCiAgICByZXBlYXQgYmVnaW4geDo9UkFORE9NKDEwKSsxOyB5Oj1SQU5ET00oMTApKzEgZW5kOwogICAgICAgIHVudGlsIE5PVCAoIChmaWVsZFt4KzIseSsyXT00KSBPUiAgKGZpZWxkW3grMix5KzJdPTUpIE9SICAoZmllbGRbeCsyLHkrMl09MikpOwogICAgbWFrZUFpVHVybjo9IE5PVCBtYWtlU2hvdCh4LHksMik7CmVuZDsKIApiZWdpbgogICAgcmFuZG9taXplOwp7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUlOSVRJQUxJWklORy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLX0KICAgIGZvciBpOj0xIHRvIDI1IGRvCiAgICAgICAgZm9yIGo6PTEgdG8gMiBkbyBiZWdpbgogICAgICAgICAgICAgICAgZmllbGRbaSxqXTo9MTsKICAgICAgICAgICAgICAgIGZpZWxkW2ksMTIral06PTE7CiAgICAgICAgZW5kOwogICAgCiAgICBmb3IgaTo9MSB0byAyIGRvCiAgICAgICAgZm9yIGo6PTMgdG8gMTIgZG8gYmVnaW4KICAgICAgICAgICAgZmllbGRbaSxqXTo9MTsKICAgICAgICAgICAgZmllbGRbMjMraSxqXTo9MTsKICAgICAgICAgICAgZmllbGRbMTMsal06PTE7CiAgICAgICAgZW5kOwoKICAgIGRpc3RbMSwxXTo9IDA7ZGlzdFsxLDJdOj0gMTsgICAgICAgICAgICAgICAge9Cy0LLQtdGA0YV9CiAgICBkaXN0WzIsMV06PSAxO2Rpc3RbMiwyXTo9IDA7ICAgICAgICAgICAgICAgIHvQstC/0YDQsNCy0L59CiAgICBkaXN0WzMsMV06PSAwO2Rpc3RbMywyXTo9LTE7ICAgICAgICAgICAgICAgIHvQstC70LXQstC+fQogICAgZGlzdFs0LDFdOj0tMTtkaXN0WzQsMl06PSAwOyAgICAgICAgICAgICAgICB70LLQvdC40Ld9CiAgICAKICAgIHNoaXBzWzFdOj00OwogICAgc2hpcHNbMl06PTM7CiAgICBzaGlwc1szXTo9MjsKICAgIHNoaXBzWzRdOj0xOwogICAgCiAgICBJc0h1bWFuVHVybjo9VFJVRTsKICAgIAogICAgZm9yIGk6PTEgdG8gU0hJUF9OVU0gZG8gYmVnaW4KICAgICAgICBzaGlwc19hbGl2ZVtpLDFdOj1zaGlwc1tpXTtzaGlwc19hbGl2ZVtpLDJdOj1zaGlwc1tpXTsKICAgIGVuZDsKey0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1TSElQIFBMQUNFTUVOVC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfQogICAgZm9yIHBsOj0xIHRvIDIgZG8KICAgICAgICBmb3IgaTo9U0hJUF9OVU0gZG93bnRvIDEgZG8KICAgICAgICAgICAgZm9yIGo6PTEgdG8gc2hpcHNbaV0gZG8KICAgICAgICAgICAgICAgIHJlcGVhdCB1bnRpbCBwbGFjZVNoaXAoUkFORE9NKDEwKSsxLFJBTkRPTSgxMCkrMSxpLFJBTkRPTSg0KSsxLHBsKTsKey0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfSAgICAKICAgIHtwbGFjZVNoaXAoMSwxLDQsMywxKTt9CiAgICAKICAgIHJlcGVhdCBpZiBJc0h1bWFuVHVybiB0aGVuIElzSHVtYW5UdXJuOj1tYWtlSHVtYW5UdXJuCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBJc0h1bWFuVHVybjo9bWFrZUFpVHVybjsKICAgICAgICB1bnRpbCB0ZXN0VmljdG9yeTtyZWFka2V5OwogICAgCnsgICAgZm9yIGo6PTE0IGRvd250byAxIGRvIGJlZ2luCiAgICAgICAgZm9yIGk6PTEgdG8gMjUgZG8KICAgICAgICAgICAgd3JpdGUoZmllbGRbaSxqXSk7CiAgICAgICAgd3JpdGVsbjsKICAgIGVuZDt9CmVuZC4=