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

1"""Main entry point for Glomph Maze game.""" 

2 

3import sys 

4from pathlib import Path 

5 

6from glomph.game import Game 

7from glomph.loaders import MazeLoader 

8from glomph.renderer import get_renderer 

9from glomph.terminal import get_terminal 

10 

11 

12def main() -> int: 

13 """Run the game.""" 

14 terminal = get_terminal() 

15 

16 # Get assets directory 

17 assets_dir = Path(__file__).parent.parent.parent / "assets" 

18 

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 

26 

27 maze = loader.load(mazes[0]) 

28 print(f"Loaded maze: {mazes[0]} ({maze.width}x{maze.height})") 

29 

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() 

34 

35 # Demo game loop 

36 with terminal.screen(): 

37 height, width = terminal.get_screen_size() 

38 renderer.set_viewport(width, height) 

39 

40 while True: 

41 renderer.clear() 

42 

43 # Render maze with current game state 

44 renderer.render_maze(game) 

45 

46 # Render entities 

47 renderer.render_entity(game.player) 

48 renderer.render_entities(game.ghosts) 

49 

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) 

57 

58 # Draw instructions 

59 terminal.draw_text(height - 2, 0, "Arrow keys: move P: pause ESC: quit", 7) 

60 

61 renderer.present() 

62 

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() 

72 

73 except Exception as e: 

74 print(f"Error: {e}") 

75 return 1 

76 

77 return 0 

78 

79 

80if __name__ == "__main__": 

81 sys.exit(main())