作者 | 周萝卜

来源 | 萝卜大杂烩

相信很多人都玩过 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 = Truebg_color = (218,220,225)ground_speed = 10# 设置重新再来图片screen.blit(restart, restart_rect)screen.blit(gameover, gameover_rect)pygame.display.update()

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

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

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

# 统计距离score += ground_speedscore_surface = my_font.render("Distance: "+str(score), True, text_color)# 计算最好成绩result_flag = Falseif score >= best:best = scoreresult_flag = Truebest_result = my_font.render("Best Result: " + str(best), True, text_color)

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

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

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

# 设置地面图片1screen.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 开发一个恐龙跑跑小游戏,玩起来相关推荐

  1. 使用Python开发一个恐龙跑跑小游戏,玩起来

    相信很多人都玩过 chrome 浏览器上提供的恐龙跑跑游戏,在我们断网或者直接在浏览器输入地址"chrome://dino/"都可以进入游戏 今天我们就是用 Python 来制作一 ...

  2. 使用Python开发一个恐龙跳跳小游戏,玩起来

    相信很多人都玩过 chrome 浏览器上提供的恐龙跑跑游戏,在我们断网或者直接在浏览器输入地址"chrome://dino/"都可以进入游戏 今天我们就是用 Python 来制作一 ...

  3. Python开发一个炸金花小游戏,注意别玩上瘾了

    众所周知扑克牌可谓是居家旅行.桌面交友的必备道具,今天我们用 Python 来实现一个类似炸金花的扑克牌小游戏,先来看一下基本的游戏规则. 炸(诈)金花又叫三张牌,是在全国广泛流传的一种民间多人纸牌 ...

  4. 用python开发一个炸金花小游戏,注意别玩上瘾了

    扑克牌可谓是居家旅行.桌面交友的必备道具,今天我们用 Python 来实现一个类似炸金花的扑克牌小游戏,先来看一下基本的游戏规则. 炸(诈)金花又叫三张牌,是在全国广泛流传的一种民间多人纸牌游戏.游戏 ...

  5. 熬了三个大夜利用Python开发一个炸金花小游戏,注意别玩上瘾了~~(附完整源码)

    大家好,我是你们的好朋友王老师~ 众所周知扑克牌可谓是居家旅行.桌面交友的必备道具,今天我们用 Python 来实现一个类似炸金花的扑克牌小游戏,先来看一下基本的游戏规则. 炸(诈)金花又叫三张牌, ...

  6. 用python开发一个炸金花小游戏,注意别玩上瘾了~~

    众所周知扑克牌可谓是居家旅行.桌面交友的必备道具,今天我们用 Python 来实现一个类似炸金花的扑克牌小游戏,先来看一下基本的游戏规则. 炸(诈)金花又叫三张牌,是在全国广泛流传的一种民间多人纸牌 ...

  7. 用python开发一个炸金花小游戏,注意别玩上瘾了~~(附完整源码)

    大家好,我是辰哥~ 众所周知扑克牌可谓是居家旅行.桌面交友的必备道具,今天我们用 Python 来实现一个类似炸金花的扑克牌小游戏,先来看一下基本的游戏规则. 炸(诈)金花又叫三张牌,是在全国广泛流 ...

  8. 从0到1使用python开发一个半自动答题小程序

    从0到1使用python开发一个半自动答题小程序 前言 最近每天都有玩微信读书上面的每日一答的答题游戏,完全答对12题后,可以瓜分无限阅读卡.但是从小就不太爱看书的我,很难连续答对12道题,由此,产生 ...

  9. Python 开发接豆人小游戏 TurnipBit

    Python 开发接豆人小游戏 TurnipBit 最近入手了一款MicroPython的开发板-TurnipBit,这个板子比较适合单片机入门,以及青少年编程,因为它有配备的在线图形编程. 官网地址 ...

最新文章

  1. 3. 5种常见卷积论文、解读、使用方法、实现代码整理(conv)
  2. NeHe教程Qt实现——lesson14
  3. SpringBoot | 第九章:Mybatis-plus的集成和使用
  4. redis 主从配置_Laravel 使用Redis缓存集群,主从集群配置就这么简单?
  5. flink的savepoints和checkpoints以及state Query(暂时无法全部完成)
  6. 6个经典的JavaScript报错分析
  7. oracle parallel_index hint在非分区表的生效
  8. blocked by CORS policy,是否跨域?
  9. 一键锁屏_ios快捷指令一键登录校园网(桂航为例,哆点认证)
  10. [QGLViewer]3D场景鼠标点击位置
  11. 【转】LDA数学八卦
  12. 利用vuex和localStorage实现vue菜单权限管理(笔记)
  13. 利用卷积自编码器对图片进行降噪
  14. 【Linux】Ubuntu18.04深度学习环境配置+Google+TIM+搜狗输入法等安装方法
  15. java倒叙遍历list
  16. SOLIDWORKS如何自动生成图纸
  17. 音频信号的基波、谐波
  18. 小孩上了半年小学,针对老师的评语总结,如何对症优化教育培养策略?chatGPT搜了一下,AI震惊了我
  19. java中创建dvd_JAVA简单模拟DVD功能
  20. 用python和ffmpeg批量合成bilibili缓存的m4s成mp4

热门文章

  1. 禁止蒙层底部页面跟随滚动
  2. PHP下载/采集远程图片到本地
  3. 让你提升命令行效率的 Bash 快捷键
  4. 文件操作01 - 零基础入门学习C语言60
  5. 自制程序清除系统垃圾文件
  6. 智能网联汽车高精地图白皮书(2020)
  7. 术语1----边界吸收
  8. 2009 Competition Highlights by ICPC Live
  9. 《少年先疯队》第九次团队作业:Beta冲刺第二天
  10. Djiango模板语言DTL