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中由于logging模块误用导致的内存泄露
Apr 23 Python
python 添加用户设置密码并发邮件给root用户
Jul 25 Python
python开发利器之ulipad的使用实践
Mar 16 Python
Anaconda2下实现Python2.7和Python3.5的共存方法
Jun 11 Python
transform python环境快速配置方法
Sep 27 Python
python利用pandas将excel文件转换为txt文件的方法
Oct 23 Python
解决Pandas的DataFrame输出截断和省略的问题
Feb 08 Python
python requests模拟登陆github的实现方法
Dec 26 Python
pytorch 实现cross entropy损失函数计算方式
Jan 02 Python
Python学习之os模块及用法
Jun 03 Python
Pycharm学生免费专业版安装教程的方法步骤
Sep 24 Python
python中复数的共轭复数知识点总结
Dec 06 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中去除换行解决办法小结(PHP_EOL)
2011/11/27 PHP
教你如何在CI框架中使用 .htaccess 隐藏url中index.php
2014/06/09 PHP
php+jQuery+Ajax简单实现页面异步刷新
2016/08/08 PHP
Javascript 对象的解释
2008/11/24 Javascript
jfinal与bootstrap的登录跳转实战演习
2015/09/22 Javascript
深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性
2015/12/16 Javascript
jquery插件之文字间歇自动向上滚动效果代码
2016/02/25 Javascript
全面解析Bootstrap中form、navbar的使用方法
2016/05/30 Javascript
jQuery简单实现页面元素置顶时悬浮效果示例
2016/08/01 Javascript
BootStrap中Datepicker控件带中文的js文件
2016/08/10 Javascript
input file上传 图片预览功能实例代码
2016/10/25 Javascript
jQuery Ajax File Upload实例源码
2016/12/12 Javascript
详解使用JS如何制作简单的ASCII图与单极图
2017/03/31 Javascript
利用Vue实现移动端图片轮播组件的方法实例
2017/08/23 Javascript
微信小程序methods中定义的方法互相调用的实例代码
2018/08/07 Javascript
JS实现的新闻列表自动滚动效果示例
2019/01/30 Javascript
vue eslint简要配置教程详解
2019/07/26 Javascript
Vue指令之 v-cloak、v-text、v-html实例详解
2019/08/08 Javascript
JavaScript内置对象之Array的使用小结
2020/05/12 Javascript
Js图片点击切换轮播实现代码
2020/07/27 Javascript
[03:42]2014DOTA2国际邀请赛 第三日比赛排位扑朔迷离
2014/07/12 DOTA
将Django框架和遗留的Web应用集成的方法
2015/07/24 Python
Python3.5编程实现修改IIS WEB.CONFIG的方法示例
2017/08/18 Python
tensorflow实现测试时读取任意指定的check point的网络参数
2020/01/21 Python
python输出pdf文档的实例
2020/02/13 Python
Python读取表格类型文件代码实例
2020/02/17 Python
梵蒂冈和罗马卡:Omnia Card Pass
2018/02/10 全球购物
初始化了一个没有run()方法的线程类,是否会出错?
2014/03/27 面试题
委托书范文
2014/04/02 职场文书
党委书记个人检查对照材料思想汇报
2014/10/11 职场文书
5.12护士节活动总结
2015/02/10 职场文书
计划生育个人总结
2015/03/02 职场文书
2015年酒店客房部工作总结
2015/04/25 职场文书
银行服务理念口号
2015/12/25 职场文书
反邪教学习心得体会
2016/01/15 职场文书
vue实现列表拖拽排序的示例代码
2022/04/08 Vue.js