Python 恐龙跑跑小游戏实现流程


Posted in Python onFebruary 15, 2022

导语:

谷歌浏览器中有个很有名的彩蛋:当你网络出现问题时,就会出现一个“小恐龙游戏”。?

Python 恐龙跑跑小游戏实现流程

相信很多人都玩过 chrome 上提供的恐龙跑跑游戏,在我们断网或者直接在浏览器输入地址“chrome://dino/”都可以进入游戏。

Python 恐龙跑跑小游戏实现流程

今天我们就来给大家演示下,用Python来自己做一个仿制的“小恐龙游戏”!?

废话不多说,让我们愉快地开始吧~先给你们看一下运你效果???

Python 恐龙跑跑小游戏实现流程

正文:

开发工具:

Python版本:3.6.4

相关模块:

pygame模块;以及一些python自带的模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

在终端运行如下命令即可:

python Game7.py

素材准备

首先我们准备下游戏所需的素材,比如恐龙图片,仙人掌图片,天空,地面等等,我们统一放到 dino 文件夹下

Python 恐龙跑跑小游戏实现流程

游戏逻辑

我们使用 Pygame 来制作游戏,先进行游戏页面的初始化

import pygame
 
# 初始化
pygame.init()
pygame.mixer.init()
# 设置窗口大小
screen = pygame.display.set_mode((900, 200))
# 设置标题
pygame.display.set_caption("恐龙跳跳")
# 使用系统自带的字体
my_font = pygame.font.SysFont("arial", 20)
score = 0
# 背景色
bg_color = (218,220,225)

接下来,我们来考虑一下,游戏中有哪些游戏元素:

小恐龙:由玩家控制以躲避路上的障碍物;

路面:游戏的背景;

云:游戏的背景;

仙人掌:路上的障碍物之一,小恐龙碰上就会死掉;

记分板:记录当前的分数和历史最高分。

接下来我们将各种素材加载进内存

Python 恐龙跑跑小游戏实现流程

Python 恐龙跑跑小游戏实现流程

Python 恐龙跑跑小游戏实现流程

# 加载正常恐龙
dino_list = []
temp = ""
for i in range(1, 7):
    temp = pygame.image.load(f"dino/dino_run{i}.png")
    dino_list.append(temp)
dino_rect = temp.get_rect()
index = 0
 
# x 初始值
dino_rect.x = 100
# y 初始值
dino_rect.y = 150
# print(dino_rect)
 
# 设置y轴上的初速度为0
y_speed = 0
# 起跳初速度
jumpSpeed = -20
# 模拟重力
gravity = 2
 
 加载地面
ground = pygame.image.load("dino/ground.png")
 
# 加载仙人掌
cactus = pygame.image.load("dino/cactus1.png")
cactus_rect = cactus.get_rect()
cactus_rect.x,cactus_rect.y = 900,140
 
# 加载重新再来
restart = pygame.image.load("dino/restart.png")
restart_rect = restart.get_rect()
restart_rect.x,restart_rect.y = (900-restart.get_rect().width)/2,(200-restart.get_rect().height)/2+50
# 加载 gameover
gameover = pygame.image.load("dino/gameover.png")
gameover_rect = gameover.get_rect()
gameover_rect.x, gameover_rect.y = (
    900-gameover.get_rect().width)/2, (200-gameover.get_rect().height)/2
# 地面移动速度与距离
ground_speed = 10
ground_move_distance = 0
 
# 时钟
clock = pygame.time.Clock()
 
# 重新再来一次
is_restart = False
text_color = (0,0,0)

再接下来,我们通过一个 while 死循环来保持游戏进程

while True:
    # 每秒30次
    clock.tick(30)
    ...

在上面的循环当中,我们需要两个检测机制,事件检测和碰撞检测

事件检测

# 事件侦测
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            if result_flag:
                with open("result.ini", "w+") as f:
                    f.write(str(best))
            sys.exit()
        # 空格键侦测
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE and dino_rect.y==150:
                y_speed = jumpSpeed

主要检测退出事件和空格键事件

碰撞检测

# 碰撞检测
    if dino_rect.colliderect(cactus_rect):
        while not is_restart:
            # 事件侦测
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    if result_flag:
                        with open("result.ini", "w+") as f:
                            f.write(str(best))
                    sys.exit()
                # 空格键侦测
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_SPACE:
                        is_restart = True
                        bg_color = (218,220,225)
                        ground_speed = 10
            # 设置重新再来图片
            screen.blit(restart, restart_rect)
            screen.blit(gameover, gameover_rect)
            pygame.display.update()

对于碰撞,只要恐龙碰撞到了仙人掌,那么游戏结束,展示重新再来图片

由于我们希望游戏可以记录我们的最好成绩,所以这里使用了本地文件存储游戏记录的方式,当游戏结束的时候,根据当前游戏成绩来判断是否将新的成绩写入文件当中

下面是计算跑动距离和最好成绩的代码

# 统计距离
    score += ground_speed
    score_surface = my_font.render("Distance: "+str(score), True, text_color)
 
    # 计算最好成绩
    result_flag = False
    if score >= best:
        best = score
        result_flag = True
    best_result = my_font.render("Best Result: " + str(best), True, text_color)

我们还需要给不同距离增加不同的游戏难度,毕竟跑起来,肯定距离越远,难度越大嘛

# 更换背景色,成绩大于4000
    if score > 4000:
        bg_color = (55,55,55)
        ground_speed = 15
        text_color = (255,255, 255)
