天天看點

Control類

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: