使用Python开发一个恐龙跑跑小游戏,玩起来
off999 2024-12-03 17:17 50 浏览 0 评论
相信很多人都玩过 chrome 浏览器上提供的恐龙跑跑游戏,在我们断网或者直接在浏览器输入地址“chrome://dino/”都可以进入游戏
今天我们就是用 Python 来制作一个类似的小游戏
素材准备
首先我们准备下游戏所需的素材,比如恐龙图片,仙人掌图片,天空,地面等等,我们统一放到 dino 文件夹下
游戏逻辑
我们使用 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)
接下来我们将各种素材加载进内存
# 加载正常恐龙
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')
这样,一个简单易用的恐龙跑跑游戏就完成了,我们来看下效果吧
好了,今天的分享就到这里,喜欢就点个赞吧
END
最近有一些小伙伴,让我帮忙找一些 学习资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是Python学习必备!
所有资料都整理到网盘了,需要的私信777获取!
相关推荐
- 数据网络打开了连不上网怎么回事
-
1、如您无法上网请尝试关机开机重启;请检查是否已达本月流量封顶阀值;请检查手机设置移动数据是否已打开;手机设置流动数据选项APN及名称是否设置为3gnet。2、如仍无法上网,建议您可通过以下方式进行排...
- synopsys软件(synthia软件)
-
PSIM是趋向于电力电子领域以及电机控制领域的仿真应用包软件。PSIM具有仿真高速、用户界面友好、波形解析等功能,为电力电子电路的解析、控制系统设计、电机驱动研究等有效提供强有力的仿真环境。本...
- cmd定时关机命令设置时间(cmd定时关机怎么设置)
-
在WindowsXP下打开C盘,在Windows下选system32中有一个shutdown的程序,可以复制到其它系统中。“开始”--->运行--->(在输入shutdown的命令)...
- 笔记本电脑开机就蓝屏(笔记本电脑开机就蓝屏了)
-
USB: 假如计算机处于开机的状态时USB接口上有U盘等存储设备,那么计算机就很有可能出现蓝屏现象,而且无法正常开机。因此,当计算机在开机时出现蓝屏状态时,我们首先要检查一下USB接口是否有接入U...
- 重置无线路由器(重置无线路由器密码)
-
1、将网线—路由器—电脑之间的线路连接好,启动电脑和路由器设备;2、启动设备后,打开浏览器,在地址栏中输入192.168.1.1进入无线路由器设置界面。(如进不了请翻看路由器底部铭牌或者是路由器使用说...
- win7系统整个界面变大(win7系统整个界面变大怎么办)
-
解决方法:1、首先查看当前系统的桌面图标情况,发现桌面图标突然变成了超大号的了。非常难看。2、右键点击桌面空白处,分别选择“查看”,“中等图标”。3、现在再查看桌面图标,发现已经恢复了。4、还有一种方...
- 电脑设置一切正常就是没声音
-
在电脑重置后没有声音的情况下,可能有以下几种可能的原因和解决方法:1.音频驱动程序问题:电脑重置后,可能需要重新安装或更新音频驱动程序。你可以尝试重新安装声卡驱动程序,可以从电脑或声卡制造商的官方网...
- eset nod32官网(esetnod32官网)
-
从系统性能上来说,卡巴斯基对系统的影响略大于ESETNOD32。具体表现就是,系统反应有所变慢,硬盘读写变频繁。从防护角度上来说的话……卡巴斯基的防护组件很多(商业版,免费版不在考虑范围之内),全开...
- 如何安装ie浏览器(怎么安装ie浏览器 win10)
-
方法一:一般系统自带的IE不能卸载和自己安装,如果是系统自带的可以还原系统或重装,也可用软件覆盖安装IE试试。使用系统自带的系统还原的方法:系统自带的系统还原:“开始”/“程序”/“附件”/“系统工具...
- 一键恢复桌面图标win7(一键恢复桌面图标win10)
-
Win7桌面图标设置: 1.在桌面上点击鼠标右键点击(其中查看菜单的子项是用来修改桌面图标的大小,如需修改图标大小只需在此菜单设置即可),选择“个性化”。2.在个性化设置窗口,单击左侧的更改桌面图...
- win7格式化电脑怎么弄
-
win7旧电脑想要格式化干净,具体方法如下:WIN7电脑利用鼠标点击我的电脑,找到C盘,鼠标右键选择格式化,这样就可以格式化,干干净净在Windows7中,您可以通过以下步骤来格式化计算机,而无需...
- 蓝牙适配器驱动安装教程(蓝牙适配器的驱动怎么安装)
-
1可以在官网或第三方软件平台下载相关驱动程序。2在安装驱动前,需要先确认你的蓝牙适配器的类型和型号,然后去对应的官网或者第三方软件平台下载最新的驱动。3安装驱动程序时需要注意,不能插拔蓝牙适配器...
- 手机上怎么设置wifi密码(手机上怎么设置wifi密码万能钥匙打不开)
-
已经安装和设置好的路由器,如果想用手机设置新的密码,可以按照下面的步骤进行操作: 1.首先,请确保你的手机连接到路由器的wifi网络,否则无法进行设置。 2.在路由器背面的铭牌中,查看路由器的登录...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
慕ke 前端工程师2024「完整」
-
失业程序员复习python笔记——条件与循环
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
