分享

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

 遁地的蜘猪侠 2018-02-19

让我们来进一步学习

March英雄守卫吧~

你,准备好了吗?

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

(March英雄用盾牌守护黑眼B来袭)

游戏介绍

March英雄守卫游戏中,玩家将亲手控制码趣队长在前方抵御MarchBOSS狂风暴雨般的袭击,并且在夹缝间拯救码趣小黄人抵达安全区域。当March英雄生命值小于60%时,游戏就会结束。让我们一起来保卫码趣家园吧!


TIPS

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

游戏中,MarchBOSS和码趣小黄人的速度会不断加速,数量也会不断增多,除了适应进攻的速度之外,更要留意不要误伤码趣小黄人~


模块切割

Button.py

Engine.py

Instruction.py

March.py

Marchboss.py

Marchcaptain.py

MarchHero.py

Scoreboard.py

Settings.py

继上一次小游戏的模块尝试,这次我们将模块更进一步细分,将程序分为这几大块,而主程序为MarchHero。


画布创建

MarchHero.py

1. import pygame

2. import sys

3.

4. def run_game():

5. # 屏幕大小颜色

6. screen_width, screen_height = 800, 600

7. bg_color = 150, 150, 150

8.

9. # 初始化游戏

10. pygame.init()

11. screen = pygame.display.set_mode( (screen_width, screen_height), 0, 32)

12.

13. # 主程序循环

14. while True:

15. # 循环检查

16. for event in pygame.event.get():

17. if event.type == pygame.QUIT:

18. sys.exit()

19.

20. # 重新绘制屏幕

21. screen.fill(bg_color)

22. pygame.display.flip()

23.

24. run_game()

首先是简单的初始化游戏,画布大小、背景颜色、主程序循环,这一步还是非常容易理解的。


绘制March

Marchboss.py

1. import pygame

2. from pygame.sprite import Sprite

3. from random import randint

4.

5. class Marchboss(Sprite):

6.

7. def __init__(self, screen):

8.

9. Sprite.__init__(self)

10. self.screen = screen

11. self.image = pygame.image.load('marchboss.png').convert_alpha()

12. self.image_w, self.image_h = self.image.get_size()

13. self.speed = 0.1

14.

15. self.x_position = randint(self.image_w/2, self.screen.get_width()-self.image_w/2)

16. self.y_position = self.screen.get_height() self.image_h/2

17.

18. def update(self, time_passed):

19. self.y_position -= self.speed * time_passed

20.

21. def blitme(self):

22. draw_pos = self.image.get_rect().move(self.x_position-self.image_w/2, self.y_position-self.image_h/2)

23. self.screen.blit(self.image, draw_pos)


MarchHero.py

1. import pygame

2. import sys

3. from Marchboss import Marchboss

4.

5. def run_game():

6. # 屏幕大小颜色

7. screen_width, screen_height = 800, 600

8. bg_color = 150, 150, 150

9.

10. # 初始化游戏

11. pygame.init()

12. screen = pygame.display.set_mode( (screen_width, screen_height), 0, 32)

13. clock = pygame.time.Clock()

14.

15. # 为Marchboss创建一个列表并包括第一个Marchboss

16. marchbosss = [Marchboss(screen)]

17.

18. # 主程序循环

19. while True:

20. time_passed = clock.tick(50)

21.

22. # 循环检查

23. for event in pygame.event.get():

24. if event.type == pygame.QUIT:

25. sys.exit()

26.

27. # 绘制画布

28. screen.fill(bg_color)

29.

30. # 更新Marchboss并绘制到画布上

31. for marchboss in marchbosss:

32. marchboss.update(time_passed)

33. marchboss.blitme()

34. if marchboss.y_position < -marchboss.image_h/2:

35. marchbosss.remove(marchboss)

36. marchbosss.append(marchboss(screen))

37.

38. pygame.display.flip()

39.

40. run_game()

在这里我们引入randint,创建Marchboss这个类,方便我们在后续可以添加更多的Marchboss而不用重复工作,首先我们在第9行初始化精灵,然后指引Marchboss要显示的地方并读取图片以及它的尺寸。第13行的self.speed则是Marchboss上升的初始速度。而之后的x_position,y_position则固定了Marchboss出现的位置,运用randint将Marchboss出现的初始位置设置在图片的二分之一大小的x坐标位置,以及屏幕大小减去图片二分之一大小的x坐标位置。y则是图片二分之一高度。

然后运用update使Marchboss随着时间加速,提高难度,而blitme则真正使Marchboss出现在画布上,而在这里我们要将Marchboss视为一个长方形,方便之后我们做碰撞处理。

同时,我们对主程序部分稍作修改,加入了clock变量引入时间,帮助计算气球的加速度,以及更新Marchboss的数量。并且我们要为Marchboss创建一个包括第一个Marchboss的列表,当它脱离屏幕时从列表中删除,否则每个Marchboss将无限上升。

最后利用循环绘制Marchboss并使用y坐标来判定是否移除Marchboss并添加新的Marchboss。而在接下来,我们将绘制我们的码趣英雄——码趣队长

未完待续)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约