Universität Ulm, Fakultät für Mathematik und Wirtschaftswissenschaften, SAI

SS 99 || Ferienprojekt zu Allgemeine Informatik II || Puzzle Library

MODULE PuzzlePlayers


MODULE PuzzlePlayers;
   
   IMPORT ChessClocks, Objects, PersistentObjects, Puzzle, Services;

   TYPE
      Interface = POINTER TO InterfaceRec;

      Player = POINTER TO PlayerRec;
      PlayerRec =
	 RECORD
	    (Services.ObjectRec)
	    if: Interface;
	 END;

      MakeMoveProc = PROCEDURE(player: Player;
                               situation: Puzzle.Situation;
		               clock: ChessClocks.ChessClock; (* may be NIL *)
			       game: Services.Object;
			       VAR move: Puzzle.Move): BOOLEAN;

      AcceptProc = PROCEDURE(player: Player; game: Services.Object): BOOLEAN;

      GameOverProc = PROCEDURE(player: Player; game: Services.Object);

      InterfaceRec =
	 RECORD
	    (Objects.ObjectRec)
	    makeMove: MakeMoveProc;
	    accept: AcceptProc;
	    gameOver: GameOverProc;
	 END;
   
   PROCEDURE Init(player: Player; if: Interface);
      VAR
	 type: Services.Type;
   BEGIN
      ASSERT((if # NIL) & (if.makeMove # NIL));
      Services.GetType(player, type); ASSERT(type # NIL);
      player.if := if;
   END Init;

   PROCEDURE MakeMove(player: Player;
                      situation: Puzzle.Situation;
		      clock: ChessClocks.ChessClock; (* may be NIL *)
		      game: Services.Object;
		      VAR move: Puzzle.Move): BOOLEAN;
   BEGIN
      RETURN player.if.makeMove(player, situation, clock, game, move)
   END MakeMove;

   PROCEDURE Accept(player: Player; game: Services.Object): BOOLEAN;
   BEGIN
      RETURN player.if.accept(player, game)
   END Accept;

   PROCEDURE GameOver(player: Player; game: Services.Object);
   BEGIN
      player.if.gameOver(player, game);
   END GameOver;

   PROCEDURE InitModule;
      VAR type: Services.Type;
   BEGIN
      Services.CreateType(type, "PuzzlePlayers.Player", "");
   END InitModule;

BEGIN
   InitModule;
END PuzzlePlayers.

SS 99 || Ferienprojekt zu Allgemeine Informatik II || Puzzle Library

Andreas Borchert, 26. Juli 1999