Python小游戏28——水果忍者
![]()
首先,你需要安装Pygame库。如果你还没有安装,可以使用以下命令进行安装:
【bash】
pip install pygame
- 《水果忍者》游戏代码:
【python】
import pygame
import random
import sys
# 初始化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)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
# 定义水果类
class Fruit:
def __init__(self):
self.image = pygame.image.load("fruit.png").convert_alpha() # 加载水果图片,需要有一张名为fruit.png的图片
self.rect = self.image.get_rect()
self.rect.x = random.randint(0, screen_width - self.rect.width)
self.rect.y = random.randint(-100, -40)
self.speed = random.randint(5, 10)
def update(self):
self.rect.y += self.speed
if self.rect.top > screen_height:
self.rect.x = random.randint(0, screen_width - self.rect.width)
self.rect.y = random.randint(-100, -40)
self.speed = random.randint(5, 10)
def draw(self, screen):
screen.blit(self.image, self.rect)
# 创建水果实例
fruits = [Fruit() for _ in range(5)]
# 定义玩家(鼠标)
player_rect = pygame.Rect(0, 0, 50, 10) # 假设玩家是一个50x10的矩形
# 游戏主循环
running = True
score = 0
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 获取鼠标位置
mouse_x, mouse_y = pygame.mouse.get_pos()
player_rect.centerx = mouse_x
player_rect.bottom = screen_height - 10
# 更新水果位置
for fruit in fruits:
fruit.update()
# 检测碰撞
for fruit in fruits:
if player_rect.colliderect(fruit.rect):
score += 1
fruits.remove(fruit)
fruits.append(Fruit()) # 重新生成一个水果
# 绘制屏幕
screen.fill(WHITE)
for fruit in fruits:
fruit.draw(screen)
pygame.draw.rect(screen, RED, player_rect)
# 显示分数
font = pygame.font.Font(None, 36)
text = font.render(f"Score: {score}", True, BLACK)
screen.blit(text, (10, 10))
# 更新屏幕
pygame.display.flip()
# 控制帧率
pygame.time.Clock().tick(60)
pygame.quit()
sys.exit()
- 注意事项:
1. 你需要有一张名为fruit.png的水果图片,并将其放在与你的Python脚本相同的目录中。
2. 这个示例代码使用了Pygame库来处理图形和事件。
3. 游戏的基本逻辑是:水果从屏幕上方随机位置落下,玩家(鼠标)需要“切割”到这些水果来增加分数。当水果与玩家(鼠标)碰撞时,分数增加,并重新生成一个新的水果。
4. 代码中的碰撞检测是通过player_rect.colliderect(fruit.rect)来实现的。
5. 你可以根据需要进一步扩展和改进这个游戏,例如添加更多的水果类型、音效、动画效果等。
《水果忍者》涉及编程知识点
1. 面向对象编程(OOP):
• 类的定义与实例化:通过定义类来创建游戏中的角色(如水果、玩家刀光等)和场景元素。
• 封装:将对象的属性和方法封装在类中,保护数据不被直接访问。
• 继承:使用pygame.sprite.Sprite作为基类,创建自定义的精灵类。
2. 模块与库:
• 导入标准库:如time、math、random等,用于时间控制、数学计算和随机数生成。
• 导入第三方库:pygame,用于游戏开发中的图形绘制、声音播放、事件处理等。
3. 事件处理:
• 事件监听:使用pygame.event.get()来捕获用户输入和游戏事件,如按键、鼠标点击等。
• 响应事件:根据捕获的事件类型,执行相应的操作,如移动角色、切割水果等。
4. 图形绘制:
• 图像加载:使用pygame.image.load()加载游戏所需的图像资源。
• 图像绘制:使用blit()方法将图像绘制到游戏窗口上。
• 图像旋转:使用pygame.transform.rotate()对图像进行旋转操作。
5. 随机数生成:
• 使用random库生成随机数,用于水果的随机位置、速度等属性的设置。
6. 计时与帧率控制:
• 使用pygame.time.Clock()控制游戏的帧率,确保游戏运行的平滑性。
7. 文件操作:
• 使用open()函数读取和写入文本文件,如保存和读取最佳分数等。
8. 碰撞检测:
• 检测玩家刀光与水果之间的碰撞,判断是否成功切割水果。
9. Sprite和Group:
• 使用pygame.sprite.Sprite创建精灵(如水果、刀光等)。
• 使用pygame.sprite.Group管理和更新多个精灵,方便批量处理。
10. 数学运算:
• 使用三角函数(如math.sin()和math.cos())计算水果的抛出轨迹等。
11. 音频处理:
• 使用pygame.mixer播放背景音乐和音效,增强游戏体验。
12. 逻辑控制:
• 实现游戏的核心逻辑,如水果的生成、玩家的切割操作、分数的计算等。
13. 字体与文本渲染:
• 使用pygame.font.Font()创建字体对象,并使用render()方法渲染文本以显示分数和信息。
相关文章:
Python小游戏28——水果忍者
首先,你需要安装Pygame库。如果你还没有安装,可以使用以下命令进行安装: 【bash】 pip install pygame 《水果忍者》游戏代码: 【python】 import pygame import random import sys # 初始化Pygame pygame.init() # 设置屏幕尺寸 …...
Kafka Offset 自动提交和手动提交 - 漏消费与重复消费
目录 1. 引言 2. Offset 提交方式概述 2.1 自动提交 Offset 2.2 手动提交 Offset 3. 漏消费与重复消费的问题分析 3.1 自动提交模式下的漏消费和重复消费 漏消费 重复消费 3.2 手动提交模式下的漏消费和重复消费 漏消费 重复消费 4. 自动提交与手动提交的选择 4.1…...
Vue3父组件和子组件
子组件暴露方法给父组件,父组件传值 子组件 const editCalendar (value: string) > {console.log(获取父组件的值, value)};//暴露给外部调用defineExpose({editCalendar,}); 父组件 <template> <CalendarEdit ref"editRef" /> </…...
Linux 定时任务全解析
文章目录 一、Cron 服务1.1安装1.2配置文件格式1.3使用方法1.4系统级与用户级 Cron 任务区别 二、At 服务2.1安装2.2工作原理2.3使用方法 一、Cron 服务 1.1安装 在大多数 Linux 发行版中,Cron 服务通常已经默认安装。例如在 Ubuntu 系统中,可以通过以…...
XLNet——打破 BERT 局限的预训练语言模型
近年来,深度学习在自然语言处理(NLP)领域取得了革命性进展,其中 BERT 的出现标志着双向语言建模的强大能力。然而,BERT 也存在一些局限性,限制了其在生成任务中的表现。2019 年,由 Google 和 Ca…...
开源代码统计工具cloc的简单使用
一.背景 公司之前开发了个小系统,要去申请著作权,需要填写代码数量。应该怎么统计呢?搜索了一下,还是用开源工具cloc吧!我的操作系统是windows,代码主要是java项目和vue项目。 二.到哪里找 可以去官方下载…...
如何创建一个项目用于研究element-plus的原理
需求:直接使用element-plus未封装成组件的源码,创建一个项目,可以使用任意的element-plus组件,可以深度研究组件的运行。例如研究某一个效果,如果直接在node_modules修改elment-plus打包之后的那些js、mjs代码…...
单片机进阶硬件部分_day2_项目实践
设计要求 从绘制原理图到画PCB板,完成智能云衣柜项目 STM32 (Modbus)云IOT衣物云端管理 华为PCB布线规范 基于IoT的智享家主控系统 步骤分析 需求分析 器件选型绘制原理图(器件连接)PCB布局、布线泪滴、铺铜、添加丝印…...
labview关于文件路径的问题
在调用文件或拆分文件的时候经常会用到拆分路径函数和创建路径函数,最常用的也是当前应用程序目录或者是当前VI目录。 这里我们看到应用程序目录和VI目录在同一项目中,应用程序目录更像是根目录,往下拆分成了各个VI的子目录。 接下来我们来拆…...
72项!湖北省2024年度第二批省级科技计划项目拟立项项目公示!
本期精选 SCI&EI ●IEEE 1区TOP 计算机类(含CCF); ●EI快刊:最快1周录用! 知网(CNKI)、谷歌学术期刊 ●7天录用-检索(100%录用),1周上线; 免费稿件评估 免费匹配…...
神经网络问题之:梯度不稳定
梯度不稳定是深度学习中,特别是在训练深度神经网络时常见的一个问题,其本质涉及多个方面。 一、根本原因 梯度不稳定问题的根本原因在于深度神经网络的结构和训练过程中的一些固有特性。随着网络层数的增加,梯度在反向传播过程中会逐层累积变…...
ORACLE删不掉job,如何解决。
问题: 删掉 NYZSM 时出错: ORA-27478: 作业 “ZHY.NYZSM” 正在运行 ORA-06512: 在 “SYS.DBMS_ISCHED”, line 213 ORA-06512: 在 “SYS.DBMS_SCHEDULER”, line 657 ORA-06512: 在 line 2 1、停止作业: 使用DBMS_SCHEDULER.STOP_JOB过程来…...
可视化建模与UML《活动图实验报告》
你当像鸟飞往你的山。 一、实验目的: 1、熟悉活动图的基本功能和使用方法。 2、掌握使用建模工具软件绘制协作图的方法 二、实验环境: window7 | 10 | 11 EA15 三、实验内容: <1>绘制学生选课系统中添加课程(Add Course)用例的活动图…...
基于 MUSA 的大语言模型推理和服务框架vLLM
1. 引言 vLLM是一个高性能且内存高效的大语言模型推理和服务框架,也是当前业界使用范围最广的大模型推理框架,截至目前github star数28.4k。该框架性能优秀,而且部署容易,使用CUDA/ROCm提供GPU加速能力。但vLLM目前不支持使用摩…...
鸿蒙网络编程系列48-仓颉版UDP回声服务器示例
1. UDP回声服务器简介 回声服务器指的是这样一种服务器,它接受客户端的连接,并且把收到的数据原样返回给客户端,本系列的第2篇文章《鸿蒙网络编程系列2-UDP回声服务器的实现》中基于ArkTS语言在API 9的环境下实现了UDP回声服务器,…...
android-studio-4.2下载 、启动
下载 分享一个国内的android studio网站,可以下载SDK和一些Android studio开发工具 https://www.androiddevtools.cn/ 启动 JAVA_HOME/app/zulu17.48.15-ca-jdk17.0.10-linux_x64/ /app5/android-studio-home/android-studio-ide-201.6568795-linux-4.2C1/bin/s…...
深度学习day2-Tensor 2
六 Tensor常见操作 Tensor:多维数组,用于存储和操作数据 1 获取元素值 data.item():单个元素tensor转为python数值 import torch #标量 xtorch.tensor(1) print(x.item()) #一阶 xtorch.tensor([100]) print(x.item()) #如果输入的数据超过1个&#…...
【Android踩过的坑】14.小米系统TTS无法生效的问题
【Android踩过的坑】14.小米系统TTS无法生效的问题 解决办法: 在AndroidManifest.xml中添加: <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"…...
RabbitMQ实现异步下单与退单
前言: 在电商项目中的支付模块也是一个很重要的模块,其中下订操作以及退订操作就是主要的操作。其次的下单是同步下单,也就是第三方支付、数据库扣减、积分增加、等等其他业务操作,等待全部执行完毕后向用户返回成功响应请求。对…...
鸿蒙NEXT开发案例:随机数生成
【引言】 本项目是一个简单的随机数生成器应用,用户可以通过设置随机数的范围和个数,并选择是否允许生成重复的随机数,来生成所需的随机数列表。生成的结果可以通过点击“复制”按钮复制到剪贴板。 【环境准备】 • 操作系统:W…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
webpack面试题
面试题:webpack介绍和简单使用 一、webpack(模块化打包工具)1. webpack是把项目当作一个整体,通过给定的一个主文件,webpack将从这个主文件开始找到你项目当中的所有依赖文件,使用loaders来处理它们&#x…...
负载均衡器》》LVS、Nginx、HAproxy 区别
虚拟主机 先4,后7...
