首页 > Python资料 博客日记
python谷歌浏览器dino游戏,完整开源代码
2025-01-14 18:30:06Python资料围观10次
文章python谷歌浏览器dino游戏,完整开源代码分享给大家,欢迎收藏Python资料网,专注分享技术知识
观前提示:本文选自作者个人博客,为获得更好观感,请访问博客得到更好体验)
说到google chrome,很多人都会想到它标志性的断网小游戏——chrome dino,今日,我们利用python还原并将代码开源,欢迎随时取用。话不多说,直接进入正题
实现效果
第一部分:配置环境
编译器:pycharm社区版2024.1
插件:pygame
导入所用库,没有的可以去下载,具体方法不多赘述,网上有
import pygame
import sys
import random
第二部分:设置基础变量
# 初始化pygame
pygame.init()
# 设置屏幕大小
screen_width = 800
screen_height = 400
screen = pygame.display.set_mode((screen_width, screen_height))
# 设置颜色
white = (255, 255, 255) # 背景颜色设置为白色
black = (0,0,0)
green = (0,255,0)
# 设置时钟
clock = pygame.time.Clock()
# 设置字体
font = pygame.font.Font(None, 50)
try:
dino_image = pygame.image.load('dino.png').convert_alpha()
cactus_image = pygame.image.load('cactus.png').convert_alpha()
# 缩小图像
scale_factor = 0.4 # 缩小因子
dino_image = pygame.transform.scale(dino_image, (int(dino_image.get_width() * scale_factor), int(dino_image.get_height() * scale_factor)))
cactus_image = pygame.transform.scale(cactus_image, (int(cactus_image.get_width() * scale_factor), int(cactus_image.get_height() * scale_factor)))
except pygame.error as e:
print(f"Cannot load image: {e}")
sys.exit()
本段第2,3行图片需要从网上找到恐龙和仙人掌图片后分别重命名为dino.png 和cactus.png,对应代码中的第2 3行,并且把图片和代码源文件放置在同一文件夹里面。如果嫌烦在本文结尾评论或者向我的邮箱 zhang@mrzxr.com zhang@mrzxr.com 任意 发邮件索要图片。会魔法的同志可通过文章末尾到github仓库直接下载完整代码和图片。
第三部分:加载角色类
class Dino(pygame.sprite.Sprite):
def __init__(self):
super(Dino, self).__init__()
self.image = dino_image
self.rect = self.image.get_rect()
self.rect.x = 100
self.rect.y = screen_height - self.rect.height - 50
self.gravity = 0.5
self.velocity_y = 0
self.jumping = False
self.jump_height = -18 # 跳跃高度
def update(self):
if self.jumping:
self.velocity_y += self.gravity
self.rect.y += self.velocity_y
if self.rect.bottom >= screen_height - self.rect.height:
self.velocity_y = 0
self.jumping = False
else:
self.velocity_y = 0
def jump(self):
if not self.jumping:
self.jumping = True
self.velocity_y = self.jump_height
# 障碍物类
class Obstacle(pygame.sprite.Sprite):
def __init__(self):
super(Obstacle, self).__init__()
self.image = cactus_image
self.rect = self.image.get_rect()
self.rect.x = screen_width
self.rect.y = screen_height - self.rect.height - 55 # 保持障碍物在屏幕底部的直线上
self.speed = 2.7
def update(self):
self.rect.x -= self.speed
if self.rect.x < -self.rect.width:
self.kill()
# 创建小恐龙实例
dino = Dino()
# 创建障碍物群组
obstacles = pygame.sprite.Group()
# 分数
score = 0
# 游戏状态
game_over = False
这一步中跳跃高度是我调教过的,可以自己更改,也可以搭配我提供的图片使用
第四部分:游戏主循环
# 游戏主循环
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
dino.jump()
# 更新小恐龙
dino.update()
# 更新障碍物
obstacles.update()
# 障碍物生成
if random.randint(1, 120) == 1 and not game_over: # 每120帧大约有1个障碍物生成
obstacles.add(Obstacle())
if random.randint (1,120) == 2 and not game_over:
obstacles.add = 1
# 碰撞检测
if pygame.sprite.spritecollide(dino, obstacles, False):
game_over = True
# 绘制背景
screen.fill(white)
# 绘制小恐龙
screen.blit(dino.image, dino.rect)
# 绘制障碍物
for obstacle in obstacles:
screen.blit(obstacle.image, obstacle.rect)
# 显示分数
score_text = font.render(f"Score: {int(score)}", True, black)
screen.blit(score_text, (10, 10))
# 更新屏幕显示
pygame.display.flip()
# 控制游戏帧率
clock.tick(60)
# 更新分数
if not game_over:
score += 0.1
# 游戏结束处理
if game_over:
screen.fill(black)
over_font = pygame.font.Font(None, 70)
over_text = over_font.render("Game Over", True, white)
over_rect = over_text.get_rect(center=(screen_width // 2, screen_height // 2))
screen.blit(over_text, over_rect)
pygame.display.flip()
pygame.time.wait(3000)
running = False
# 退出pygame
pygame.quit()
sys.exit()
这一部分需要注意的是:障碍物生成频率和帧率是调教过的,建议不要改,改了以后就会鬼畜一样几十个卡在一起出现,别问我怎么知道的。
一些链接
原文链接(作者博客):
github仓库:
本文完
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- 【Python】解决Python报错:AttributeError: ‘function‘ object has no attribute ‘xxx‘
- Windows配置pip安装llama-cpp-python出现错误问题
- 【Python】多人聊天室案例、生成器和迭代器
- Python KeyError 异常及其解决方法
- python 打包exe文件包
- 华为OD机试E卷 --计算疫情扩散时间--24年OD统一考试(Java & JS & Python & C & C++)
- 100 个 Python 小例子(练习题)
- python-kaggle商场顾客细分数据分析
- python 实现信号高通、低通、带通滤波处理代码,并画出滤波后的时域频域图
- 【实战】Python+OpenCV车道线检测识别项目:实现L2级别自动驾驶必备(配套课程+平台实践)
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Anaconda版本和Python版本对应关系(持续更新...)
- Python与PyTorch的版本对应
- Windows上安装 Python 环境并配置环境变量 (超详细教程)
- Python pyinstaller打包exe最完整教程