online compiler and debugger for c/c++

code. compile. run. debug. share.
Source Code    Language
uses Crt; type tab = array[1..3,1..3] of char; tablica_gry = array[1..3,1..3] of char; tablica_wezlow = array[1..9] of integer; schowek = array[1..9] of integer; Tablica_Wynikow = array[1..9] of integer; wsk_wezla = ^wezel; wezel = record plansza: tab; galez1,galez2,galez3, galez4,galez5,galez6, galez7,galez8,galez9: wsk_wezla end; var opcja,n_opcja,gl: wsk_wezla; i,j,zajete_pole,rotacja,wie,kol: byte; indeks,start_rows,start_cols: byte; l_win,l_lost,l_tie: word; X,O: char; gra: tab; t_wezly: tablica_wezlow; t_schowek: schowek; Wyniki: Tablica_Wynikow; korekta_wygranej,korekta_przegranej: boolean; obrona: boolean; function wyg(wsk_linii: 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 wsk_linii[r,c] = znak_wyg then z := z + 1; if z = 3 then begin wyg := true; { wiersz } break end; end; for c := 1 to 3 do begin z := 0; for r := 1 to 3 do if wsk_linii[r,c] = znak_wyg then z := z + 1; if z = 3 then begin wyg := true; { kolumna } break end; end; z := 0; for r := 1 to 3 do if wsk_linii[r,r] = znak_wyg then z := z + 1; if z = 3 then begin wyg := true; { przekatna nr. 1 } end; z := 0; for r := 1 to 3 do if wsk_linii[r,4-r] = znak_wyg then z := z + 1; if z = 3 then begin wyg := true; { przekatna nr. 2 } end end; function Nr_Wezla(w,k: byte): byte; begin if k mod 3 = 0 then Nr_Wezla := w * k else Nr_Wezla := (w - 1) * 3 + k end; function Wyszukanie_Wzorca(pocz: wsk_wezla; tab_glowna: tab; schow: schowek; wezly: tablica_wezlow): boolean; var wi,wj: byte; znaleziono: boolean; begin znaleziono := false; Wyszukanie_Wzorca := false; for wi := 1 to 3 do begin for wj := 1 to 3 do if (((pocz^.plansza[wi,wj] = tab_glowna[wi,wj]) and (pocz^.plansza[wi,wj] <> ' ')) or ((pocz^.plansza[wi,wj] <> ' ') and (tab_glowna[wi,wj] = ' '))) then znaleziono := true else if pocz^.plansza[wi,wj] <> tab_glowna[wi,wj] then begin znaleziono := false; break end; if znaleziono = false then break end; if znaleziono = true then begin for wi := 1 to 9 do schow[wi] := wi; for wi := 9 downto zajete_pole + 1 do begin if abs(wezly[schow[wi]]) = 9 then pocz := pocz^.galez9; if abs(wezly[schow[wi]]) = 8 then pocz := pocz^.galez8; if abs(wezly[schow[wi]]) = 7 then pocz := pocz^.galez7; if abs(wezly[schow[wi]]) = 6 then pocz := pocz^.galez6; if abs(wezly[schow[wi]]) = 5 then pocz := pocz^.galez5; if abs(wezly[schow[wi]]) = 4 then pocz := pocz^.galez4; if abs(wezly[schow[wi]]) = 3 then pocz := pocz^.galez3; if abs(wezly[schow[wi]]) = 2 then pocz := pocz^.galez2; if abs(wezly[schow[wi]]) = 1 then pocz := pocz^.galez1 end; for wi := 1 to 3 do begin for wj := 1 to 3 do if pocz^.plansza[wi,wj] = tab_glowna[wi,wj] then znaleziono := true else begin znaleziono := false; break end; if znaleziono = false then break end end; Wyszukanie_Wzorca := znaleziono end; procedure Najlepszy_Ruch(tablica: tab; nr_pola: byte; var wygrana,przegrana,remis: word; var korekt_wygr,korekt_prze: boolean); begin if wyg(tablica,O) = true then begin inc(przegrana); korekt_prze := true; korekt_wygr := false end else if wyg(tablica,X) = true then begin inc(wygrana); korekt_wygr := true; korekt_prze := false end else if nr_pola = 9 then begin inc(remis); korekt_wygr := false; korekt_prze := false end end; procedure Spr_Wyg(var tablica: tab; var i1: byte; var j1: byte; znak: char); begin if (wyg(tablica,X) = false) and (wyg(tablica,O) = false) then while i1 < 4 do begin 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,O) then break else tablica[i1,j1] := ' ' end; inc(j1) end; if wyg(tablica,X) or wyg(tablica,O) then break; inc(i1) end end; procedure Opcje(tablica: tab; wpom,pom,ilo,zaczynamy,nr_step: byte; bw,br: byte; znak_gracza: char; var win,prz,rem: word; ent: boolean); var wi1, wj1: byte; begin wi1 := 1; wj1 := 1; Spr_Wyg(tablica,wi1,wj1,znak_gracza); if (wi1 = 4) and (wj1 = 4) then begin wi1 := 1; wj1 := 1; if znak_gracza = O then znak_gracza := X else znak_gracza := O; Spr_Wyg(tablica,wi1,wj1,znak_gracza); if (wi1 < 4) and (wj1 < 4) then begin if znak_gracza = O then znak_gracza := X else znak_gracza := O; tablica[wi1,wj1] := znak_gracza; bw := wi1; br := wj1; if znak_gracza = O then znak_gracza := X else znak_gracza := O; nr_step := nr_step + 1; pom := 1; wpom := wpom + 1 end else begin if znak_gracza = O then znak_gracza := X else znak_gracza := O; if (nr_step < 9) and (nr_step > zajete_pole) then begin if br < 3 then br := br + 1 else if bw < 3 then begin br := 1; bw := bw + 1 end else begin br := 1; bw := 1 end; pom := pom + 1 end; if ((tablica[bw,br] = ' ') and (zaczynamy = 0)) or ((tablica[bw,br] = ' ') and (zaczynamy = ilo)) then begin nr_step := nr_step + 1; tablica[bw,br] := znak_gracza; pom := 1; ent := true; if znak_gracza = O then znak_gracza := X else znak_gracza := O; if zaczynamy = 0 then zaczynamy := zaczynamy + 1; if nr_step > zajete_pole then wpom := wpom + 1 end else if tablica[bw,br] = ' ' then zaczynamy := zaczynamy + 1 end end else begin bw := wi1; br := wj1; nr_step := nr_step + 1; pom := 1; wpom := wpom + 1 end; korekta_wygranej := false; korekta_przegranej := false; Najlepszy_Ruch(tablica,nr_step,win,prz,rem,korekta_wygranej,korekta_przegranej); {writeln; if (nr_step = 9) or (wyg(tablica,'X') = true) or (wyg(tablica,'0') = true) then begin writeln(bw,' ',br,' nr_step ',nr_step); for wi1 := 1 to 3 do begin for wj1 := 1 to 3 do write(tablica[wi1,wj1]:4); writeln end; readln; end; writeln('przegrana: ',prz);} if (nr_step < 9) and (wyg(tablica,X) = false) and (wyg(tablica,O) = false) then Opcje(tablica,wpom,pom,ilo,zaczynamy,nr_step,bw,br,znak_gracza,win,prz,rem,ent); if nr_step > zajete_pole + 1 then begin if pom = 1 then if wpom > 1 then tablica[bw,br] := ' ' end else if (ilo < 9 - nr_step) and (pom = 1) then begin ilo := ilo + 1; tablica[bw,br] := ' '; Opcje(tablica,0,0,ilo,0,nr_step-1,bw,br,X,win,prz,rem,false) end end; procedure Spr_Wezla(pocz: wsk_wezla; nast: wsk_wezla; z_pola,w_r,k_c: byte; var p_wartosc: byte; schow: schowek; wezly: tablica_wezlow; var wygra,przegra,remi: word; var tablica_wag: Tablica_wynikow); var l_rows,l_cols: byte; begin if (zajete_pole < 3) or (obrona = false) then begin korekta_wygranej := false; korekta_przegranej := false; Najlepszy_Ruch(pocz^.plansza,z_pola,wygra,przegra,remi,korekta_wygranej,korekta_przegranej) end; for l_rows := 1 to 9 do schow[l_rows] := l_rows; for l_rows := 9 downto zajete_pole + 2 do begin if abs(wezly[schow[l_rows]]) = 9 then begin pocz := pocz^.galez9; z_pola := z_pola - 1 end; if abs(wezly[schow[l_rows]]) = 8 then begin pocz := pocz^.galez8; z_pola := z_pola - 1 end; if abs(wezly[schow[l_rows]]) = 7 then begin pocz := pocz^.galez7; z_pola := z_pola - 1 end; if abs(wezly[schow[l_rows]]) = 6 then begin pocz := pocz^.galez6; z_pola := z_pola - 1 end; if abs(wezly[schow[l_rows]]) = 5 then begin pocz := pocz^.galez5; z_pola := z_pola - 1 end; if abs(wezly[schow[l_rows]]) = 4 then begin pocz := pocz^.galez4; z_pola := z_pola - 1 end; if abs(wezly[schow[l_rows]]) = 3 then begin pocz := pocz^.galez3; z_pola := z_pola - 1 end; if abs(wezly[schow[l_rows]]) = 2 then begin pocz := pocz^.galez2; z_pola := z_pola - 1 end; if abs(wezly[schow[l_rows]]) = 1 then begin pocz := pocz^.galez1; z_pola := z_pola - 1 end end; for l_rows := 1 to 3 do for l_cols := 1 to 3 do if pocz^.plansza[l_rows,l_cols] <> ' ' then if gra[l_rows,l_cols] = ' ' then if p_wartosc <> Nr_Wezla(l_rows,l_cols) then begin if ((zajete_pole < 3) and (obrona = true)) or ((zajete_pole < 4) and (obrona = false)) then if obrona = true then tablica_wag[p_wartosc] := przegra - wygra else tablica_wag[p_wartosc] := wygra - przegra; if korekta_wygranej then tablica_wag[p_wartosc] := tablica_wag[p_wartosc] - 1; if korekta_przegranej then tablica_wag[p_wartosc] := tablica_wag[p_wartosc] + 1; p_wartosc := Nr_Wezla(l_rows,l_cols); if ((obrona = true) and (zajete_pole >= 3)) or ((obrona = false) and (zajete_pole >= 4)) then begin tablica_wag[p_wartosc] := 0; wygra := 0; remi := 0; przegra := 0; Opcje(gra,0,0,1,0,z_pola-1,l_rows,l_cols,X,wygra,przegra,remi,false); if obrona = false then tablica_wag[p_wartosc] := wygra - przegra else tablica_wag[p_wartosc] := przegra end; wygra := 0; remi := 0; przegra := 0; break end end; function Wolne_Pole(pocz: wsk_wezla; var n_rows: byte; var n_cols: byte): boolean; var zatrzymanie: boolean; wiersz,kolumna: byte; begin zatrzymanie := false; Wolne_Pole := false; for wiersz := 1 to 3 do begin for kolumna := 1 to 3 do if pocz^.plansza[wiersz,kolumna] = ' ' then begin zatrzymanie := true; break end; if zatrzymanie = true then begin n_rows := wiersz; n_cols := kolumna; Wolne_Pole := zatrzymanie; break end end end; function Nowy_Ruch(pocz: wsk_wezla; var nast: wsk_wezla; var rows,cols,nr_pola: byte; var znak: char; var wezly: tablica_wezlow): boolean; begin Nowy_Ruch := false; if (pocz^.plansza[rows,cols] = ' ') and (rows = 1) and (cols = 1) then begin New(nast); nast^.galez1 := pocz; nast^.plansza := pocz^.plansza; inc(nr_pola); if znak = O then wezly[nr_pola] := Nr_Wezla(rows,cols) * -1 else wezly[nr_pola] := Nr_Wezla(rows,cols); nast^.plansza[rows,cols] := znak; if znak = X then znak := O else znak := X end else if (pocz^.plansza[rows,cols] = ' ') and (rows = 1) and (cols = 2) then begin New(nast); nast^.galez2 := pocz; nast^.plansza := pocz^.plansza; inc(nr_pola); if znak = O then wezly[nr_pola] := Nr_Wezla(rows,cols) * -1 else wezly[nr_pola] := Nr_Wezla(rows,cols); nast^.plansza[rows,cols] := znak; if znak = X then znak := O else znak := X end else if (pocz^.plansza[rows,cols] = ' ') and (rows = 1) and (cols = 3) then begin New(nast); nast^.galez3 := pocz; nast^.plansza := pocz^.plansza; inc(nr_pola); if znak = O then wezly[nr_pola] := Nr_Wezla(rows,cols) * -1 else wezly[nr_pola] := Nr_Wezla(rows,cols); nast^.plansza[rows,cols] := znak; if znak = X then znak := O else znak := X end else if (pocz^.plansza[rows,cols] = ' ') and (rows = 2) and (cols = 1) then begin New(nast); nast^.galez4 := pocz; nast^.plansza := pocz^.plansza; inc(nr_pola); if znak = O then wezly[nr_pola] := Nr_Wezla(rows,cols) * -1 else wezly[nr_pola] := Nr_Wezla(rows,cols); nast^.plansza[rows,cols] := znak; if znak = X then znak := O else znak := X end else if (pocz^.plansza[rows,cols] = ' ') and (rows = 2) and (cols = 2) then begin New(nast); nast^.galez5 := pocz; nast^.plansza := pocz^.plansza; inc(nr_pola); if znak = O then wezly[nr_pola] := Nr_Wezla(rows,cols) * -1 else wezly[nr_pola] := Nr_Wezla(rows,cols); nast^.plansza[rows,cols] := znak; if znak = X then znak := O else znak := X end else if (pocz^.plansza[rows,cols] = ' ') and (rows = 2) and (cols = 3) then begin New(nast); nast^.galez6 := pocz; nast^.plansza := pocz^.plansza; inc(nr_pola); if znak = O then wezly[nr_pola] := Nr_Wezla(rows,cols) * -1 else wezly[nr_pola] := Nr_Wezla(rows,cols); nast^.plansza[rows,cols] := znak; if znak = X then znak := O else znak := X end else if (pocz^.plansza[rows,cols] = ' ') and (rows = 3) and (cols = 1) then begin New(nast); nast^.galez7 := pocz; nast^.plansza := pocz^.plansza; inc(nr_pola); if znak = O then wezly[nr_pola] := Nr_Wezla(rows,cols) * -1 else wezly[nr_pola] := Nr_Wezla(rows,cols); nast^.plansza[rows,cols] := znak; if znak = X then znak := O else znak := X end else if (pocz^.plansza[rows,cols] = ' ') and (rows = 3) and (cols = 2) then begin New(nast); nast^.galez8 := pocz; nast^.plansza := pocz^.plansza; inc(nr_pola); if znak = O then wezly[nr_pola] := Nr_Wezla(rows,cols) * -1 else wezly[nr_pola] := Nr_Wezla(rows,cols); nast^.plansza[rows,cols] := znak; if znak = X then znak := O else znak := X end else if (pocz^.plansza[rows,cols] = ' ') and (rows = 3) and (cols = 3) then begin New(nast); nast^.galez9 := pocz; nast^.plansza := pocz^.plansza; inc(nr_pola); if znak = O then wezly[nr_pola] := Nr_Wezla(rows,cols) * -1 else wezly[nr_pola] := Nr_Wezla(rows,cols); nast^.plansza[rows,cols] := znak; if znak = X then znak := O else znak := X end else begin wie := rows; kol := cols; Wolne_Pole(pocz,wie,kol); rows := wie; cols := kol; Nowy_Ruch := true end end; procedure N_Wezel(pocz: wsk_wezla; nast: wsk_wezla; var p_war: byte; rows,cols,nr_pola,poziom: byte; var rot: byte; znak: char; wezly: tablica_wezlow; schow: schowek; var tab_wag: Tablica_Wynikow); var wi,wj,o1: byte; przeskok: boolean; begin przeskok := false; if zajete_pole >= 3 then begin wi := 1; wj := 1; Spr_Wyg(pocz^.plansza,wi,wj,znak); if (wi < 4) and (wj < 4) then begin rows := wi; cols := wj; pocz^.plansza[rows,cols] := ' '; przeskok := true end else begin if znak = X then znak := O else znak := X; wi := 1; wj := 1; Spr_Wyg(pocz^.plansza,wi,wj,znak); if (wi < 4) and (wj < 4) then begin if znak = X then znak := O else znak := X; rows := wi; cols := wj; pocz^.plansza[rows,cols] := ' '; przeskok := true end else if znak = X then znak := O else znak := X end end; if Nowy_Ruch(pocz,nast,rows,cols,nr_pola,znak,wezly) = true then begin przeskok := true; Nowy_Ruch(pocz,nast,rows,cols,nr_pola,znak,wezly) end; pocz := nast; inc(poziom); if (wyg(pocz^.plansza,O) = true) or (wyg(pocz^.plansza,X) = true) or (nr_pola <= 9) then if Wyszukanie_Wzorca(nast,gra,schow,wezly) then Spr_Wezla(nast,pocz,nr_pola,rows,cols,p_war,schow,wezly,l_win,l_lost,l_tie,tab_wag); if przeskok = false then if cols < 3 then inc(cols) else if (cols = 3) and (rows < 3) then begin cols := 1; inc(rows) end else if (cols = 3) and (rows = 3) then begin cols := 1; rows := 1 end; if (nr_pola < 9) and (wyg(pocz^.plansza,X) = false) and (wyg(pocz^.plansza,O) = false) then N_Wezel(pocz,nast,p_war,rows,cols,nr_pola,poziom,rot,znak,wezly,schow,tab_wag); if nr_pola = 9 then rot := poziom - 2 else if (wyg(pocz^.plansza,X) = true) or (wyg(pocz^.plansza,O) = true) then if zajete_pole < 3 then rot := poziom - 1 else rot := nr_pola - 3; if (poziom > 0) and (poziom <= rot) then begin o1 := 0; while o1 <= (9 - poziom) do begin if cols < 3 then inc(cols) else if (cols = 3) and (rows < 3) then begin cols := 1; inc(rows) end else if (cols = 3) and (rows = 3) then begin cols := 1; rows := 1 end; N_Wezel(pocz,nast,p_war,rows,cols,nr_pola,poziom,rot,znak,wezly,schow,tab_wag); inc(o1) end; dec(poziom) end end; procedure Wspolrzedne_Ruchu(pocz,nast: wsk_wezla; nr_n_pola:byte; znak: char; pocz_wiersz,pocz_kolumna: byte; var wag_tab: Tablica_Wynikow; var rozm: integer); var we_rows,we_cols: byte; begin we_rows := 1; we_cols := 1; Spr_Wyg(gra,we_rows,we_cols,X); if (we_rows < 4) and (we_cols < 4) then writeln('Wygrał: ',X) else begin we_rows := 1; we_cols := 1; Spr_Wyg(gra,we_rows,we_cols,O); if (we_rows < 4) and (we_cols < 4) then gra[we_rows,we_cols] := X else begin rotacja := 0; N_Wezel(pocz,nast,nr_n_pola,pocz_wiersz,pocz_kolumna,0,0, rotacja,znak,t_wezly,t_schowek,wag_tab); rozm := length(wag_tab) end end end; function Czy_Zajete(nr_indeks: byte; var optymalna: integer; var przechowywana: integer; opcja: byte; znak: char): boolean; var wr,kc: byte; begin Czy_Zajete := false; if nr_indeks mod 3 = 0 then begin wr := nr_indeks div 3; kc := 3 end else begin wr := (nr_indeks div 3) + 1; kc := nr_indeks mod 3 end; if opcja = 1 then begin if (gra[wr,kc] <> ' ') and ((wr <> 3) or (kc <> 3)) then optymalna := przechowywana; if (wr = 3) and (kc = 3) then Czy_Zajete := true end else if opcja = 2 then begin if gra[wr,kc] = ' ' then begin przechowywana := przechowywana + 1; Czy_Zajete := true end end else gra[wr,kc] := znak end; procedure Nowa_Tablica(var numery_pol: Tablica_Wynikow; opt_liczba,schowek: integer; var nowy_rozmiar: integer; znak: char); var lokalne_i: byte; begin nowy_rozmiar := 0; for lokalne_i := 1 to 9 do if numery_pol[lokalne_i] = opt_liczba then begin if Czy_Zajete(lokalne_i,opt_liczba,schowek,2,znak) then begin numery_pol[schowek] := lokalne_i; nowy_rozmiar := nowy_rozmiar + 1; if schowek <> lokalne_i then numery_pol[lokalne_i] := 0 end end else numery_pol[lokalne_i] := 0 end; procedure X_Y(nr_pola: byte); var pi,pj: byte; begin if nr_pola mod 3 = 0 then begin pi := nr_pola div 3; pj := 3 end else begin pi := (nr_pola div 3) + 1; pj := nr_pola mod 3 end; gra[pi,pj] := X end; procedure Indeksy_Tablicy(rezultat: Tablica_Wynikow; first_comp: boolean; s_x,s_y,licz_pol: byte; zacz_znak: char); var spr_liczba,pom_schowek,dl_tab: integer; proce_i,proce_j,start_pole: byte; begin spr_liczba := 0; obrona := first_comp; dl_tab := 0; for proce_i := 1 to 3 do begin for proce_j := 1 to 3 do begin start_pole := Nr_Wezla(proce_i,proce_j); if gra[proce_i,proce_j] = ' ' then break end; if gra[proce_i,proce_j] = ' ' then break end; Wspolrzedne_Ruchu(opcja,n_opcja,start_pole,zacz_znak,s_x,s_y,rezultat,dl_tab); writeln; for proce_i := 1 to 9 do write(rezultat[proce_i]:8); writeln; if obrona = false then begin proce_j := 1; spr_liczba := -10000; repeat for proce_i := proce_j to 9 do if spr_liczba < rezultat[proce_i] then begin pom_schowek := spr_liczba; spr_liczba := rezultat[proce_i]; proce_j := proce_i; if rezultat[proce_i] = 0 then break end; indeks := proce_i; proce_j := proce_j + 1 until Czy_Zajete(indeks,spr_liczba,pom_schowek,1,zacz_znak); if licz_pol >= 4 then if spr_liczba > 0 then for proce_i := 1 to 9 do if rezultat[proce_i] = 9 - licz_pol + 1 then spr_liczba := rezultat[proce_i] end else begin proce_j := 1; spr_liczba := rezultat[proce_j]; repeat for proce_i := proce_j to 9 do if spr_liczba > rezultat[proce_i] then begin pom_schowek := spr_liczba; spr_liczba := rezultat[proce_i]; proce_j := proce_i; if rezultat[proce_i] = 0 then break end; indeks := proce_i; proce_j := proce_j + 1 until Czy_Zajete(indeks,spr_liczba,pom_schowek,1,zacz_znak) end; if dl_tab <> 0 then begin dl_tab := 0; Nowa_Tablica(rezultat,spr_liczba,0,dl_tab,zacz_znak); writeln('Ewentualne numery pol od 1 do 9'); for proce_i := 1 to dl_tab do write(rezultat[proce_i]:4); randomize; spr_liczba := random(dl_tab) + 1; X_Y(rezultat[spr_liczba]) end end; procedure First_User; begin repeat opcja := nil; n_opcja := nil; gl := nil; New(opcja); New(gl); for i := 1 to 3 do for j := 1 to 3 do opcja^.plansza[i,j] := ' '; for i := 1 to 9 do begin t_wezly[i] := 0; t_schowek[i] := 0; Wyniki[i] := 0 end; opcja^.galez1 := nil; opcja^.galez2 := nil; opcja^.galez3 := nil; opcja^.galez4 := nil; opcja^.galez5 := nil; opcja^.galez6 := nil; opcja^.galez7 := nil; opcja^.galez8 := nil; opcja^.galez9 := nil; gl := opcja; l_win := 0; l_lost := 0; l_tie := 0; writeln('Podaj współrzędne: '); readln(i,j); gra[i,j] := O; writeln('Tablica po wstawieniu znaku przez gracza'); for wie := 1 to 3 do begin for kol := 1 to 3 do write(gra[wie,kol]:4); writeln end; zajete_pole := zajete_pole + 1; if zajete_pole = 1 then begin start_rows := i; start_cols := j end; if zajete_pole < 9 then begin Indeksy_Tablicy(Wyniki,true,start_rows,start_cols,zajete_pole,O); zajete_pole := zajete_pole + 1; writeln; writeln('Tablica po wstawieniu znaku przez komputer'); for i := 1 to 3 do begin for j := 1 to 3 do write(gra[i,j]:4); writeln end end until (Wyg(gra,X) = true) or (Wyg(gra,O) = true) or (zajete_pole = 9) end; procedure First_Comp; begin repeat opcja := nil; n_opcja := nil; gl := nil; New(opcja); New(gl); for i := 1 to 3 do for j := 1 to 3 do opcja^.plansza[i,j] := ' '; for i := 1 to 9 do begin t_wezly[i] := 0; t_schowek[i] := 0; Wyniki[i] := 0 end; opcja^.galez1 := nil; opcja^.galez2 := nil; opcja^.galez3 := nil; opcja^.galez4 := nil; opcja^.galez5 := nil; opcja^.galez6 := nil; opcja^.galez7 := nil; opcja^.galez8 := nil; opcja^.galez9 := nil; gl := opcja; l_win := 0; l_lost := 0; l_tie := 0; if zajete_pole = 0 then begin randomize; repeat start_rows := random(3) + 1; start_cols := random(3) + 1; until ((start_rows <> 2) and (start_cols <> 2)) or ((start_rows = 2) and (start_cols = 2)); gra[start_rows,start_cols] := X; writeln('Komputer zaczyna od pola: ',start_rows,' ',start_cols); zajete_pole := zajete_pole + 1 end else begin Indeksy_Tablicy(Wyniki,false,start_rows,start_cols,zajete_pole,X); zajete_pole := zajete_pole + 1; end; writeln; writeln('Tablica po wstawieniu znaku przez komputer'); for i := 1 to 3 do begin for j := 1 to 3 do write(gra[i,j]:4); writeln end; if (zajete_pole < 9) and (Wyg(gra,X) = false) then begin writeln('Podaj współrzędne: '); readln(i,j); gra[i,j] := O; zajete_pole := zajete_pole + 1; writeln('Tablica po wstawieniu znaku przez gracza'); for i := 1 to 3 do begin for j := 1 to 3 do write(gra[i,j]:4); writeln end end until (Wyg(gra,X) = true) or (Wyg(gra,O) = true) or (zajete_pole = 9) end; begin ClrScr; for i := 1 to 3 do for j := 1 to 3 do gra[i,j] := ' '; O := '0'; X := 'X'; { Można zamienić :) } zajete_pole := 0; { Liczba zajetych pól na planszy. } {First_User;} { pierwszy gracz } { Procedury można testować na zmianę komentując jedną a odkomentowując drugą.} First_Comp; { --||-- komputer } writeln('Koniec :)'); readln end.

Compiling Program...

Command line arguments:
Standard Input: Interactive Console Text
×

                

                

Program is not being debugged. Click "Debug" button to start program in debug mode.

#FunctionFile:Line
VariableValue
RegisterValue
ExpressionValue