{***************************************************************************} {* Umdrehen der Steine nach einem Zug *} {***************************************************************************} PROCEDURE SpielfeldNeu(VAR neu: Spielfeld; AmZug:Spieler; neuZug:Zug); TYPE Richtung = -1..1; VAR tpos : Zug; i, j : Richtung; umgedreht: integer; PROCEDURE check(rx, ry: Richtung; neuZug: Zug); VAR s,z : 0..maxzahl; geg, inRange: boolean; BEGIN tPos:=neuZug; geg:=false; WITH tPos DO BEGIN REPEAT Spalte:=Spalte+rx; Zeile :=Zeile +ry; inRange:=(Spalte IN [1..Groesse]) AND (Zeile IN [1..Groesse]); IF inRange THEN geg:=(neu[Spalte,Zeile]<>Gegner[AmZug]); UNTIL NOT(inRange) OR geg; IF inRange THEN IF neu[Spalte,Zeile]=AmZug THEN BEGIN S:=rx+neuZug.Spalte; Z:=ry+neuZug.Zeile; WHILE (Spalte<>S) OR (Zeile <>Z) DO BEGIN neu[S,Z]:=AmZug; S:=S+rx; Z:=Z+ry END END END END; {check} BEGIN FOR i:=-1 TO 1 DO FOR j:=-1 TO 1 DO check(i,j,neuZug); neu[neuZug.Spalte,neuZug.Zeile]:=AmZug END;