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使用urllib2模块抓取HTML页面资源的实例分享
May 03 Python
CentOS中升级Python版本的方法详解
Jul 10 Python
Python编程之微信推送模板消息功能示例
Aug 21 Python
JSON文件及Python对JSON文件的读写操作
Oct 07 Python
Python3中exp()函数用法分析
Feb 19 Python
Python列表与元组的异同详解
Jul 02 Python
Python for i in range ()用法详解
Sep 18 Python
Win10环境中如何实现python2和python3并存
Jul 20 Python
Python基于traceback模块获取异常信息
Jul 23 Python
python实现ping命令小程序
Dec 28 Python
python利用后缀表达式实现计算器功能
Feb 22 Python
python实现调用摄像头并拍照发邮箱
Apr 27 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
用DBSQL类加快开发MySQL数据库程序的速度
2006/10/09 PHP
Jquery AutoComplete自动完成 的使用方法实例
2010/03/19 Javascript
妙用Jquery的val()方法
2012/06/27 Javascript
js中call与apply的用法小结
2013/12/28 Javascript
从零学JS之你需要了解的几本书
2014/05/19 Javascript
javascript控制在光标位置插入文字适合表情的插入
2014/06/09 Javascript
jQuery中children()方法用法实例
2015/01/07 Javascript
js实现Select列表各项上移和下移的方法
2015/08/14 Javascript
AngularJS实用开发技巧(推荐)
2016/07/13 Javascript
JS触发服务器控件的单击事件(详解)
2016/08/06 Javascript
微信小程序 wxapp画布 canvas详细介绍
2016/10/31 Javascript
基于JQuery及AJAX实现名人名言随机生成器
2017/02/10 Javascript
详解angular2实现ng2-router 路由和嵌套路由
2017/03/24 Javascript
Angular.js中下拉框实现渲染html的方法
2017/06/18 Javascript
浅谈Vue.js 1.x 和 2.x 实例的生命周期
2017/07/25 Javascript
详解AngularJS跨页面传值(ui-router)
2017/08/23 Javascript
SeaJS中use函数用法实例分析
2017/10/10 Javascript
Node.js搭建WEB服务器的示例代码
2018/08/15 Javascript
vue-drawer-layout实现手势滑出菜单栏
2020/11/19 Vue.js
Python解析最简单的验证码
2016/01/07 Python
Python实现曲线点抽稀算法的示例
2017/10/12 Python
Python中 map()函数的用法详解
2018/07/10 Python
在pycharm中使用git版本管理以及同步github的方法
2019/01/16 Python
在Python中预先初始化列表内容和长度的实现
2019/11/28 Python
Python中url标签使用知识点总结
2020/01/16 Python
python json.dumps中文乱码问题解决
2020/04/01 Python
Python通过Pillow实现图片对比
2020/04/29 Python
HTML5 新旧语法标记对我们有什么好处
2012/12/13 HTML / CSS
英国老牌潮鞋店:Offspring
2019/08/19 全球购物
公务员转正鉴定材料
2014/02/11 职场文书
幼儿园元旦亲子活动方案
2014/02/17 职场文书
颐和园导游词
2015/01/30 职场文书
美丽人生观后感
2015/06/03 职场文书
趣味运动会口号
2015/12/24 职场文书
大学生安全教育心得体会
2016/01/15 职场文书
python spilt()分隔字符串的实现示例
2021/05/21 Python