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()方法渲染文本以显示分数和信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/59830.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot的养老院管理系统+文档

💗博主介绍💗:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

智能购物时代:AI在电商平台的革命性应用

在当今数字化时代,人工智能(AI)技术已成为推动电商行业发展的关键力量。AI技术的应用不仅改变了电商的运营模式,还极大地丰富了消费者的购物体验。随着技术的不断进步,AI在电商领域的应用越来越广泛,从个性…

卷积、频域乘积和矩阵向量乘积三种形式之间的等价关系与转换

线性移不变系统 线性移不变系统(Linear Time-Invariant System, LTI系统)同时满足线性和时不变性两个条件。 线性:如果输入信号的加权和通过系统后,输出是这些输入信号单独通过系统后的输出的相同加权和,那么该系统就…

基于51单片机的电子钟+秒表LCD1602仿真设计

电子钟秒表 0. 设计资料内容清单&&下载链接1. 主要功能:2. 讲解视频:3. 仿真4. 程序代码5. 设计报告6. 原理图 基于51单片机的电子钟秒表LCD1602仿真设计( proteus仿真程序设计报告原理图讲解视频) 仿真图proteus7.8及以上 程序编译…

unity 3d到idea

第一步,确保jdk,sdk,gradle版本一致 unity 3d的配置 idea配置 第二步,整个unity导出安卓项目到idea idea配置项目(修改gradl配置) gradle配置代码 distributionUrlhttps\://services.gradle.org/distributions/gradle-8.7-bin.z…

要查看你的系统是 x64(64位)还是 x86(32位),可以按照以下步骤操作

文章目录 1. 通过“系统信息”查看系统架构2. 通过“设置”查看系统架构3. 通过命令提示符查看系统架构4. 通过 PowerShell 查看系统架构5. 通过文件资源管理器查看系统架构总结 要查看你的系统是 x64(64位)还是 x86(32位)&…

ARM 汇编指令

blr指令的基本概念和用途 在 ARM64 汇编中,blr是 “Branch with Link to Register” 的缩写。它是一种分支指令,主要用于跳转到一个由寄存器指定的地址,并将返回地址保存到链接寄存器(Link Register,LR)中。…

手机ip地址异常怎么解决

在现代社会中,手机已成为我们日常生活中不可或缺的一部分,无论是工作、学习还是娱乐,都离不开网络的支持。然而,有时我们会遇到手机IP地址异常的问题,这不仅会影响我们的网络体验,还可能带来安全隐患。本文…

【Linux系统编程】第四十七弹---深入探索:POSIX信号量与基于环形队列的生产消费模型实现

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、POSIX信号量 2、基于环形队列的生产消费模型 2.1、代码实现 2.1.1、RingQueue基本结构 2.1.2、PV操作 2.1.3、构造析构…

炼码LintCode--数据库题库(级别:入门;数量:144道)--刷题笔记_01

目录 炼码LintCode--数据库题库(级别:入门;数量:144道)--刷题笔记_01入门级别的笔记CRUD基本函数及语法汇总事务锁视图 炼码LintCode–数据库题库(级别:入门;数量:144道&…

本地部署Apache Answer搭建高效的知识型社区并一键发布到公网流程

文章目录 前言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 创建…

Argo workflow 拉取git 并使用pvc共享文件

文章目录 拉取 Git 仓库并读取文件使用 Kubernetes Persistent Volumes(通过 volumeClaimTemplates)以及任务之间如何共享数据 拉取 Git 仓库并读取文件 在 Argo Workflows 中,如果你想要一个任务拉取 Git 仓库中的文件,另一个任…

Jmeter中的后置处理器(三)

9--XPath2 Extractor 功能特点 数据提取:使用 XPath2 表达式从 XML 响应中提取特定的数据。动态参数传递:将提取的数据存储为变量,供后续请求使用。支持丰富的表达式:支持复杂的 XPath2 表表达式,提供丰富的数据提取…

【MySQL-1】MySQL数据库的基本操作

目录 1. 整体学习思维导图 2. 数据库的创建 2.1 创建一个数据库 2.2 创建一个指定字符集和校验规则的数据库 3. 字符集和校验规则 3.1 查看系统默认字符集以及校验规则 3.2 查看数据库所支持的字符集和校验规则 3.3 不同校验规则所带来的影响 4. 操作数据库 4.1查…

UE5遇到问题记录—在sequence制作时如何让角色隐藏/显示?

遇到问题: 在sequence制作时如何让角色隐藏/显示? 解决办法: 在角色通道添加轨道:actor hide in game即可,添加后有可视性,打勾或者取消来控制角色的可见性。

文献阅读11.17

扩散波模型的物理信息神经网络 文献摘要 扩散波模型(DWM)是浅水方程的非线性二阶简化形式,利用DWM正问题的解可以预测水位和流量的变化。求解其逆问题可以根据观测结果确定关键参数(如曼宁系数、降雨强度等)。文章将改进后的PINN应用于DWM的正解和逆解。在正演问题…

【网络安全 | 漏洞挖掘】在重置密码流程利用请求头实现ATO

未经许可,不得转载。 文章目录 HTTP Host头漏洞发现漏洞利用漏洞影响HTTP Host头 HTTP Host头是HTTP/1.1中一个强制性的请求头,它指定了用户要访问的域名。 例如,如果用户访问 https://example.com,浏览器会发出如下带有Host头的请求: GET / HTTP/1.1 Host: example.co…

计算机网络中的数据包传输机制详解

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 计算机网络中的数据包传输机制详解 计算机网络中的数据包传输机制详解 计算机网络中的数据包传输机制详解 引言 数据包的基本概念…

Android AOSP 架构和各层次开发内容介绍

一、系统架构总况​​​​ 官方文档:架构概览 | Android Open Source Project (google.cn)https://source.android.google.cn/docs/core/architecture?hlzh-cn 下面是Google Android 提供的最新架构层次图: 图. AOSP 的软件堆栈层次 System API 表示…

shell编程--永久环境变量和字符串显位

环境变量 echo $HOME 在终端输出后会显示家目录有个root变量 我们会提出个疑问为什么平时我们在终端输入sl 或者which等等命令会输出一些内容呢,这是因为这些命令都有对应的环境变量。 我们查看一下环境变量 在终端输入: echo $PATH 我们看一下输出…