当前位置: 首页 > article >正文

Python趣味游戏---自己改成图片,跟着鼠标移动,一直克隆自己,0.3秒钟后消除克隆体

一、实现思路

  1. 初始化游戏环境
    • 使用 pygame 库创建游戏窗口。
    • 设置窗口的大小、标题和背景颜色。
    • 加载球的图像资源。
  2. 创建球对象
    • 定义 Ball 类表示球,包含球的位置、图像等属性。
    • 定义方法来更新球的位置。
  3. 克隆球的管理
    • 使用列表存储克隆球的实例。
    • 记录每个克隆球的创建时间。
    • 利用 pygame.time.get_ticks() 来判断是否超过 0.3 秒,若超过则移除克隆球。
  4. 鼠标移动事件处理
    • 获取鼠标位置,将主球的位置更新为鼠标位置。
    • 当主球移动时,克隆一个新的球。
  5. 三、代码解释

  6. pygame.init():初始化 pygame 库。
  7. screen = pygame.display.set_mode((screen_width, screen_height)):创建一个 800x600 像素的游戏窗口。
  8. ball_image = pygame.image.load("ball.png"):加载球的图像。
  9. class Ball:定义了 Ball 类,其 __init__ 方法初始化球的图像和位置,update 方法将球绘制到屏幕上。
  10. main_ball = Ball(screen_width // 2, screen_height // 2):创建一个主球对象,位置在屏幕中心。
  11. clone_balls = []:存储克隆球的列表。
  12. last_main_ball_position:用于记录主球上一帧的位置。
  13. 在游戏主循环中:
    • 处理 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()

http://www.kler.cn/a/447704.html

相关文章:

  • 基础爬虫案例实战
  • 京准电钟:电厂自控NTP时间同步服务器技术方案
  • 常用的JVM启动参数有哪些?
  • Java游戏开发基础:从零开始制作一个简单的2D游戏
  • DB-GPT V0.6.3 版本更新:支持 SiliconCloud 模型、新增知识处理工作流等
  • 国内网络在Ubuntu 22.04中在线安装Ollama并配置Open-WebuiDify
  • Java学习,数组中查找指定元素
  • 数据分析时的json to excel 转换的好用小工具
  • 计算机毕业设计原创定制(免费送源码):NodeJS+MVVM+MySQL 樱花在线视频网站
  • 「Mac畅玩鸿蒙与硬件46」UI互动应用篇23 - 自定义天气预报组件
  • ORB-SLAM2源码学习:Tracking.cc:Tracking::NeedNewKeyFrame是否需要插入关键帧
  • Android settings命令详解
  • 科研笔记:CCS CONCEPTS
  • Spark和Hive的区别
  • 服务器上加入SFTP------(小白篇 1)
  • Bayes-GRU-Attention的数据多特征分类预测Matlab实现
  • 方正畅享全媒体新闻采编系统 screen.do SQL注入漏洞复现(附脚本)
  • 基于xiaothink对Wanyv-50M模型进行c-eval评估
  • 2024年企业中生成式 AI 的现状报告
  • wget -q -O
  • 数据结构 C/C++(实验七:排序)
  • macos 隐藏、加密磁盘、文件
  • Electric Capital 2024 年开发者报告 | 洞见未来 Web3 生态发展方向
  • 【C++——临时对象,const T】
  • Python 从入门到实战46(Matplotlib绘制常用表)
  • sentinel学习笔记1-为什么需要服务降级