少儿编程分享:手把手教你用Python编写March英雄守卫(五)

少儿编程分享:手把手教你用Python编写March英雄守卫(五)
少儿编程分享:手把手教你用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的内容一一修改,优化程序运行。

(未完待续)

相关主题
相关文档
最新文档