From 950578f9b88452cc2042831a50b4ea35aaa2f147 Mon Sep 17 00:00:00 2001 From: Timothy Warren Date: Thu, 6 Jan 2022 11:41:34 -0500 Subject: [PATCH] Add a game map --- game_map.py | 18 ++++++++++++++++++ tile_types.py | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 game_map.py create mode 100644 tile_types.py diff --git a/game_map.py b/game_map.py new file mode 100644 index 0000000..ad742ac --- /dev/null +++ b/game_map.py @@ -0,0 +1,18 @@ +import numpy as np # type: ignore +from tcod.console import Console + +import tile_types + +class GameMap: + def __init__(self, width: int, height: int): + self.width, self.height = width, height; + self.tiles = np.full((width, height), fill_value=tile_types.floor, order="F") + + self.tiles[30:33, 22] = tile_types.wall + + def in_bounds(self, x: int, y: int) -> bool: + """Return True if x and y are inside of the bounds of the map.""" + return 0 <= x < self.width and 0 <= y < self.height + + def render(self, console: Console): + console.tiles_rgb[0: self.width, 0: self.height] = self.tiles["dark"] \ No newline at end of file diff --git a/tile_types.py b/tile_types.py new file mode 100644 index 0000000..c44d1b9 --- /dev/null +++ b/tile_types.py @@ -0,0 +1,43 @@ +from typing import Tuple + +import numpy as np # type: ignore + +# Tile graphics structured type compatible with Console.tiles_rgb. +graphic_dt = np.dtype( + [ + ("ch", np.int32), # Unicode codepoint. + ("fg", "3B"), # 3 unsigned bytes, for RGB colors. + ("bg", "3B",) + ] +) + +# Tile struct used for statically defined tile data. +tile_dt = np.dtype( + [ + ("walkable", np.bool), # True if this tile can be walked over. + ("transparent", np.bool), # True if this tile doesn't block FOV. + ("dark", graphic_dt), # Graphics for when this tile is not in FOV. + ] +) + +def new_tile( + *, # Enforce the use of keywords, so that parameter order doesn't matter + walkable: int, + transparent: int, + dark: Tuple[int, Tuple[int, int, int], Tuple[int, int, int]] +) -> np.ndarray: + """Helper function for defining individual tile types""" + return np.array((walkable, transparent, dark), dtype=tile_dt) + + +floor = new_tile( + walkable=True, + transparent=True, + dark=(ord(" "), (255, 255, 255), (50, 50, 150)) +) + +wall = new_tile( + walkable=False, + transparent=False, + dark=(ord(" "), (255, 255, 255), (0, 0, 100)) +) \ No newline at end of file