import sys from typing import Any from .display.mapdisplay import MapDisplay from .display.menudisplay import MenuDisplay from .display.texturepack import TexturePack from .entities.player import Player from .interfaces import Map from .settings import Settings from enum import Enum, auto from . import menus class GameMode(Enum): MAINMENU = auto() PLAY = auto() SETTINGS = auto() INVENTORY = auto() class KeyValues(Enum): UP = auto() DOWN = auto() LEFT = auto() RIGHT = auto() ENTER = auto() class Game: def __init__(self) -> None: self.state = GameMode.MAINMENU self.main_menu = menus.MainMenu() self.settings = Settings() self.settings.load_settings() self.settings.write_settings() def new_game(self, screen: Any) -> None: # TODO generate a new map procedurally self.m = Map.load("example_map.txt") self.player = Player() self.player.move(1, 6) self.m.add_entity(self.player) self.menu_display = MenuDisplay(screen, self.main_menu, 0, 0) self.map_display = MapDisplay( screen, self.m, self.player, TexturePack.get_pack(self.settings.TEXTURE_PACK)) self.current_display = self.menu_display @staticmethod def load_game(filename: str) -> None: # TODO loading map from a file raise NotImplementedError() def run(self, screen: Any) -> None: while True: screen.clear() screen.refresh() # self.d.display(self.player.y, self.player.x) self.current_display.refresh() key = screen.getkey() self.handle_key_pressed(self.translate_key(key)) def translate_key(self, key: str) -> KeyValues: if key in (self.settings.KEY_DOWN_SECONDARY, self.settings.KEY_DOWN_PRIMARY): return KeyValues.DOWN elif key in (self.settings.KEY_LEFT_PRIMARY, self.settings.KEY_LEFT_SECONDARY): return KeyValues.LEFT elif key in (self.settings.KEY_RIGHT_PRIMARY, self.settings.KEY_RIGHT_SECONDARY): return KeyValues.RIGHT elif key in (self.settings.KEY_UP_PRIMARY, self.settings.KEY_UP_SECONDARY): return KeyValues.UP elif key == self.settings.KEY_ENTER: return KeyValues.ENTER def handle_key_pressed(self, key: KeyValues) -> None: if self.state == GameMode.PLAY: if key == KeyValues.UP: self.player.move_up() if key == KeyValues.DOWN: self.player.move_down() if key == KeyValues.LEFT: self.player.move_left() if key == KeyValues.RIGHT: self.player.move_right() if self.state == GameMode.MAINMENU: if key == KeyValues.DOWN: self.main_menu.go_down() if key == KeyValues.UP: self.main_menu.go_up() if key == KeyValues.ENTER: option = self.main_menu.validate() if option == menus.MainMenuValues.START: self.state = GameMode.PLAY self.current_display = self.map_display elif option == menus.MainMenuValues.SETTINGS: self.state = GameMode.SETTINGS elif option == menus.MainMenuValues.EXIT: sys.exit(0) self.current_display.refresh()