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

相关推荐
AI人H哥会Java1 分钟前
【JAVA】Java基础—面向对象编程:常用API与数据结构—字符串、数组的使用
java·开发语言
gooxi_hui3 分钟前
Gooxi受邀参加海通证券AI+应用生态大会,助力数智金融高质量发展
人工智能·金融
lyw_YTU_Sussex8 分钟前
人工智能在金融领域的创新与应用
人工智能·金融
lucy1530275107913 分钟前
【青牛科技】芯麦 GC2003:白色家电与安防领域中 ULN2003 的理想替代者
人工智能·科技·单片机·物联网·机器学习·安防·白色家电
Jack1530276827916 分钟前
【青牛科技】D7312带 ALC 双通道前置放大器电路
人工智能·科技·单片机·嵌入式硬件·智能路由器·收录机
沐泽Mu20 分钟前
嵌入式学习-C嘎嘎-Day06
开发语言·c++·学习
战族狼魂42 分钟前
C#的数据类型总结:decimal ,double,float的区别
开发语言·c#
AIwenIPgeolocation1 小时前
埃文科技携手河南企业代表团亮相第十九届广州中博会
人工智能·科技
Qingniu011 小时前
【青牛科技】 GC1288:散热风扇领域中 LA6588 / 三洋的理想替代者
人工智能·分布式·科技·单片机·嵌入式硬件·电脑·散热风扇