| (* Copyright (C) 2005-2026 Free Software Foundation, Inc. *) |
| (* This file is part of GNU Modula-2. |
| |
| GNU Modula-2 is free software; you can redistribute it and/or modify it under |
| the terms of the GNU General Public License as published by the Free |
| Software Foundation; either version 3, or (at your option) any later |
| version. |
| |
| GNU Modula-2 is distributed in the hope that it will be useful, but WITHOUT ANY |
| WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| for more details. |
| |
| You should have received a copy of the GNU General Public License along |
| with gm2; see the file COPYING. If not, write to the Free Software |
| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *) |
| DEFINITION MODULE AdvMap ; |
| |
| |
| EXPORT QUALIFIED Rooms, Line, DoorStatus, Door, Room, Treasure, |
| ActualNoOfRooms, MaxNoOfTreasures, MaxNoOfRooms, |
| NoOfRoomsToHidePlayers, NoOfRoomsToSpring, |
| NoOfRoomsToHideCoal, NoOfRoomsToHideGrenade, |
| ReadAdvMap, Adjacent, IncPosition, |
| FileName, MaxLengthOfFileName ; |
| |
| |
| CONST |
| MaxNoOfRooms = 350 ; (* An upper limit *) |
| WallsPerRoom = 8 ; (* An upper limit *) |
| DoorsPerRoom = 6 ; (* An upper limit *) |
| MaxNoOfTreasures = 15 ; (* An upper limit *) |
| MaxLengthOfFileName = 11 ; |
| NoOfRoomsToHidePlayers = 50 ; |
| NoOfRoomsToSpring = 50 ; |
| NoOfRoomsToHideCoal = 50 ; |
| NoOfRoomsToHideGrenade = 50 ; |
| |
| |
| TYPE |
| |
| Line = RECORD |
| X1 : CARDINAL ; |
| Y1 : CARDINAL ; |
| X2 : CARDINAL ; |
| Y2 : CARDINAL |
| END ; |
| |
| DoorStatus = (Open, Closed, Secret) ; |
| |
| Door = RECORD |
| Position : Line ; |
| StateOfDoor : DoorStatus ; |
| LeadsTo : CARDINAL |
| END ; |
| |
| TreasureInfo = RECORD |
| Xpos : CARDINAL ; |
| Ypos : CARDINAL ; |
| Rm : CARDINAL ; |
| Tweight : CARDINAL ; |
| TreasureName : ARRAY [0..12] OF CHAR |
| END ; |
| |
| Room = RECORD |
| RoomNo : CARDINAL ; |
| NoOfWalls : CARDINAL ; |
| NoOfDoors : CARDINAL ; |
| Walls : ARRAY [1..WallsPerRoom] OF Line ; |
| Doors : ARRAY [1..DoorsPerRoom] OF Door ; |
| Treasures : BITSET ; |
| END ; |
| |
| |
| |
| VAR |
| ActualNoOfRooms : CARDINAL ; |
| Treasure : ARRAY [1..MaxNoOfTreasures] OF TreasureInfo ; |
| Rooms : ARRAY [1..MaxNoOfRooms] OF Room ; |
| |
| FileName : ARRAY [0..MaxLengthOfFileName] OF CHAR ; |
| |
| |
| (* |
| ReadAdvMap - read map, Name, into memory. |
| TRUE is returned if the operation was successful. |
| *) |
| |
| PROCEDURE ReadAdvMap (Name: ARRAY OF CHAR) : BOOLEAN ; |
| |
| |
| (* |
| Adjacent - tests to see if two rooms are Adjacent to each other. |
| *) |
| |
| PROCEDURE Adjacent (R1, R2: CARDINAL) : BOOLEAN ; |
| |
| |
| (* |
| IncPosition - increments the position of x, y by the direction that are facing. |
| *) |
| |
| PROCEDURE IncPosition (VAR x, y: CARDINAL ; Dir: CARDINAL) ; |
| |
| |
| END AdvMap. |