<> <> DIRECTORY PupTypes USING [PupHostID, PupNetID], Rope USING [ROPE]; TankMaster: DEFINITIONS = BEGIN OPEN Rope; WorldState: TYPE = REF WorldStateRec; WorldStateRec: TYPE = RECORD[ -- should be less than 256 words total (one packet) players: [0..maxPlayers] _ 0, tank: ARRAY [0..maxPlayers) OF Tank _ ALL[], torp: ARRAY [0..maxPlayers) OF Torp _ ALL[], score: ARRAY [0..maxPlayers) OF INTEGER _ ALL[0], address: ARRAY [0..maxPlayers) OF Machine _ ALL[[[0], [0]]]]; Machine: TYPE = MACHINE DEPENDENT RECORD[ -- Unambiguous name of a host net: PupTypes.PupNetID, host: PupTypes.PupHostID ]; maxPlayers: CARDINAL = 7; Tank: TYPE = RECORD[ dead, playing: BOOLEAN _ FALSE, angle: [0..512) _ 500, -- 500 => out of the game, 400 => unitialized x, y: INTEGER _ 0]; Torp: TYPE = MACHINE DEPENDENT RECORD[ state: CARDINAL _ 0, -- < 4 => exploding x, y: INTEGER _ 0]; AddPlayer: PROCEDURE[name: ROPE, address: Machine] RETURNS[ok: BOOLEAN, id: CARDINAL]; <> RemovePlayer: PROCEDURE[id: CARDINAL]; GetPlayer: PROCEDURE[id: CARDINAL] RETURNS[name: ROPE, address: Machine, score: INTEGER]; Update: PROCEDURE[id: CARDINAL, tank: Tank, torp: Torp] RETURNS[WorldStateRec]; <> <<>> ScoreHit: PROCEDURE[torp, target: CARDINAL]; END..