MODULE PacMan; (* (C) Copyright 1996 by Roland Brand, Aarau *) IMPORT XYplane := oocXYplane ,Out := Console ,Grafik,RandomNumbers := ethRandomNumbers; TYPE figur=RECORD PosX,PosY,Richtung,Blick:INTEGER; END; CONST stop=0; links=1; rechts=2; hoch=3; runter=4; Bremse=100; VAR Feld:ARRAY 39,25 OF INTEGER; pcman,geistli,punkt,linie,kreuzung,ecke:Grafik.sprite; pcm:figur; geist: ARRAY 4 OF figur; score:LONGINT; AnzPunkte:INTEGER; PROCEDURE Initialisieren; VAR i,j:INTEGER; BEGIN XYplane.Clear; score:=0; FOR j:=0 TO 24 DO FOR i:=0 TO 38 DO Feld[i,j]:=0; END; END; FOR j:=0 TO 9 DO FOR i:=0 TO 9 DO pcman[i,j]:=FALSE; punkt[i,j]:=FALSE; linie[i,j]:=FALSE; kreuzung[i,j]:=FALSE; ecke[i,j]:=FALSE; END; END; pcman[4,0]:=TRUE; pcman[5,0]:=TRUE; FOR i:=3 TO 7 DO pcman[i,1]:=TRUE END; FOR i:=2 TO 9 DO pcman[i,2]:=TRUE END; FOR i:=1 TO 7 DO pcman[i,3]:=TRUE END; FOR i:=0 TO 6 DO pcman[i,4]:=TRUE END; FOR i:=0 TO 6 DO pcman[i,5]:=TRUE END; FOR i:=1 TO 7 DO pcman[i,6]:=TRUE END; FOR i:=2 TO 9 DO pcman[i,7]:=TRUE END; FOR i:=3 TO 7 DO pcman[i,8]:=TRUE END; pcman[4,9]:=TRUE; pcman[5,9]:=TRUE; FOR j:=0 TO 9 DO FOR i:=0 TO 9 DO geistli[i,j]:=TRUE; END; END; FOR i:=0 TO 3 DO geistli[i,9]:=FALSE; geistli[9-i,9]:=FALSE; END; geistli[0,8]:=FALSE; geistli[1,8]:=FALSE; geistli[8,8]:=FALSE; geistli[9,8]:=FALSE; geistli[0,7]:=FALSE; geistli[9,7]:=FALSE; geistli[3,6]:=FALSE; geistli[6,6]:=FALSE; geistli[2,1]:=FALSE; geistli[6,1]:=FALSE; FOR i:=1 TO 3 DO geistli[i,0]:=FALSE; geistli[9-i,0]:=FALSE; END; Feld[1,1]:=1; punkt[4,4]:=TRUE; punkt[5,4]:=TRUE; punkt[4,5]:=TRUE; punkt[5,5]:=TRUE; FOR i:=0 TO 9 DO linie[i,4]:=TRUE; linie[i,5]:=TRUE; kreuzung[i,4]:=TRUE; kreuzung[i,5]:=TRUE; kreuzung[4,i]:=TRUE; kreuzung[5,i]:=TRUE; END; FOR i:=0 TO 5 DO ecke[4,i]:=TRUE; ecke[5,i]:=TRUE; ecke[9-i,4]:=TRUE; ecke[9-i,5]:=TRUE; END; pcm.Blick:=rechts; END Initialisieren; PROCEDURE Bitmuster(a,b:INTEGER):BOOLEAN; (* prueft ob das b. Bit in a gesetzt ist und gibt in dem Fall true zurueck *) VAR c:INTEGER; BEGIN IF b<0 THEN Out.String("Fehler im Programm: Procedure Bitmuster"); HALT(35); END; IF a=ASH(1,b)) & (c