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处理图片之PIL模块简单使用方法
May 11 Python
Python自定义主从分布式架构实例分析
Sep 19 Python
python实现简单聊天应用 python群聊和点对点均实现
Sep 14 Python
浅谈python中的正则表达式(re模块)
Oct 17 Python
Python实现1-9数组形成的结果为100的所有运算式的示例
Nov 03 Python
pandas重新生成索引的方法
Nov 06 Python
python+pyqt5实现24点小游戏
Jan 24 Python
Python远程视频监控程序的实例代码
May 05 Python
python打包exe开机自动启动的实例(windows)
Jun 28 Python
python 中xpath爬虫实例详解
Aug 26 Python
Python 微信公众号文章爬取的示例代码
Nov 30 Python
10个顶级Python实用库推荐
Mar 04 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+xslt在windows平台上
2006/10/09 PHP
php中批量替换文件名的实现代码
2011/07/20 PHP
php编写的简单页面跳转功能实现代码
2013/11/27 PHP
php实现redis数据库指定库号迁移的方法
2015/01/14 PHP
jQuery实现表格颜色交替显示的方法
2015/03/09 Javascript
jQuery网页右侧广告跟随滚动代码分享
2020/04/20 Javascript
详解 javascript中offsetleft属性的用法
2015/11/11 Javascript
jQuery实现的表头固定效果实例【附完整demo源码下载】
2016/08/01 Javascript
JS实现鼠标滑过显示边框的菜单效果
2016/09/21 Javascript
JavaScript事件用法浅析
2016/10/31 Javascript
jQuery Validate设置onkeyup验证的实例代码
2016/12/09 Javascript
bootstrap导航条实现代码
2016/12/28 Javascript
Nodejs高扩展性的模板引擎 functmpl简介
2017/02/13 NodeJs
javascript中mouseenter与mouseover的异同
2017/06/06 Javascript
vue2.0移除或更改的一些东西(移除index key)
2017/08/28 Javascript
jQuery实现的两种简单弹窗效果示例
2018/04/18 jQuery
详解redis在nodejs中的应用
2018/05/02 NodeJs
详解基于Vue2.0实现的移动端弹窗(Alert, Confirm, Toast)组件
2018/08/02 Javascript
使用vue-cli webpack 快速搭建项目的代码
2018/11/21 Javascript
vue+elementUi图片上传组件使用详解
2019/08/20 Javascript
vue组件库的在线主题编辑器的实现思路
2020/04/03 Javascript
简单了解three.js 着色器材质
2020/08/03 Javascript
Pycharm配置远程调试的方法步骤
2018/12/17 Python
Opencv-Python图像透视变换cv2.warpPerspective的示例
2019/04/11 Python
python 中的[:-1]和[::-1]的具体使用
2020/02/13 Python
使用 Python 在京东上抢口罩的思路详解
2020/02/27 Python
html5实现的便签特效(实战分享)
2013/11/29 HTML / CSS
美国领先的礼品卡网站:GiftCards.com
2016/11/02 全球购物
关于爱情的广播稿
2014/01/16 职场文书
商学院大学生求职的自我评价
2014/03/12 职场文书
大学社团计划书
2014/05/01 职场文书
员工趣味活动方案
2014/08/27 职场文书
银行授权委托书样本
2014/10/13 职场文书
工作作风懒散检讨书
2014/10/29 职场文书
自愿离婚协议书范本
2015/01/26 职场文书
教师节领导致辞
2015/07/29 职场文书