GameEngine.Mod 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. MODULE GameEngine;
  2. IMPORT G := Graph, Random, Out, Strings;
  3. CONST
  4. maxMapW* = 128;
  5. maxMapH* = maxMapW;
  6. cellW* = 16;
  7. cellH* = cellW;
  8. tilesInRow* = 8;
  9. TYPE
  10. Cell* = RECORD (** A single cell of the map *)
  11. kind*: INTEGER
  12. END;
  13. Map* = RECORD
  14. w*, h*: INTEGER;
  15. cells*: ARRAY maxMapH, maxMapW OF Cell
  16. END;
  17. Game* = RECORD
  18. map*: Map
  19. END;
  20. VAR
  21. tiles*: G.Bitmap;
  22. PROCEDURE MakeRandomMap*(VAR map: Map; w, h: INTEGER);
  23. VAR x, y: INTEGER;
  24. BEGIN
  25. map.w := w; map.h := h;
  26. FOR y := 0 TO h - 1 DO
  27. FOR x := 0 TO w - 1 DO
  28. map.cells[y, x].kind := Random.Int(4)
  29. END
  30. END
  31. END MakeRandomMap;
  32. PROCEDURE LoadMap*(VAR map: Map; fname: ARRAY OF CHAR): BOOLEAN;
  33. BEGIN
  34. RETURN TRUE END LoadMap;
  35. PROCEDURE SaveMap*(VAR map: Map; fname: ARRAY OF CHAR);
  36. BEGIN
  37. END SaveMap;
  38. (** Returns a bitmap with the given name (appends strings to make a file name).
  39. On error sets ok to FALSE and ouputs an error message.
  40. Never sets ok to TRUE. *)
  41. PROCEDURE LoadBitmap(name: ARRAY OF CHAR; VAR ok: BOOLEAN): G.Bitmap;
  42. VAR bmp: G.Bitmap;
  43. s: ARRAY 256 OF CHAR;
  44. BEGIN
  45. s := 'Data/Graph/';
  46. Strings.Append(name, s);
  47. Strings.Append('.png', s);
  48. bmp := G.LoadBitmap(s);
  49. IF bmp = NIL THEN
  50. ok := FALSE;
  51. Out.String('Error: Could not load bitmap "');
  52. Out.String(s); Out.String('".'); Out.Ln
  53. END
  54. RETURN bmp END LoadBitmap;
  55. PROCEDURE InitGame*(VAR game: Game);
  56. BEGIN
  57. MakeRandomMap(game.map, 96, 96)
  58. END InitGame;
  59. PROCEDURE Init*(): BOOLEAN;
  60. VAR ok: BOOLEAN;
  61. BEGIN ok := TRUE;
  62. tiles := LoadBitmap('tiles', ok)
  63. RETURN ok END Init;
  64. END GameEngine.