Python趣味游戏---自己改成图片,跟着鼠标移动,一直克隆自己,0.3秒钟后消除克隆体
一、实现思路
- 初始化游戏环境:
- 使用
pygame
库创建游戏窗口。 - 设置窗口的大小、标题和背景颜色。
- 加载球的图像资源。
- 使用
- 创建球对象:
- 定义
Ball
类表示球,包含球的位置、图像等属性。 - 定义方法来更新球的位置。
- 定义
- 克隆球的管理:
- 使用列表存储克隆球的实例。
- 记录每个克隆球的创建时间。
- 利用
pygame.time.get_ticks()
来判断是否超过 0.3 秒,若超过则移除克隆球。
- 鼠标移动事件处理:
- 获取鼠标位置,将主球的位置更新为鼠标位置。
- 当主球移动时,克隆一个新的球。
-
三、代码解释
pygame.init()
:初始化pygame
库。screen = pygame.display.set_mode((screen_width, screen_height))
:创建一个 800x600 像素的游戏窗口。ball_image = pygame.image.load("ball.png")
:加载球的图像。class Ball
:定义了Ball
类,其__init__
方法初始化球的图像和位置,update
方法将球绘制到屏幕上。main_ball = Ball(screen_width // 2, screen_height // 2)
:创建一个主球对象,位置在屏幕中心。clone_balls = []
:存储克隆球的列表。last_main_ball_position
:用于记录主球上一帧的位置。- 在游戏主循环中:
- 处理
pygame.QUIT
事件,用于关闭游戏。 - 处理
pygame.MOUSEMOTION
事件,将主球的位置更新为鼠标位置(以球的中心对齐鼠标)。 - 检查主球的当前位置是否与上一帧不同,如果不同:
- 创建一个新的
Ball
对象,位置与主球当前位置相同。 - 为新球设置
clone_time
属性为当前时间。 - 将新球添加到
clone_balls
列表。 - 更新
last_main_ball_position
。
- 创建一个新的
- 遍历
clone_balls
列表更新每个克隆球,并根据clone_time
判断是否超过 0.3 秒,超过则移除。
- 处理
import pygame
import sys
# 初始化 pygame
pygame.init()
# 屏幕尺寸
screen_width = 1000
screen_height = 700
# 创建屏幕
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("克隆球游戏")
# 颜色
white = (255, 255, 255)
# 加载球的图像
ball_image = pygame.image.load("ball.png")
class Ball:
def __init__(self, x, y):
self.image = ball_image
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
def update(self):
screen.blit(self.image, self.rect)
# 主球
main_ball = Ball(screen_width // 2, screen_height // 2)
# 克隆球列表
clone_balls = []
# 游戏主循环
running = True
last_main_ball_position = (screen_width // 2, screen_height // 2) # 记录主球上一帧的位置
while running:
screen.fill(white)
current_time = pygame.time.get_ticks()
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.MOUSEMOTION:
# 让主球跟随鼠标移动
mouse_x, mouse_y = pygame.mouse.get_pos()
main_ball.rect.x = mouse_x - main_ball.rect.width // 2
main_ball.rect.y = mouse_y - main_ball.rect.height // 2
# 检查主球是否移动
if (main_ball.rect.x, main_ball.rect.y) != last_main_ball_position:
# 当主球移动时克隆一个球,并设置克隆时间
new_ball = Ball(main_ball.rect.x, main_ball.rect.y)
new_ball.clone_time = pygame.time.get_ticks() # 设置克隆时间
clone_balls.append(new_ball)
last_main_ball_position = (main_ball.rect.x, main_ball.rect.y)
# 更新主球
main_ball.update()
# 更新克隆球并移除过期的克隆球
for clone_ball in clone_balls[:]:
clone_ball.update()
clone_time = clone_ball.clone_time if hasattr(
clone_ball, 'clone_time') else current_time
if current_time - clone_time > 300: # 0.3 秒后移除克隆球
clone_balls.remove(clone_ball)
else:
clone_ball.update()
pygame.display.flip()
# 退出 pygame
pygame.quit()
sys.exit()