Coverage for src/glomph/main.py: 0%
44 statements
« prev ^ index » next coverage.py v7.10.7, created at 2025-10-06 00:58 +0800
« prev ^ index » next coverage.py v7.10.7, created at 2025-10-06 00:58 +0800
1"""Main entry point for Glomph Maze game."""
3import sys
4from pathlib import Path
6from glomph.game import Game
7from glomph.loaders import MazeLoader
8from glomph.renderer import get_renderer
9from glomph.terminal import get_terminal
12def main() -> int:
13 """Run the game."""
14 terminal = get_terminal()
16 # Get assets directory
17 assets_dir = Path(__file__).parent.parent.parent / "assets"
19 # Load a sample maze
20 loader = MazeLoader(assets_dir)
21 try:
22 mazes = loader.list_mazes()
23 if not mazes:
24 print("No mazes found!")
25 return 1
27 maze = loader.load(mazes[0])
28 print(f"Loaded maze: {mazes[0]} ({maze.width}x{maze.height})")
30 # Initialize game and renderer
31 game = Game(maze.width, maze.height)
32 game.load_maze(maze) # Load maze for collision detection
33 renderer = get_renderer()
35 # Demo game loop
36 with terminal.screen():
37 height, width = terminal.get_screen_size()
38 renderer.set_viewport(width, height)
40 while True:
41 renderer.clear()
43 # Render maze with current game state
44 renderer.render_maze(game)
46 # Render entities
47 renderer.render_entity(game.player)
48 renderer.render_entities(game.ghosts)
50 # Render UI
51 game_state = {
52 'level': game.level,
53 'score': game.player.score,
54 'lives': game.player.lives
55 }
56 renderer.render_ui(game_state)
58 # Draw instructions
59 terminal.draw_text(height - 2, 0, "Arrow keys: move P: pause ESC: quit", 7)
61 renderer.present()
63 # Handle input
64 key = terminal.wait_for_keypress()
65 if key == "escape":
66 break
67 elif key == "p":
68 game.pause_game()
69 elif key in ["up", "down", "left", "right"]:
70 game.move_player(key)
71 game.update()
73 except Exception as e:
74 print(f"Error: {e}")
75 return 1
77 return 0
80if __name__ == "__main__":
81 sys.exit(main())