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