当前位置: 首页 > news >正文

Python小游戏28——水果忍者

9fef9bb0b60d4e87a31f5319b3d5af52.png 

 

首先,你需要安装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父组件和子组件

子组件暴露方法给父组件&#xff0c;父组件传值 子组件 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 发行版中&#xff0c;Cron 服务通常已经默认安装。例如在 Ubuntu 系统中&#xff0c;可以通过以…...

XLNet——打破 BERT 局限的预训练语言模型

近年来&#xff0c;深度学习在自然语言处理&#xff08;NLP&#xff09;领域取得了革命性进展&#xff0c;其中 BERT 的出现标志着双向语言建模的强大能力。然而&#xff0c;BERT 也存在一些局限性&#xff0c;限制了其在生成任务中的表现。2019 年&#xff0c;由 Google 和 Ca…...

开源代码统计工具cloc的简单使用

一.背景 公司之前开发了个小系统&#xff0c;要去申请著作权&#xff0c;需要填写代码数量。应该怎么统计呢&#xff1f;搜索了一下&#xff0c;还是用开源工具cloc吧&#xff01;我的操作系统是windows&#xff0c;代码主要是java项目和vue项目。 二.到哪里找 可以去官方下载…...

如何创建一个项目用于研究element-plus的原理

需求&#xff1a;直接使用element-plus未封装成组件的源码&#xff0c;创建一个项目&#xff0c;可以使用任意的element-plus组件&#xff0c;可以深度研究组件的运行。例如研究某一个效果&#xff0c;如果直接在node_modules修改elment-plus打包之后的那些js、mjs代码&#xf…...

单片机进阶硬件部分_day2_项目实践

设计要求 从绘制原理图到画PCB板&#xff0c;完成智能云衣柜项目 STM32 &#xff08;Modbus&#xff09;云IOT衣物云端管理 华为PCB布线规范 基于IoT的智享家主控系统 步骤分析 需求分析 器件选型绘制原理图&#xff08;器件连接&#xff09;PCB布局、布线泪滴、铺铜、添加丝印…...

labview关于文件路径的问题

在调用文件或拆分文件的时候经常会用到拆分路径函数和创建路径函数&#xff0c;最常用的也是当前应用程序目录或者是当前VI目录。 这里我们看到应用程序目录和VI目录在同一项目中&#xff0c;应用程序目录更像是根目录&#xff0c;往下拆分成了各个VI的子目录。 接下来我们来拆…...

72项!湖北省2024年度第二批省级科技计划项目拟立项项目公示!

本期精选 SCI&EI ●IEEE 1区TOP 计算机类&#xff08;含CCF&#xff09;&#xff1b; ●EI快刊&#xff1a;最快1周录用&#xff01; 知网(CNKI)、谷歌学术期刊 ●7天录用-检索&#xff08;100%录用&#xff09;&#xff0c;1周上线&#xff1b; 免费稿件评估 免费匹配…...

神经网络问题之:梯度不稳定

梯度不稳定是深度学习中&#xff0c;特别是在训练深度神经网络时常见的一个问题&#xff0c;其本质涉及多个方面。 一、根本原因 梯度不稳定问题的根本原因在于深度神经网络的结构和训练过程中的一些固有特性。随着网络层数的增加&#xff0c;梯度在反向传播过程中会逐层累积变…...

ORACLE删不掉job,如何解决。

问题&#xff1a; 删掉 NYZSM 时出错&#xff1a; ORA-27478: 作业 “ZHY.NYZSM” 正在运行 ORA-06512: 在 “SYS.DBMS_ISCHED”, line 213 ORA-06512: 在 “SYS.DBMS_SCHEDULER”, line 657 ORA-06512: 在 line 2 1、停止作业&#xff1a; 使用DBMS_SCHEDULER.STOP_JOB过程来…...

可视化建模与UML《活动图实验报告》

你当像鸟飞往你的山。 一、实验目的&#xff1a; 1、熟悉活动图的基本功能和使用方法。 2、掌握使用建模工具软件绘制协作图的方法 二、实验环境&#xff1a; window7 | 10 | 11 EA15 三、实验内容&#xff1a; <1>绘制学生选课系统中添加课程(Add Course)用例的活动图…...

基于 MUSA 的大语言模型推理和服务框架vLLM

1. 引言​ vLLM是一个高性能且内存高效的大语言模型推理和服务框架&#xff0c;也是当前业界使用范围最广的大模型推理框架&#xff0c;截至目前github star数28.4k。该框架性能优秀&#xff0c;而且部署容易&#xff0c;使用CUDA/ROCm提供GPU加速能力。但vLLM目前不支持使用摩…...

鸿蒙网络编程系列48-仓颉版UDP回声服务器示例

1. UDP回声服务器简介 回声服务器指的是这样一种服务器&#xff0c;它接受客户端的连接&#xff0c;并且把收到的数据原样返回给客户端&#xff0c;本系列的第2篇文章《鸿蒙网络编程系列2-UDP回声服务器的实现》中基于ArkTS语言在API 9的环境下实现了UDP回声服务器&#xff0c…...

android-studio-4.2下载 、启动

下载 分享一个国内的android studio网站&#xff0c;可以下载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&#xff1a;多维数组&#xff0c;用于存储和操作数据 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无法生效的问题 解决办法&#xff1a; 在AndroidManifest.xml中添加&#xff1a; <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"…...

RabbitMQ实现异步下单与退单

前言&#xff1a; 在电商项目中的支付模块也是一个很重要的模块&#xff0c;其中下订操作以及退订操作就是主要的操作。其次的下单是同步下单&#xff0c;也就是第三方支付、数据库扣减、积分增加、等等其他业务操作&#xff0c;等待全部执行完毕后向用户返回成功响应请求。对…...

鸿蒙NEXT开发案例:随机数生成

【引言】 本项目是一个简单的随机数生成器应用&#xff0c;用户可以通过设置随机数的范围和个数&#xff0c;并选择是否允许生成重复的随机数&#xff0c;来生成所需的随机数列表。生成的结果可以通过点击“复制”按钮复制到剪贴板。 【环境准备】 • 操作系统&#xff1a;W…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 &#xff08;1&#xff09;输入单引号 &#xff08;2&#xff09;万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...

【Veristand】Veristand环境安装教程-Linux RT / Windows

首先声明&#xff0c;此教程是针对Simulink编译模型并导入Veristand中编写的&#xff0c;同时需要注意的是老用户编译可能用的是Veristand Model Framework&#xff0c;那个是历史版本&#xff0c;且NI不会再维护&#xff0c;新版本编译支持为VeriStand Model Generation Suppo…...

在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例

目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码&#xff1a;冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...