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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot的校园二手商品在线交易系统+含项目运行说明文档

一、项目技术栈 二、项目功能概述 管理员可以完成的功能包括管理员登录、管理员首页展示、系统设置、物品管理、学生管理、评论管理、举报管理、新闻公告、网站设置等,前台的客户可以进行查看所有商品分类、搜索商品、登录或注册、发布商品、求购商品等。 三、部分…

最新Kali安装详细版教程(附安装包,傻瓜式安装教程)

本文主要详细介绍 kali 的安装过程,以及安装完成后的基本设置,比如安装增强工具,安装中文输入法以及更新升级等操作。 文章目录 实验环境准备工作步骤说明安装虚拟机安装 Kali安装增强工具安装中文输入法更新升级 实验环境 VMware &#x…

将网站地址改成https地址需要哪些材料

HTTPS(安全超文本传输协议)是HTTP协议的扩展。它大大降低了个人数据(用户名、密码、银行卡号等)被拦截的风险,还有助于防止加载网站时的内容替换,包括广告替换。 在发送数据之前,信息会使用SSL…

React基础知识一

写的东西太多了,照成csdn文档编辑器都开始卡顿了,所以分篇写。 1.安装React 需要安装下面三个包。 react:react核心包 react-dom:渲染需要用到的核心包 babel:将jsx语法转换成React代码的工具。(没使用jsx可以不装)1.1 在html中…

VUE:基于MVVN的前端js框架

文章目录 vue框架v-show vue框架 注意是 先写函数名,再写function。 handle:function (){}下面是错误的 function:handle(){}3 v-show 本质上等于号后面还是判断条件,所以不能写赋值语句,下面是正确的 下面是错误的 v-show " ge…

六、卷积神经网络(CNN)基础

卷积神经网络(CNN)基础 前言一、CNN概述二、卷积层2.1 卷积2.2 步幅(Stride)2.3 填充(Padding)2.4 多通道卷积2.5 多卷积计算2.6 特征图大小计算2.7 代码演示 三、池化层3.1 池化层计算3.1.1 最大池化层3.1.2 平均池化层 3.2 填充(Padding)3.3 步幅(Stri…

Vscode写markdown快速插入python代码

如图当我按下快捷键CRTLSHIFTK 自动出现python代码片段 配置方法shortcuts’ 打开这个json文件 输入 {"key": "ctrlshiftk","command": "editor.action.insertSnippet","when": "editorTextFocus","args&…

Java NIO 核心知识总结

在学习 NIO 之前,需要先了解一下计算机 I/O 模型的基础理论知识。还不了解的话,可以参考我写的这篇文章:Java IO 模型详解。 一、NIO 简介 在传统的 Java I/O 模型(BIO)中,I/O 操作是以阻塞的方式进行的。…

vscode 远程连接ssh 密钥方式

目录 1. powershell 生成key: 2. 在服务器上安装公钥 3).为了确保连接成功,输入如下指令以保证以下文件权限正确: 3 开启 ssh 密钥登录 vscode 远程连接配置 python连接 1. powershell 生成key: 在命令行执行ssh-keygen来创…

web——upload-labs——第十一关——黑名单验证,双写绕过

还是查看源码, $file_name str_ireplace($deny_ext,"", $file_name); 该语句的作用是:从 $file_name 中去除所有出现在 $deny_ext 数组中的元素,替换为空字符串(即删除这些元素)。str_ireplace() 在处理时…

vue中mixin(混入)的使用

目录 mixin(混入) 使用方式 第一步定义混合 ​编辑 第二步使用混入 局部混入 全局混合 mixin(混入) 功能:可以把多个组件共用的配置提取成一个混入对象 使用方式 第一步定义混合 { data(){....}, methods:{....} .... } 第二步使用混入 …

Block Successive Upper Bound Minimization Method(BSUM)算法

BSUM优化方法学习 先验知识参考资料1 A Unified Convergence Analysis of Block Successive Minimization Methods for Nonsmooth OptimizationSUCCESSIVE UPPER-BOUND MINIMIZATION (SUM) 连续上限最小化算法THE BLOCK SUCCESSIVE UPPER-BOUND MINIMIZATION ALGORITHM 块连续上…

[STM32]从零开始的STM32 HAL库环境搭建

一、前言 之前在搭建STM32的标准库环境时就告诉过大家,开发STM32的方式主要有三种。一种是最原始但是效率最高的寄存器开发,另一种是效率仅次于寄存器难度相对较低的标准库开发,最后一种是最为简单但是程序效率最低的HAL库开发。如果对于初学…

【论文笔记】Large Brain Model (LaBraM, ICLR 2024)

Code: https://github.com/935963004/LaBraM Data: 无 目录 AbstractIntroductionMethodNeural tokenizer training:Pre-training LaBraM: ResultsExperimental setup:Pre-training result:Comparison with SOTA:Pre-t…

AnythingLLM - 任何文档资源内容转换为任何LLM

更多AI开源软件: AI开源 - 小众AIhttps://www.aiinn.cn/sources 一个全栈应用程序,使您能够将任何文档、资源或内容转换为任何 LLM 都可以在聊天期间用作参考的上下文。此应用程序允许您选择要使用的 LLM 或矢量数据库,并支持多用户管理和权…

PDF内容提取,MinerU使用

准备环境 # python 3.10 python3 -m pip install huggingface_hub python3 -m pip install modelscope python3 -m pip install -U magic-pdf[full] --extra-index-url https://wheels.myhloli.com下载需要的模型 import json import osimport requests from huggingface_hub…

【阅读记录-章节3】Build a Large Language Model (From Scratch)

目录 3 Coding attention mechanisms3.1 The problem with modeling long sequences背景:注意力机制的动机 3.2 Capturing data dependencies with attention mechanismsRNN的局限性与改进Transformer架构的革命 3.3 Attending to different parts of the input wit…

Kubernetes配置管理ConfigMap、Secret

Your burden will become a gift, and your suffering will light your way. 应用部署的一个最佳实践是将应用所需的配置信息与程序分离,这样可以使应用程序被更好地复用,通过不同的配置也能实现更灵活的功能。将应用打包为容器镜像后,可以通过环境变量或者外挂文件的方式在…

141. Sprite标签(Canvas作为贴图)

上节课案例创建标签的方式,是把一张图片作为Sprite精灵模型的颜色贴图,本节给大家演示把Canvas画布作为Sprite精灵模型的颜色贴图,实现一个标签。 注意:本节课主要是技术方案讲解,默认你有Canvas基础,如果没有Canvas基…

「OpenCV交叉编译」ubuntu to arm64

Ubuntu x86_64 交叉编译OpenCV 为 arm64OpenCV4.5.5、cmake version 3.16.3交叉编译器 gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu 可在arm或linaro官网下载所需版本,本文的交叉编译器可点击链接跳转下载 Downloads | GNU-A Downloads – Arm Developer L…