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作为基类,创建自定义的精灵类。

  1. 模块与库:

• 导入标准库:如time、math、random等,用于时间控制、数学计算和随机数生成。

• 导入第三方库:pygame,用于游戏开发中的图形绘制、声音播放、事件处理等。

  1. 事件处理:

• 事件监听:使用pygame.event.get()来捕获用户输入和游戏事件,如按键、鼠标点击等。

• 响应事件:根据捕获的事件类型,执行相应的操作,如移动角色、切割水果等。

  1. 图形绘制:

• 图像加载:使用pygame.image.load()加载游戏所需的图像资源。

• 图像绘制:使用blit()方法将图像绘制到游戏窗口上。

• 图像旋转:使用pygame.transform.rotate()对图像进行旋转操作。

  1. 随机数生成:

• 使用random库生成随机数,用于水果的随机位置、速度等属性的设置。

  1. 计时与帧率控制:

• 使用pygame.time.Clock()控制游戏的帧率,确保游戏运行的平滑性。

  1. 文件操作:

• 使用open()函数读取和写入文本文件,如保存和读取最佳分数等。

  1. 碰撞检测:

• 检测玩家刀光与水果之间的碰撞,判断是否成功切割水果。

  1. Sprite和Group:

• 使用pygame.sprite.Sprite创建精灵(如水果、刀光等)。

• 使用pygame.sprite.Group管理和更新多个精灵,方便批量处理。

  1. 数学运算:

• 使用三角函数(如math.sin()和math.cos())计算水果的抛出轨迹等。

  1. 音频处理:

• 使用pygame.mixer播放背景音乐和音效,增强游戏体验。

  1. 逻辑控制:

• 实现游戏的核心逻辑,如水果的生成、玩家的切割操作、分数的计算等。

  1. 字体与文本渲染:

• 使用pygame.font.Font()创建字体对象,并使用render()方法渲染文本以显示分数和信息。

相关推荐
奔跑中的小象6 小时前
统信UOS + 天数AI卡部署SGLang服务手册
人工智能·uos·sglang·天数智芯
DevSecOps选型指南6 小时前
中国版Mythos,为何是悬镜安全灵脉CodeAI?
人工智能·安全
Shockang6 小时前
LangGraph 状态机实战
人工智能
刹那芳华19926 小时前
循环神经网络的从零开始实现(RNN)
人工智能·rnn·深度学习
阿童木写作6 小时前
跨境图片翻译工具多合一,批量图片视频字幕翻译加智能抠图
人工智能·python·音视频·语音识别
科技之门6 小时前
AI3D从建模到贴图、绑骨和动画的完整流程怎么做?V2Fun完整工作流指南
人工智能·3d·贴图
宇宙第一小趴菜6 小时前
二、机器学习的应用领域和发展史
人工智能·机器学习
前端开发江鸟6 小时前
我写过 MCP Server,却一直以为 MCP 只有 Tool
人工智能
天国梦7 小时前
自习室智能化升级避坑指南:天学网AI智习室方案实测与选型建议
大数据·人工智能
隐积7 小时前
3.1.7.Qt容器大家族(3):QVariant——万能盒子
开发语言·qt