{***************************************************************************} {* Chip-Special-REVERSI *} {***************************************************************************} PROGRAM reversi; {Version vom Januar 1986 U.K.} {$C-} CONST maxzahl = 8; MaxZugTiefe = 10; weissZeichen = 'X'; schwarzZeichen = 'O'; TYPE Belegung = (leer, mensch, computer); Spieler = mensch..computer; SpielFeld = ARRAY[1..maxzahl,1..maxzahl] OF Belegung; Zug = RECORD Spalte, Zeile: byte END; ZugListe = RECORD Anzahl: byte; Zuege: ARRAY[1..31] OF Zug END; VAR Feld : SpielFeld; Steine : ARRAY[Belegung] OF integer; MenschZeichen, Eingabe, ComputerZeichen : char; wZug : Zug; Player : Spieler; MZugListe : Zugliste; ZugNummer : byte; LEVEL : 0..9; Groesse : 4..maxzahl; KannNicht : ARRAY[Spieler] OF boolean; Spiel : ARRAY[0..64] OF SpielFeld; CONST Gegner : ARRAY[Spieler] OF Spieler = (computer,mensch); Kann : ARRAY[Spieler] OF boolean = (true,true); {$I FELDAUS.INC} {$I UMDREHEN.INC} {$I ZUGGEN.INC} {$I SUCHZUG.INC} {$I ZUEGE.INC} {$I SPIELPAR.INC} {***************************************************************************} {* Das Hauptprogramm *} {***************************************************************************} BEGIN REPEAT StartAngaben; ClrScr; randomize; LowVideo; gotoxy(50,18); write(ComputerZeichen,': Computer'); gotoxy(50,17); write(MenschZeichen, ': Mensch '); gotoxy(45,20); write('R)ueck, V)orschlag, L)evel, W)ert'); ZugNummer:=0; gotoxy(50,3); write('Am Zug ist'); NeuesSpielfeld(Feld); SchreibSpielfeld(Feld); Spiel[0]:=Feld; lowvideo; gotoxy(1,1); write('LEVEL',LEVEL:2); gotoxy(45,22); write('Analysierte Stellungen :'); REPEAT SchreibZugNummer(ZugNummer); normvideo; gotoxy(1,24); ClrEol; gotoxy(62,3); IF Player=Computer THEN write(ComputerZeichen) ELSE write(MenschZeichen); kann[Player]:=KannZiehen(Player,MZugListe); IF kann[Player] THEN BEGIN CASE Player OF computer: ComputerZug(wZug,MZugListe); mensch : MenschenZug(wZug,MZugListe) END; SpielFeldNeu(Feld,Player,wZug); SchreibSpielfeld(Feld) END ELSE BEGIN gotoxy(50,4); write('Kann nicht ziehen! '); read(kbd,Eingabe); gotoxy(50,4); ClrEol END; Player:=Gegner[Player]; ZugNummer:=succ(ZugNummer); Spiel[ZugNummer]:=Feld UNTIL SpielEnde(Feld) OR NOT(kann[Player] OR kann[Gegner[Player]]); Abrechnung(true); read(kbd,Eingabe) UNTIL Eingabe=^C; ClrScr END.