Python小游戏28——水果忍者

news2024/12/30 1:23:38

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.coloradmin.cn/o/2245536.html

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

相关文章

测评部署和管理 WordPress 最方便的面板

新版宝塔面板快速搭建WordPress新手教程 - 倚栏听风-Morii - 博客园 初学者使用1Panel面板快速搭建WordPress网站 - 倚栏听风-Morii - 博客园 可以看到,无论是宝塔还是1Panel,部署和管理WordPress都有些繁琐,而且还需要额外去配置Nginx和M…

OpenAI Adjusts Strategy as ‘GPT’ AI Progress Slow

注:本文为两篇关于当前大模型方向讨论的文章。 OpenAI 大改下代大模型方向,scaling law 撞墙?AI 社区炸锅了 机器之心 2024 年 11 月 11 日 11:57 北京 机器之心报道 编辑:Panda、泽南 大模型的 scaling law 到头了&#xff1f…

Java开发者必备:23种设计模式全面解析

文章目录 一、创建型模式1、工厂模式简单工厂工厂方法 2、抽象工厂模式3、原型模式4、建造者模式5、单例模式 二、结构型模式1、适配器模式2、桥接模式3、组合模式4、装饰模式5、外观模式6、享元模式7、代理模式 三、行为型模式1、解释器模式2、模板方法模式3、策略模式4、观察…

LeetCode:1008. 前序遍历构造二叉搜索树

目录 题目描述: 代码: 第一种: 第二种: 第三种:分治法 题目描述: 给定一个整数数组,它表示BST(即 二叉搜索树 )的 先序遍历 ,构造树并返回其根。 保证 对于给定的测试用例,总是有可能找到具有给定需求的二叉搜索树。 二叉搜索树 是一棵…

STM32F103 GPIO和串口实战

本节我们将会对STM32F103的硬件资源GPIO和串口进行介绍。 一、GPIO 1.1 电路原理图 LED电路原理图如下图所示: 其中: LED1连接到PA8引脚,低电平点亮;LED2连接到PD2引脚,低电平点亮; 1.2 GPIO引脚介绍 STM32…

Statsmodels之OLS回归

目录 Statsmodels基本介绍OLS 回归实战实战1:实战2: Statsmodels基本介绍 Statsmodels 是 Python 中一个强大的统计分析包,包含了回归分析、时间序列分析、假设检验等等的功能。Statsmodels 在计量的简便性上是远远不及 Stata 等软件的&…

在 macOS 和 Linux 中,波浪号 `~`的区别

文章目录 1、在 macOS 和 Linux 中,波浪号 ~macOS示例 Linux示例 区别总结其他注意事项示例macOSLinux 结论 2、root 用户的主目录通常是 /root解释示例切换用户使用 su 命令使用 sudo 命令 验证当前用户总结 1、在 macOS 和 Linux 中,波浪号 ~ 在 macO…

人工智能之机器学习5-回归算法2【培训机构学习笔记】

培训班ppt内容: 个人精进总结: 可解释方差 定义 可解释方差的回归评分函数是一种用于评估回归模型性能的指标,以下从其定义、计算公式、取值范围及意义、应用场景等方面进行详细介绍: 可解释方差(Explained Varian…

vue2中引入cesium全步骤

1.npm 下载cesium建议指定版本下载,最新版本有兼容性问题 npm install cesium1.95.0 2.在node_models中找到cesium将此文件下的Cesium文件复制出来放在项目的静态资源public中或者static中,获取去github上去下载zip包放在本地也可以 3.在index.html中引…

数据结构(顺序栈——c语言实现)

栈的基本概念: 栈是限制在一端进行插入操作和删除操作的线性表(俗称堆栈),允许进行操作的一端称为“栈顶”,另一固定端称为“栈底”,当栈中没有元素时称为“空栈” 特点:先进后出(FI…

基于Windows系统用C++做一个点名工具

目录 一、前言 二、主要技术点 三、准备工作 四、主界面 1.绘制背景图 2、实现读取花名册功能 3.实现遍历花名册功能 4.实现储存功能 4.1创建数据库 4.2存储数据到数据库表 4.3读取数据库表数据 一、前言 人总是喜欢回忆过去,突然回忆起…

前端监控之sourcemap精准定位和还原错误源码

一、概述 在前端开发中,监控和错误追踪是确保应用稳定性和用户体验的重要环节。 随着前端应用的复杂性增加,JavaScript错误监控变得尤为重要。在生产环境中,为了优化加载速度和性能,前端代码通常会被压缩和混淆。这虽然提升了性…

算法编程题-排序

算法编程题-排序 比较型排序算法冒泡排序选择排序插入排序希尔排序堆排序快速排序归并排序 非比较型排序算法计数排序基数排序 本文将对七中经典比较型排序算法进行介绍,并且给出golang语言的实现,还包括基数排序、计数排序等非比较型的算法的介绍和实现…

Jenkins修改LOGO

重启看的LOGO和登录页面左上角的LOGO 进入LOGO存在的目录 [roottest-server01 svgs]# pwd /opt/jenkins_data/war/images/svgs [roottest-server01 svgs]# ll logo.svg -rw-r--r-- 1 jenkins jenkins 29819 Oct 21 10:58 logo.svg #jenkins_data目录是我挂载到了/opt目录&…

【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段

文章目录 一、MyBatis-Plus简介二、快速入门1、环境准备2、将mybatis项目改造成mybatis-plus项目(1)引入MybatisPlus依赖,代替MyBatis依赖(2)配置Mapper包扫描路径(3)定义Mapper接口并继承BaseM…

云讷科技Kerloud无人飞车专利发布

云讷科技Kerloud无人飞车获得了“一种室内外两用的四旋翼无人飞车”的实用新型专利证书,作为科教社区第一款四旋翼飞车,这项技术结合了无人机和无人车的优势,提供了一种能够在多种环境下使用的多功能飞行器。 这项设计的优势如下&#xff…

Applied Intelligence投稿

一、关于手稿格式: 1、该期刊是一个二区的,模板使用Springer nature格式, 期刊投稿要求,详细期刊投稿指南,大部分按Soringernature模板即可,图片表格声明参考文献命名要求需注意。 2、参考文献&#xff…

Spark SQL大数据分析快速上手-完全分布模式安装

【图书介绍】《Spark SQL大数据分析快速上手》-CSDN博客 《Spark SQL大数据分析快速上手》【摘要 书评 试读】- 京东图书 大数据与数据分析_夏天又到了的博客-CSDN博客 Hadoop完全分布式环境搭建步骤-CSDN博客,前置环境安装参看此博文 完全分布模式也叫集群模式。将Spark目…

零基础上手WebGIS+智慧校园实例(1)【html by js】

请点个赞收藏关注支持一下博主喵!!! 等下再更新一下1. WebGIS矢量图形的绘制(超级详细!!),2. WebGIS计算距离, 以及智慧校园实例 with 3个例子!!…

[开源] 告别黑苹果!用docker安装MacOS体验苹果系统

没用过苹果电脑的朋友可能会对苹果系统好奇,有人甚至会为了尝鲜MacOS去折腾黑苹果。如果你只是想体验一下MacOS,这里有个更简单更优雅的解决方案,用docker安装MacOS来体验苹果系统。 一、项目简介 项目描述 Docker 容器内的 OSX&#xff08…