program tictactoe; uses crt; type TSpielfeldart = (S,C,L); const maxx=3; maxy=3; spielfeldpositionx =1; spielfeldpositiony =1; var feld :array[1..3,1..3] of TSpielfeldart; (* muss auf jeden fall vom Datentyp TSpielfeldart sein*) x, y :byte; posx, posy :byte; rposx, rposy :byte; key1, key2 :char; neu :char; voll, tests, testc :boolean; begin randomize; repeat clrscr; for x:=1 to maxx do for y:=1 to maxy do feld[x,y]:=L; clrscr; repeat for x:=1 to maxx do for y:=1 to maxy do begin gotoxy(x,y); case feld[x,y] of S: write('X'); C: write('O'); end; end; tests:=false; testc:=false; (* gotoxy(1,1); *) repeat key1:=upcase(readkey); case key1 of #0: begin key2:=readkey; case key2 of #72: if posy>1 then dec(posy); #80: if posy1 then dec(posx); end; end; end; gotoxy(posx,posy); until (key1='S') and (feld[posx,posy]=L); feld[posx,posy] := S; voll:=true; for x:=1 to maxx do for y:=1 to maxy do if feld[x,y]= L then voll:=false; if voll = false then repeat rposx:=random(maxx)+1; rposy:=random(maxy)+1; until feld[rposx,rposy] = L; feld[rposx,rposy] := C; (*Abfrage wo 3 X bzw 3 O in einer Reihe sind*) IF ((feld[1,1]=S) and (feld[2,1]=S) and (feld[3,1]=S)) THEN tests:=true; IF ((feld[1,1]=C) and (feld[2,1]=C) and (feld[3,1]=C)) THEN testc:=true; IF ((feld[1,2]=S) and (feld[2,2]=S) and (feld[3,2]=S)) THEN tests:=true; IF ((feld[1,2]=C) and (feld[2,2]=C) and (feld[3,2]=C)) THEN testc:=true; IF ((feld[1,3]=S) and (feld[2,3]=S) and (feld[3,3]=S)) THEN tests:=true; IF ((feld[1,3]=C) and (feld[2,3]=C) and (feld[3,3]=C)) THEN testc:=true; IF ((feld[1,1]=S) and (feld[1,2]=S) and (feld[1,3]=S)) THEN tests:=true; IF ((feld[1,1]=C) and (feld[1,2]=C) and (feld[1,3]=C)) THEN testc:=true; IF ((feld[2,1]=S) and (feld[2,2]=S) and (feld[2,3]=S)) THEN tests:=true; IF ((feld[2,1]=C) and (feld[2,2]=C) and (feld[2,3]=C)) THEN testc:=true; IF ((feld[3,1]=S) and (feld[3,2]=S) and (feld[3,3]=S)) THEN tests:=true; IF ((feld[3,1]=C) and (feld[3,2]=C) and (feld[3,3]=C)) THEN testc:=true; IF ((feld[1,1]=S) and (feld[2,2]=S) and (feld[3,3]=S)) THEN tests:=true; IF ((feld[1,1]=C) and (feld[2,2]=S) and (feld[3,3]=C)) THEN testc:=true; IF ((feld[3,1]=S) and (feld[2,2]=S) and (feld[1,3]=S)) THEN tests:=true; IF ((feld[3,1]=C) and (feld[2,2]=C) and (feld[1,3]=C)) THEN testc:=true; until (((tests = true) or (testc = true) and (voll = true)) or ((tests = true) or (testc = true) and (voll = false)) or ((testc = false) and (tests = false) and (voll = true))); (*Abfrage wer gewonnen hat*) IF ((tests = false) and (testc = false) and (voll = true)) then begin gotoxy(1,8); writeln('Unentschieden'); end; IF tests = true THEN begin gotoxy(1,8); writeln('Spieler hat gewonnen'); end; IF testc = true THEN begin gotoxy(1,8); writeln('Computer hat gewonnen'); end; writeln('Wollen sie nochmal Spielen? (J/ANYKEY)'); neu := upcase(readkey); until Neu <> 'J'; end.