from terminal import Terminal from entity import Character, Player, Item from actions import * from floor import Floor, TileType TEXTURES = { TileType.WALL: '#', TileType.AIR: '.', Player: '@' } class Game: def __init__(self): self.term = Terminal() self.player = Player() self.floor = Floor(20, 10) self.should_exit = False def run(self): """ Runs the game """ self.floor.add_entity(3, 3, self.player) while not self.should_exit: self.render() self.get_event() self.step() def render(self): """ Renders the game """ for x in range(self.floor.width): for y in range(self.floor.height): if (x, y) in self.floor.entities[Character]: self.term.put_char(x, y, TEXTURES[Player]) elif (x, y) in self.floor.entities[Item]: self.term.put_char(x, y, 'i') else: self.term.put_char(x, y, TEXTURES[self.floor.get_tile(x, y)]) def step(self): """ Performs a turn in the game """ for (pos, character) in dict(self.floor.entities[Character]).items(): if isinstance(character.action, Move): character = self.floor.entities[Character].pop(pos) self.floor.add_entity(pos[0] + character.action.x, pos[1] + character.action.y, character) def get_event(self): """ Waits for a game event to happen """ keycode = self.term.get_key() if keycode == "q": self.should_exit = True elif keycode == "KEY_RIGHT": self.player.action = Move(1, 0) elif keycode == "KEY_LEFT": self.player.action = Move(-1, 0) elif keycode == "KEY_DOWN": self.player.action = Move(0, 1) elif keycode == "KEY_UP": self.player.action = Move(0, -1)