Python小游戏24——小恐龙躲避游戏
首先,你需要安装Pygame库。如果你还没有安装,可以通过以下命令安装:
【bash】
pip install pygame
- 【python】代码
import pygame
import random
# 初始化Pygame
pygame.init()
# 设置屏幕尺寸
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("恐龙躲避游戏")
# 颜色定义
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
# 恐龙类
class Dino:
def __init__(self):
self.image = pygame.image.load("dino.png").convert_alpha() # 加载恐龙图片,请确保图片在同一目录下
self.rect = self.image.get_rect()
self.rect.x = 50
self.rect.y = screen_height - self.rect.height - 50
self.speed = 5
def move(self):
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and self.rect.x > 0:
self.rect.x -= self.speed
if keys[pygame.K_RIGHT] and self.rect.x < screen_width - self.rect.width:
self.rect.x += self.speed
def draw(self, screen):
screen.blit(self.image, self.rect)
# 障碍物类
class Obstacle:
def __init__(self):
self.image = pygame.image.load("obstacle.png").convert_alpha() # 加载障碍物图片,请确保图片在同一目录下
self.rect = self.image.get_rect()
self.rect.x = random.randint(0, screen_width - self.rect.width)
self.rect.y = -self.rect.height
self.speed = 3
def move(self):
self.rect.y += self.speed
def draw(self, screen):
screen.blit(self.image, self.rect)
# 游戏主循环
def main():
clock = pygame.time.Clock()
dino = Dino()
obstacles = [Obstacle() for _ in range(5)] # 初始化5个障碍物
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 更新恐龙和障碍物位置
dino.move()
for obstacle in obstacles:
obstacle.move()
# 检查碰撞
if dino.rect.colliderect(obstacle.rect):
print("游戏结束!")
running = False
# 如果障碍物移出屏幕,则重新生成
for i, obstacle in enumerate(obstacles):
if obstacle.rect.y > screen_height:
obstacles[i] = Obstacle()
# 绘制背景(这里使用白色作为背景)
screen.fill(WHITE)
# 绘制恐龙和障碍物
dino.draw(screen)
for obstacle in obstacles:
obstacle.draw(screen)
# 更新屏幕
pygame.display.flip()
# 控制帧率
clock.tick(30)
pygame.quit()
if __name__ == "__main__":
main()
- 注意事项:
1. 你需要准备两张图片:dino.png(恐龙图片)和obstacle.png(障碍物图片),并将它们放在与代码相同的目录中。
2. 代码中使用了简单的碰撞检测逻辑。如果恐龙与障碍物碰撞,游戏将结束。
3. 你可以根据需要调整恐龙的速度、障碍物的速度、数量等参数。
- 涉及代码知识点总结
一、游戏初始化与配置
1. Pygame模块初始化:
• 使用pygame.init()初始化所有Pygame模块,这是在使用任何其他Pygame功能之前必须做的。
2. 游戏窗口创建:
• 使用pygame.display.set_mode(cfg.SCREENSIZE)根据配置文件cfg中指定的尺寸创建一个窗口,所有游戏图形都将在这个窗口中绘制。
3. 游戏窗口标题设置:
• 使用pygame.display.set_caption()设置游戏窗口的标题,该标题显示在窗口顶部。
4. 音效加载:
• 遍历cfg.AUDIO_PATHS字典,该字典包含游戏中使用的音效文件的名称和文件路径。
• 使用pygame.mixer.Sound加载音效文件到sounds字典中,以便在游戏过程中轻松访问和播放音效。
二、游戏元素定义与实现
1. 游戏元素类定义:
• 定义小恐龙、路面、云、飞龙、仙人掌等游戏元素类,每个类都继承自pygame.sprite.Sprite。
• 在每个类中定义__init__方法用于初始化游戏元素,包括加载图片、设置初始位置等。
• 定义update方法用于更新游戏元素的状态,如位置变化等。
• 定义draw方法用于将游戏元素绘制到屏幕上。
2. 障碍物移动与生成:
• 使用计时器控制障碍物的生成频率和移动速度。
• 在游戏循环中不断更新障碍物的位置,当障碍物到达屏幕左端时,将其位置重置到右端以循环出现。
3. 小恐龙跳跃与碰撞检测:
• 监听键盘事件,当按下空格键时触发小恐龙跳跃动作。
• 通过数学计算判断小恐龙的跳跃轨迹,包括起跳、上升、下降和落地等阶段。
• 使用pygame.sprite.spritecollide或rect.collidepoint()等方法进行碰撞检测,判断小恐龙是否与障碍物发生碰撞。
三、游戏逻辑与循环
1. 游戏主循环:
• 游戏主循环是游戏运行的核心,它不断监听并响应键盘和鼠标事件,更新游戏元素的状态,并绘制游戏画面。
• 在每一轮游戏循环中,首先更新所有游戏元素的状态(如障碍物移动、小恐龙跳跃等),然后进行碰撞检测,并根据检测结果更新游戏得分或结束游戏。
2. 得分机制:
• 定义一个得分变量用于记录游戏过程中的得分。
• 当小恐龙成功躲避障碍物时,增加得分。
• 在游戏结束界面显示最终得分。
3. 游戏结束与重新开始:
• 当小恐龙与障碍物发生碰撞时,游戏结束。
• 在游戏结束界面显示“Game Over”等提示信息,并提供重新开始或退出游戏的选项。
四、游戏优化与美化
1. 帧率控制:
• 使用pygame.time.Clock()创建一个时钟对象,用于限制游戏的帧率,确保游戏的运行速度保持在一定的范围内。
2. 游戏画面美化:
• 使用pygame.font模块加载字体并绘制文本信息,如游戏标题、得分等。
• 使用pygame.draw模块绘制简单的图形元素,如背景、边框等。
• 加载并使用游戏元素图片,使游戏画面更加生动和美观。
3. 音效与背景音乐:
• 在游戏过程中播放背景音乐和音效,增强游戏的沉浸感和趣味性。
相关文章:
Python小游戏24——小恐龙躲避游戏
首先,你需要安装Pygame库。如果你还没有安装,可以通过以下命令安装: 【bash】 pip install pygame 【python】代码 import pygame import random # 初始化Pygame pygame.init() # 设置屏幕尺寸 screen_width 800 screen_height 600 screen …...
Python 的多态笔记
Python的多态实际是通过instance 实现的 class Person:def __init__(self, name,age):self.name nameself.age agedef feed_pet(self,pet):#isinastance(obj,类)-->判断obj,是不是这个类的对象,或者判断obj是不是该类的子类的对象if isinstance(pet, Pet):sel…...
go module使用
go module介绍 go module是go官⽅⾃带的go依赖管理库,在1.13版本正式推荐使⽤ go module可以将某个项⽬(⽂件夹)下的所有依赖整理成⼀个 go.mod ⽂件,⾥⾯写⼊了依赖的版本等 使⽤ go module之后我们可不⽤将代码放置在src下了 使⽤ go module 管理依赖后会在项⽬根⽬录下⽣成…...
c ++零基础可视化——数组
c 零基础可视化 数组 一些知识: 关于给数组赋值,一个函数为memset,其在cplusplus.com中的描述如下: void * memset ( void * ptr, int value, size_t num );Sets the first num bytes of the block of memory pointed by ptr to…...
CVE-2024-2961漏洞的简单学习
简单介绍 PHP利用glibc iconv()中的一个缓冲区溢出漏洞,实现将文件读取提升为任意命令执行漏洞 在php读取文件的时候可以使用 php://filter伪协议利用 iconv 函数, 从而可以利用该漏洞进行 RCE 漏洞的利用场景 PHP的所有标准文件读取操作都受到了影响࿱…...
计算机组成原理笔记----基础篇
计算机系统硬件软件 软件 ├── 系统软件 │ ├── 操作系统 │ └── 工具软件 └── 应用软件├── 办公软件├── 媒体软件└── 浏览器软件硬件 ├── 计算机硬件 │ ├── 中央处理器(CPU) │ ├── 存储设备 │ │ ├── …...
TheadLocal出现的内存泄漏具体泄漏的是什么?弱引用在里面有什么作用?什么情景什么问题?
首先ThreadLocal是什么就不介绍了!这篇是讲讲里面的东西。 再简单说一下强引用和弱引用,举个例子,我们平常new出来的对象就是强引用的,在栈中有强引用,所以在gc的时候,堆中的实例对象不会被清除掉。 弱引…...
AI在电商平台中的创新应用:提升销售效率与用户体验的数字化转型
1. 引言 AI技术在电商平台的应用已不仅仅停留在基础的数据分析和自动化推荐上。随着人工智能的迅速发展,越来越多的电商平台开始将AI技术深度融合到用户体验、定价策略、供应链优化、客户服务等核心业务中,从而显著提升运营效率和用户满意度。在这篇文章…...
CTF-RE 从0到N:RC4
RC4加密算法简介 RC4是由Ron Rivest于1987年设计的一种流加密算法。它通过伪随机数生成器生成密钥流,并将该密钥流与明文进行异或运算来完成加密和解密。 RC4的加密流程 RC4主要包含两个阶段: 密钥调度算法 (Key Scheduling Algorithm, KSA)ÿ…...
HbuilderX 插件开发-模板创建
实现思路 使用HbuilderX 打开某个文档时右键点击的时候获取当前打开的文档内容使用 API 替换为自己的模板 示例 package.json {"id": "SL-HbuilderX-Tool","name": "SL-HbuilderX-Tool","description": "快速创建h…...
打造专业问答社区:Windows部署Apache Answer结合cpolar实现公网访问
文章目录 前言1. 本地安装Docker2. 本地部署Apache Answer2.1 设置语言选择简体中文2.2 配置数据库2.3 创建配置文件2.4 填写基本信息 3. 如何使用Apache Answer3.1 后台管理3.2 提问与回答3.3 查看主页回答情况 4. 公网远程访问本地 Apache Answer4.1 内网穿透工具安装4.2 创建…...
YOLO-SLD: An Attention Mechanism-ImprovedYOLO for License Plate Detection
摘要 车辆牌照检测在智能交通系统中发挥着关键作用。检测汽车、卡车和面包车等的牌照对于执法、监控和收费站操作非常有用。如何快速准确地检测牌照对牌照识别至关重要。然而,在现实世界复杂捕捉场景中,光照条件不均匀或牌照拍摄角度的倾斜会发生剧烈变…...
ArcGIS的汉字(亚洲文本)垂直标注
01 需求说明 实现ArcGIS的汉字(亚洲文本的垂直标注)。 启用 Maplex 标注引擎。 在标注 工具条上单击标注管理器按钮 。 选中要进行标注的图层旁边的复选框。 选择图层下方的标注分类。 单击符号。 选中 CJK 字符方向复选框。 仅当字体有垂直的文本度…...
【面试题】
1.UART 和 IIC 的区别 UART (Universal Asynchronous Receiver-Transmitter) 用途:用于异步串行通信。信号线:通常需要两根线(TX 和 RX),有时还需一根地线。通信方式:点对点。数据传输:单向或…...
Leetcode 寻找峰值
为了实现时间复杂度为 O ( log n ) O(\log n) O(logn),可以使用二分查找法: 解题思路: 峰值的特性是:当前元素大于左右相邻元素。使用二分法: 如果 nums[mid] > nums[mid 1],说明峰值在左侧或当前…...
探索大规模语言模型(LLM)在心理健康护理领域中的应用与潜力
概述 心理健康是公共卫生最重要的领域之一。根据美国国家精神卫生研究所(NIMH)的数据,到 2021 年,22.8% 的美国成年人将患上某种形式的精神疾病。在全球范围内,精神疾病占非致命性疾病负担的 30%,并被世界…...
Infisical开源密钥管理平台实战指南
1. 引言 在现代软件开发中,安全地管理环境变量和敏感信息已成为一个关键挑战。Infisical作为一个开源的密钥管理平台,为这一问题提供了强大而灵活的解决方案。本指南将深入探讨Infisical的功能,并通过实际操作步骤,帮助读者全面了解和使用这个工具。 2. Infisical概述 I…...
AI大模型:重塑软件开发流程与模式
人工智能技术的飞速发展,尤其是AI大模型的兴起,正以前所未有的速度和深度影响着各行各业,其中软件开发领域尤为显著。AI大模型,如GPT系列、BERT、Claude等通过其强大的自然语言处理能力、代码理解和生成能力,正在从根本…...
AMD(Xilinx) FPGA配置Flash大小选择
目录 1 FPGA配置Flash大小的决定因素2 为什么选择的Flash容量大小为最小保证能够完成整个FPGA的配置呢? 1 FPGA配置Flash大小的决定因素 在进行FPGA硬件设计时,选择合适的配置Flash是我们进行硬件设计必须考虑的,那么配置Flash大小的选择由什…...
基于Java Springboot图书借阅系统
一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 数据…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
OD 算法题 B卷【正整数到Excel编号之间的转换】
文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的:a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...
MySQL 主从同步异常处理
阅读原文:https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主,遇到的这个错误: Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一,通常表示ÿ…...
Monorepo架构: Nx Cloud 扩展能力与缓存加速
借助 Nx Cloud 实现项目协同与加速构建 1 ) 缓存工作原理分析 在了解了本地缓存和远程缓存之后,我们来探究缓存是如何工作的。以计算文件的哈希串为例,若后续运行任务时文件哈希串未变,系统会直接使用对应的输出和制品文件。 2 …...
Qt的学习(一)
1.什么是Qt Qt特指用来进行桌面应用开发(电脑上写的程序)涉及到的一套技术Qt无法开发网页前端,也不能开发移动应用。 客户端开发的重要任务:编写和用户交互的界面。一般来说和用户交互的界面,有两种典型风格&…...
