让我们来进一步学习
March英雄守卫吧~
你,准备好了吗?
(March英雄用盾牌守护黑眼B来袭)
游戏介绍March英雄守卫游戏中,玩家将亲手控制码趣队长在前方抵御MarchBOSS狂风暴雨般的袭击,并且在夹缝间拯救码趣小黄人抵达安全区域。当March英雄生命值小于60%时,游戏就会结束。让我们一起来保卫码趣家园吧!
游戏中,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()
首先是简单的初始化游戏,画布大小、背景颜色、主程序循环,这一步还是非常容易理解的。
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。而在接下来,我们将绘制我们的码趣英雄——码趣队长
(未完待续)
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved