Kółko i krzyżyk - ciąg dalszy

1

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.
```
3

A teraz zrób tak, aby przed rozpoczęciem gry dało się wybrać rozmiar planszy oraz zmienić znak gracza :-)

Edit: zdaje się, że nawet już to sugerowałem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1