Control 是狀态機類,main函數是遊戲的主循環,setup_states函數設定遊戲啟動時運作的狀态。
class Control():
def __init__(self):
self.screen = pg.display.get_surface()
self.done = False
self.clock = pg.time.Clock()
self.fps = 60
self.current_time = 0.0
self.keys = pg.key.get_pressed()
self.state_dict = {}
self.state_name = None
self.state = None
def setup_states(self, state_dict, start_state):
self.state_dict = state_dict
self.state_name = start_state
self.state = self.state_dict[self.state_name]
def main(self):
while not self.done:
self.event_loop()
self.update()
pg.display.update()
self.clock.tick(self.fps)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
event_loop函數負責監聽輸入(鍵盤輸入和退出按鈕),slef.keys 儲存鍵盤輸入。
update函數會檢測狀态的done值,調用狀态的更新函數。如果檢測到目前狀态結束,就調用flip_state函數進行舊狀态的清理操作,并轉換到下一個狀态。
def update(self):
self.current_time = pg.time.get_ticks(http://www.amjmh.com/v/)
if self.state.done:
self.flip_state()
self.state.update(self.screen, self.keys, self.current_time)
def flip_state(self):
previous, self.state_name = self.state_name, self.state.next
persist = self.state.cleanup()
self.state.startup(self.current_time, persist)
def event_loop(self):
for event in pg.event.get():
if event.type == pg.QUIT:
self.done = True
elif event.type == pg.KEYDOWN:
elif event.type == pg.KEYUP: