Unit GameUnit; Interface Uses dataUnit; Procedure playLevel(Var theGS: dataUnit.GameState); Implementation Uses crt, Math, heroEnemy, toolsProc, moversProc; Procedure writeMap(Var theGS: dataUnit.GameState); Var col: integer; row: integer; Begin clrscr; For row := 1 To theGS.mapHeight Do Begin For col := 1 To theGS.mapWidth Do Write(theGS.map[row, col]); writeln; End; End; Procedure playLevel(Var theGS: dataUnit.GameState); Var move: boolean; Begin randomize; (* Game loop *) Repeat writeMap(theGS); gotoxy(1, theGS.mapHeight + 1); writeLn(theGS.ID,' Hint:', theGS.clue); gotoxy(theGS.manCol, theGS.manRow); (* Player turn *) Repeat move := True; Case readKey Of 'i': moveMan(theGS, -1, 0); 'j': moveMan(theGS, 0, -1); 'k': moveMan(theGS, 1, 0); 'l': moveMan(theGS, 0, 1); ' ': ; 'q': theGS.goal := -1; Else move := False; End; Until move; (* Update map *) doMagnet(theGS); moveMovers(theGS); moveEnemies(theGS); Until theGS.goal <=0; (* Win/Lose state *) writeMap(theGS); gotoxy(theGS.mapWidth Div 2 - 4, theGS.mapHeight Div 2); If theGS.goal = 0 Then Begin Write('You Win!'); End Else Write('You Lose!'); gotoxy(1, theGS.mapHeight + 2); writeLn('Press ENTER to continue.'); readLn; End; End.