少儿编程分享:手把手教你用Python编写March英雄守卫(五)
游戏分享:手把手教你用Python编写
March英雄守卫(五)
2017.12.17
昨天我们完成了基本游戏架构
今天的任务很轻松
我们只需把游戏进行优化
我们的March英雄守卫就要上线啦!
(March英雄用盾牌守护黑眼B来袭)
*创建引擎*
Engine.py
1.import pygame,sys
2.from Marchboss import Marchboss
3.
4.class Engine():
5.
6.def__init__(self):
7.pass
8.
9.def release_batch(self,screen,settings,marchbosss):
10.for x in range(0,settings.batch_size):
11.self.spawn_marchboss(screen,settings,marchbosss)
12.
13.def check_marchbosss(self,marchbosss,marchcaptain,scoreboard, screen,settings,time_passed):
14.#记录Marchboss数据
15.#无论是消失于画板/被击杀的
16.for marchboss in marchbosss:
17.marchboss.update(time_passed)
18.
19.if marchboss.rect.colliderect(marchcaptain.rect):
20.self.pop_marchboss(scoreboard,settings,marchboss, marchbosss)
21.continue
22.
23.if marchboss.y_position<-
marchboss.image_h/2+settings.scoreboard_height:
24.self.miss_marchboss(scoreboard,marchboss,marchbosss)
25.self.spawn_marchboss(screen,settings,marchbosss)
26.continue
27.
28.marchboss.blitme()
29.
30.if scoreboard.marchbosss_missed>settings.misses_allowed:
31.#初始化游戏并停止游戏
32.settings.game_active=False
33.settings.games_played+=1
34.
35.def update_marchcaptain(self,marchcaptain,mouse_x,mouse_y, settings):
36.#绘制MarchCaptain及坐标
37.marchcaptain.x_position=mouse_x
38.if marchcaptain.grabbed:
39.marchcaptain.y_position=mouse_y
40.else:
41.marchcaptain.y_position
=marchcaptain.image_h/2+settings.scoreboard_height
42.marchcaptain.update_rect()
43.marchcaptain.blitme()
44.
45.def miss_marchboss(self,scoreboard,marchboss,marchbosss):
46.scoreboard.marchbosss_missed+=1
47.marchbosss.remove(marchboss)
48.
49.def pop_marchboss(self,scoreboard,settings,marchboss,marchbosss):
50.scoreboard.marchbosss_popped+=1
51.scoreboard.score+=settings.points_per_marchboss
52.marchbosss.remove(marchboss)
53.#在击杀足够多的Marchboss后增加重生量
54.if scoreboard.marchbosss_popped%settings.pops_needed==0:
55.settings.batch_size+=1
56.
57.def spawn_marchboss(self,screen,settings,marchbosss):
58.marchbosss.append(marchboss(screen,settings))
59.
60.def check_events(self,settings,scoreboard,marchcaptain,play_button, mouse_x,mouse_y,marchbosss):
61.for event in pygame.event.get():
62.if event.type==pygame.QUIT:
63.sys.exit()
64.if event.type==pygame.MOUSEBUTTONDOWN:
65.if marchcaptain.rect.collidepoint(mouse_x,mouse_y):
66.marchcaptain.grabbed=True
67.if play_button.rect.collidepoint(mouse_x,mouse_y):
68.#按钮按下时
69.#初始化并激活游戏
70.del marchbosss[:]
71.scoreboard.initialize_stats()
72.settings.initialize_game_parameters()
73.settings.game_active=True
74.if event.type==pygame.MOUSEBUTTONUP:
75.marchcaptain.grabbed=False
在这里我们将把主程序中的一系列模块整合出来作为engine,加快游戏的运行速度并美化代码,而为了程序的运行不受影响,我们必须将给所有def加上self参数,让这些函数明白自身是如何被调用的,并在check_events中增加游戏开始设定,保证在按下开始游戏按钮前后,游戏状态的初始化。
而在主程序中我们除了引用运行engine之外,添加了游戏开始和结束状态,并添加绘制了游戏开始和结束按钮,在主程序中将之前复制到engine的内容一一修改,优化程序运行。
(未完待续)