6.1 恐龙碰撞蜘蛛
1) 在恐龙类dino中添加检查是否与其他游戏物体碰撞的方法,代码如下:
`def check_collision(self, game_obj):` `"""` `检查是否与其他游戏物体碰撞了` `:param game_obj: 其他游戏物体` `:return: 是否碰撞到了` `"""` `if self.run: # 处于奔跑状态` `# 获取奔跑时的图片表面` `dino_mask = pygame.mask.from_surface(self.run_images[self.run_index])` `elif self.jump:` `# 获取跳跃时的图片表面` `dino_mask = pygame.mask.from_surface(self.jump_images[self.jump_index])` `else:` `# 获取站立时的图片表面` `dino_mask = pygame.mask.from_surface(self.idle_images[self.idle_index])` `# 获取其他游戏物体表面与当前表面的偏移量` `offset_0 = (game_obj.rect.left - self.rect.left, game_obj.rect.top - self.rect.top)` `# 判断是否碰撞到了` `collide = dino_mask.overlap(pygame.mask.from_surface(game_obj.current_image), offset_0)` `# 返回结果` `return collide`
2) 在game.py中添加控制游戏是否结束的变量:
3) 在game.py中的while循环里检测恐龙是否有撞到蜘蛛,如果撞到蜘蛛,结束游戏。具体代码如下:
4) 添加游戏结束条件,如果游戏结束,就停止恐龙、仙人掌、蜥蜴、星星的移动,换句话说这些游戏物体的移动仅仅在游戏没有结束的时候进行,代码如下:
6.2 恐龙碰撞仙人掌
在game.py文件的while循环中添加检测恐龙是否碰撞到仙人掌的代码,由于仙人掌有很多个,只要碰到其中一个仙人掌游戏就结束了。因此我们需要遍历所有的仙人掌,让每一个仙人掌都和恐龙做碰撞检测,一旦有碰上的就结束游戏,具体代码如下:
6.3 恐龙碰撞蜥蜴
碰撞蜥蜴的处理方式和碰撞仙人掌的处理方式一样,同样遍历所有的蜥蜴,看是否有蜥蜴和恐龙碰撞到了,如果有就结束游戏。
6.4 结束游戏界面展示
1) 新建一个game_over_screen.py文件,在其中新建一个GameOverScreen类,编写游戏结束面板,具体代码如下:
from config import *``from util import *`` `` ``class GameOverScreen:` `"""游戏结束面板类"""`` ` `def __init__(self,window):` `self.replay_image, self.rect = load_image("image/game_over/replay_0.png", 200, 60)` `self.rect.center = (SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2 + 30)` `self.window = window`` ` `def draw(self, m, score):` `"""` `绘图方法` `:param m: 跑了多少米` `:param score: 得了多少分` `:return:` `"""` `text_plane, text_rect = draw_text("GAME OVER", "font/northcliff_stencil.otf", 80, (255, 0, 0), SCREEN_WIDTH / 2, SCREEN_HEIGHT / 5,` `"midtop")` `self.window.blit(text_plane,text_rect)` `text_plane,text_rect = draw_text("你本次跑了" + str(m) + "米,共得" + str(score) + "分", "font/hxbsbt.otf", 60, (255, 0, 0), SCREEN_WIDTH / 2,` `SCREEN_HEIGHT / 3,"midtop")` `self.window.blit(text_plane, text_rect)` `self.window.blit(self.replay_image, self.rect)``
2) 在game.py中创建游戏结束面板,代码如下:
3) 如果游戏结束了,就绘制游戏结束面板
运行效果:
6.5 增加奔跑的距离和分数
增加奔跑的距离,我们的逻辑是,记录while循环执行的次数,每执行5次,奔跑的距离就加1,具体代码如下:
1)在while循环外面,增加记录while循环执行次数的变量
2)在游戏没有结束且恐龙处于奔跑的时候,记录次数,并实现响应的业务,具体代码如下:
6.5.2 增加分数
得分计算方式我们规定为:奔跑的距离 x 50+摘得星星数量 X 100
1) 我们添加恐龙摘星星的代码
由于星星数量很多,如果还是用以前的方式去做判断的话,需要遍历所有的星星。由于数量多导致检测的速度非常慢,最终导致游戏卡顿。接下来我们采用另一种检测碰撞的方式-精灵碰撞
首先我们让恐龙和星星类继承精灵类
其次,我们为星星创建精灵组,并将创建好的星星加入到精灵组中,具体代码如下:
接下来在while循环的外面定义一个记录摘得星星数量得变量,如下图所示:
然后,检测恐龙和星星精灵组的碰撞,代码如下:
最后我们调用星星下落的方法,让摘得星星之后,星星就下落:
*******关注公众号,更多技术教程免费看*******
往期教程:
【Python游戏开发】恐龙快跑-01-游戏框架搭建
点击下方安全链接前往获取
CSDN大礼包:《Python入门&进阶学习资源包》免费分享
👉Python实战案例👈
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
👉Python书籍和视频合集👈
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
👉Python副业创收路线👈
这些资料都是非常不错的,朋友们如果有需要《Python学习路线&学习资料》,点击下方安全链接前往获取
CSDN大礼包:《Python入门&进阶学习资源包》免费分享
本文转自网络,如有侵权,请联系删除。