【Python游戏开发】恐龙快跑-06-结束游戏和增加分数

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-游戏框架搭建

【Python游戏开发】恐龙快跑-02-背景绘制

【Python游戏开发】恐龙快跑-03-绘制分数和准备面板

【Python游戏开发】恐龙快跑-04-站立与奔跑功能

【Python游戏开发】恐龙快跑-05-增加障碍物

点击下方安全链接前往获取

CSDN大礼包:《Python入门&进阶学习资源包》免费分享

👉Python实战案例👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

图片

图片

👉Python书籍和视频合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

图片

👉Python副业创收路线👈

图片

这些资料都是非常不错的,朋友们如果有需要《Python学习路线&学习资料》,点击下方安全链接前往获取

CSDN大礼包:《Python入门&进阶学习资源包》免费分享

本文转自网络,如有侵权,请联系删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值