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