-
Notifications
You must be signed in to change notification settings - Fork 0
/
__main__.py
85 lines (63 loc) · 2.51 KB
/
__main__.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
from enum import Enum, auto
from itertools import chain
from random import randint
import pyglet
from pyglet.gl import glEnable, GL_BLEND
from game import resources
from game.questionitem import SubmitStatus, CHANCES, symbol_range
from game.state import State, Screen
from game.views.gameview import GameView
from game.views.scoreview import ScoreView
from game.views.leaderboardview import LeaderBoardView
def run_cli_mode():
state = State()
state.reset()
while not state.gameover:
state.load_new_item()
while True:
print(f'Score: {state.score}')
state.item.log_state()
if state.is_end_game:
break
c = input('Enter char:').strip()
response = state.submit_char(c)
if response == SubmitStatus.SUCCESS:
state.increment_score()
print('=================')
class MainWindow(pyglet.window.Window):
def __init__(self):
super(MainWindow, self).__init__(1280, 720)
self.state = State()
self.game_view = GameView(self.state, self.width, self.height)
self.score_view = ScoreView(self.state, self.width, self.height)
self.leaderboard_view = LeaderBoardView(
self.state, self.width, self.height)
self.state.router.add_mapping(Screen.GAME, self.game_view)
self.state.router.add_mapping(Screen.SCORE, self.score_view)
self.state.router.add_mapping(
Screen.LEADERBOARD, self.leaderboard_view)
self.state.router.push(Screen.GAME)
def on_key_press(self, symbol, modifier):
if symbol == pyglet.window.key.ESCAPE:
pyglet.app.exit()
if self.state.router.route == Screen.GAME:
self.game_view.handle_game_key_press(symbol, modifier)
elif self.state.router.route == Screen.SCORE:
self.score_view.handle_key_press(symbol, modifier)
def on_text(self, text):
if self.state.router.route == Screen.SCORE:
self.score_view.handle_text(text)
def on_draw(self):
self.clear()
# RESOURCE: Blending PNG transparency
# https://stackoverflow.com/a/46048254
glEnable(GL_BLEND)
if self.state.router.route == Screen.GAME:
self.game_view.draw()
elif self.state.router.route == Screen.SCORE:
self.score_view.draw()
elif self.state.router.route == Screen.LEADERBOARD:
self.leaderboard_view.draw()
if __name__ == '__main__':
x = MainWindow()
pyglet.app.run()