Witajcie
Komu uda się wygrać w kółko i krzyżyk z komputerem niech da znać :).
Pozdrawiam
uses Crt;
type
tab = array[1..3,1..3] of char;
var
i,j,liczba_pol: byte;
pola: tab;
krzyzyk,kolko: boolean;
function Wyg(tablica: tab; znak_wyg: char): boolean;
var
r,c,z: byte;
begin
wyg := false;
for r := 1 to 3 do
begin z := 0;
for c := 1 to 3 do
if tablica[r,c] = znak_wyg then
z := z + 1;
if z = 3 then begin wyg := true; break end
end;
for c := 1 to 3 do
begin z := 0;
for r := 1 to 3 do
if tablica[r,c] = znak_wyg then
z := z + 1;
if z = 3 then begin wyg := true; break end
end;
z := 0;
for r := 1 to 3 do
if tablica[r,r] = znak_wyg then z := z + 1;
if z = 3 then wyg := true;
z := 0;
for r := 1 to 3 do
if tablica[r,4-r] = znak_wyg then z := z + 1;
if z = 3 then wyg := true
end;
procedure Spr_Wyg(var tablica: tab; var i1: byte; var j1: byte; znak: char);
begin
if (wyg(tablica,'X') = false) and (wyg(tablica,'0') = false) then
while i1 < 4 do
begin {writeln('kk');}
j1 := 1;
while j1 < 4 do
begin
if tablica[i1,j1] = ' ' then
begin
tablica[i1,j1] := znak;
if wyg(tablica,'X') then
break
else
if wyg(tablica,'0') then
break
else
tablica[i1,j1] := ' '
end;
inc(j1)
end;
if wyg(tablica,'X') or wyg(tablica,'0') then break;
inc(i1)
end
end;
procedure Symulacja_Gry(var tablica: tab; zajete_pola,poziom: byte; znak: char);
var
w,k: byte;
begin
krzyzyk := false; kolko := false;
w := 1; k := 1;
Spr_Wyg(tablica,w,k,znak);
if Wyg(tablica,znak) = true then { gracz }
begin
if znak = 'X' then
krzyzyk := true
else
kolko := true
end
else { brak wygranej }
begin
if znak = 'X' then znak := '0' else znak := 'X';
w := 1; k := 1;
Spr_Wyg(tablica,w,k,znak);
if Wyg(tablica,znak) then { Spr przeciwnika }
begin
if znak = 'X' then znak := '0' else znak := 'X';
tablica[w,k] := znak
end
else
begin
if znak = 'X' then znak := '0' else znak := 'X';
if zajete_pola <> 1 then
begin
repeat
w := random(3) + 1;
k := random(3) + 1
until ((zajete_pola = 3) and (w <> 2) and (k <> 2)
and (tablica[w,k] = ' ') and (tablica[2,2] = '0'))
or ((zajete_pola <> 3) and (tablica[w,k] = ' '))
or ((zajete_pola = 3) and (tablica[w,k] = ' ') and (tablica[2,2] = 'X'));
tablica[w,k] := znak;
end
else
if tablica[2,2] = ' ' then begin w := 2; k := 2; tablica[w,k] := znak end
else
begin
repeat
w := random(3) + 1;
k := random(3) + 1
until (tablica[w,k] = ' ') and (w <> 2) and (k <> 2);
tablica[w,k] := znak
end
end
end;
if poziom = 0 then
writeln('Komputer ma znak X ',w,' ',k);
inc(zajete_pola); inc(poziom);
if (zajete_pola < 9) and (Wyg(tablica,'0') = false) and (Wyg(tablica,'X') = false) then
begin
if znak = 'X' then znak := '0' else znak := 'X';
Symulacja_Gry(tablica,zajete_pola,poziom,znak)
end;
if kolko = true then
begin
tablica[w,k] := ' ';
if poziom = 1 then
Symulacja_Gry(tablica,zajete_pola-1,0,'X');
end
else
if poziom > 1 then
tablica[w,k] := ' '
end;
begin
for i := 1 to 3 do
for j := 1 to 3 do
pola[i,j] := ' ';
liczba_pol := 0; randomize;
repeat
write('Gracz ma znak 0 ');
readln(i,j);
pola[i,j] := '0';
liczba_pol := liczba_pol + 1;
if (liczba_pol < 9) and (Wyg(pola,'X') = false) then
begin
Symulacja_Gry(pola,liczba_pol,0,'X');
liczba_pol := liczba_pol + 1
end;
for i := 1 to 3 do
begin
for j := 1 to 3 do
write(pola[i,j]:4);
writeln
end;
if (liczba_pol = 9) and (Wyg(pola,'0') = false) and (Wyg(pola,'X') = false) then
writeln('REMIS')
else
if Wyg(pola,'X') = true then
writeln('Wygrał Komputer ')
else
if (Wyg(pola,'0') = true) then
writeln('Wygrał Gracz ');
if (liczba_pol = 9) or (Wyg(pola,'X') = true) then readln
until Wyg(pola,'X') or Wyg(pola,'0') or (liczba_pol = 9)
end.
```