# 更换背景色,成绩大于8000
    if score > 8000:
        bg_color = (220,20,60)
        ground_speed = 20
        text_color = (255, 255, 255)
 
    # 更换背景色,成绩大于12000
    if score > 12000:
        bg_color = (25,25,112)
        ground_speed = 25
        text_color = (255, 255, 255)
 
    # 设置背景色
    screen.fill(bg_color)

最后我们将所有加载到内存当中的元素都呈现在 screen 上

# 设置地面图片1
    screen.blit(ground, (0-ground_move_distance, 180))
    # 设置地面图片2,在右边边界外
    screen.blit(ground, (900-ground_move_distance, 180))
    # 设置恐龙图片
    screen.blit(dino_list[index % 6], dino_rect)
    # 设置仙人掌图片
    screen.blit(cactus, cactus_rect)
    # 设置分数
    screen.blit(score_surface,(780,20))
    # 设置最好成绩
    screen.blit(best_result, (20, 20))
 
    pygame.display.update()

为了增加游戏性,我们再增加背景音乐和跳跃音效

pygame.mixer.music.load("background.mp3")
pygame.mixer.music.play(-1, 0)
sound = pygame.mixer.Sound('preview.mp3')

结尾:

这样,一个简单易用的恐龙跑跑游戏就完成了,今天的分享就到这里,喜欢就点个赞吧!

到此这篇关于Python 恐龙跑跑小游戏实现流程的文章就介绍到这了,更多相关Python 恐龙跑跑内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python实现同时给多个变量赋值的方法
Apr 30 Python
python实现根据主机名字获得所有ip地址的方法
Jun 28 Python
Python实现pdf文档转txt的方法示例
Jan 19 Python
python实现mysql的读写分离及负载均衡
Feb 04 Python
对Python 窗体(tkinter)树状数据(Treeview)详解
Oct 11 Python
python实现浪漫的烟花秀
Jan 30 Python
Python开发之Nginx+uWSGI+virtualenv多项目部署教程
May 13 Python
你可能不知道的Python 技巧小结
Jan 29 Python
对python中return与yield的区别详解
Mar 12 Python
使用python实现学生信息管理系统
Feb 25 Python
详解Django中的FBV和CBV对比分析
Mar 01 Python
解决pytorch-gpu 安装失败的记录
May 24 Python
详解Python+OpenCV进行基础的图像操作
Appium中scroll和drag_and_drop根据元素位置滑动
Feb 15 #Python
python 远程执行命令的详细代码
Feb 15 #Python
python 详解turtle画爱心代码
python分分钟绘制精美地图海报
基于PyQT5制作一个桌面摸鱼工具
Feb 15 #Python
python接口测试返回数据为字典取值方式
Feb 12 #Python
You might like
浅析php单例模式
2014/11/25 PHP
基于PHP技术开发客服工单系统
2016/01/06 PHP
Laravel的Auth验证Token验证使用自定义Redis的例子
2019/09/30 PHP
javaScript 读取和设置文档元素的样式属性
2009/04/14 Javascript
jquery构造器的实现代码小结
2011/05/16 Javascript
jQuery 关于伪类选择符的使用说明
2013/04/24 Javascript
js与jquery获取父级元素,子级元素,兄弟元素的实现方法
2014/01/09 Javascript
js函数名与form表单元素同名冲突的问题
2014/03/07 Javascript
jQuery实现统计复选框选中数量
2014/11/24 Javascript
使表格的标题列可左右拉伸jquery插件封装
2014/11/24 Javascript
浅析node.js中close事件
2014/11/26 Javascript
angularJS 如何读写缓冲的方法(推荐)
2016/08/06 Javascript
Bootstrap在线电子商务网站实战项目5
2016/10/14 Javascript
nodejs中全局变量的实例解析
2017/03/07 NodeJs
详解AngularJS ng-class样式切换
2017/06/27 Javascript
React Native之TextInput组件解析示例
2017/08/22 Javascript
vue favicon设置以及动态修改favicon的方法
2018/12/21 Javascript
Moment.js实现多个同时倒计时
2019/08/26 Javascript
vue子组件改变父组件传递的prop值通过sync实现数据双向绑定(DEMO)
2020/02/01 Javascript
js实现自动播放匀速轮播图
2020/02/06 Javascript
国内常用的js类库大全(CDN公共库)
2020/06/24 Javascript
python实现画圆功能
2018/01/25 Python
python颜色随机生成器的实例代码
2020/01/10 Python
如何基于python实现不邻接植花
2020/05/01 Python
完美解决keras 读取多个hdf5文件进行训练的问题
2020/07/01 Python
HTML文本属性&颜色控制属性的实现
2019/12/17 HTML / CSS
详解淘宝H5 sign加密算法
2020/08/25 HTML / CSS
美国最大的城市服装和运动鞋零售商:Jimmy Jazz
2016/11/19 全球购物
程序员跳槽必看面试题总结
2013/06/28 面试题
经典大学生求职信范文
2014/01/06 职场文书
工程资料员岗位职责
2014/03/10 职场文书
防邪知识进家庭活动方案
2014/08/26 职场文书
教师政风行风评议心得体会
2014/10/21 职场文书
考试没考好检讨书(精选篇)
2014/11/16 职场文书
消费者理赔投诉书
2015/07/02 职场文书
muduo TcpServer模块源码分析
2022/04/26 Redis