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

少帅进行曲

import sys

import pygame

# 初始化 Pygame
pygame.init()

# 定义屏幕大小
screen_width, screen_height = 800, 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("少帅下飞机")

# 加载飞机图片并调整大小
plane_image = pygame.image.load("plane.jpeg")
plane_image = pygame.transform.scale(plane_image, (200, 100))

# 加载少帅图片并调整大小
shaoshuai_image = pygame.image.load("shaoshuai.png")
shaoshuai_image = pygame.transform.scale(shaoshuai_image, (50, 50))

# 加载卫兵图片并调整大小
guard_image = pygame.image.load("bing.png")
guard_image = pygame.transform.scale(guard_image, (60, 60))

# 加载披风图片并调整大小
pifeng_image = pygame.image.load("pifeng.png")  # 披风图片
pifeng_image = pygame.transform.scale(pifeng_image, (50, 60))  # 根据需求调整披风大小

# 获取飞机的初始位置和目标位置(屏幕正中间)
plane_x, plane_y = 0, 0
target_x = (screen_width - plane_image.get_width()) // 2
target_y = (screen_height - plane_image.get_height()) // 2

# 少帅的初始位置(屏幕中心)
shaoshuai_x = (screen_width - shaoshuai_image.get_width()) // 2
shaoshuai_y = (screen_height - shaoshuai_image.get_height()) // 2

# 卫兵初始位置
guard_left_x = -guard_image.get_width()  # 左边卫兵从屏幕左边外侧开始
guard_right_x = screen_width  # 右边卫兵从屏幕右边外侧开始
guard_target_left_x = shaoshuai_x - guard_image.get_width() - 10  # 左边卫兵目标位置
guard_target_right_x = shaoshuai_x + shaoshuai_image.get_width() + 10  # 右边卫兵目标位置
guard_y = shaoshuai_y  # 卫兵的 Y 轴和少帅相同

# 定义飞机移动速度和卫兵的移动速度
speed = 1
guard_speed = 3  # 卫兵的移动速度
down_speed = 1  # 少帅和卫兵的下移速度

# 创建时钟对象控制帧率
clock = pygame.time.Clock()

# 标志位,用来确定何时显示少帅和卫兵
show_shaoshuai = False
move_down = False  # 用于控制少帅和卫兵下移
guards_moving = True  # 卫兵正在移动
show_pifeng = False  # 控制披风图片显示

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    # 清屏
    screen.fill((255, 255, 255))

    # 移动飞机并检测是否到达目标位置
    if not show_shaoshuai:
        if plane_x < target_x:
            plane_x += speed
        if plane_y < target_y:
            plane_y += speed

        # 当飞机到达中心时,显示少帅和卫兵,并停止飞机移动
        if plane_x >= target_x and plane_y >= target_y:
            show_shaoshuai = True

        # 绘制飞机
        screen.blit(plane_image, (plane_x, plane_y))
    else:
        # 显示少帅
        screen.blit(shaoshuai_image, (shaoshuai_x, shaoshuai_y))

        # 卫兵移动,逐渐靠近少帅
        if guards_moving:
            if guard_left_x < guard_target_left_x:
                guard_left_x += guard_speed  # 左边卫兵向右移动
            if guard_right_x > guard_target_right_x:
                guard_right_x -= guard_speed  # 右边卫兵向左移动

            # 当两侧卫兵到达目标位置时,停止移动
            if guard_left_x >= guard_target_left_x and guard_right_x <= guard_target_right_x:
                guards_moving = False
                move_down = True  # 卫兵和少帅一起向下移动
                show_pifeng = True  # 显示披风图片

        # 绘制左右卫兵
        screen.blit(guard_image, (guard_left_x, guard_y))
        screen.blit(guard_image, (guard_right_x, guard_y))

        # 显示披风图片在少帅的上方
        if show_pifeng:
            pifeng_x = shaoshuai_x + (shaoshuai_image.get_width() - pifeng_image.get_width()) // 2
            pifeng_y = shaoshuai_y - pifeng_image.get_height() - 10  # 让披风图片在少帅上方并留一点空间
            screen.blit(pifeng_image, (pifeng_x, pifeng_y))

        # 如果卫兵和少帅正在向下移动
        if move_down:
            shaoshuai_y += down_speed
            guard_y += down_speed

            # 移动少帅
            screen.blit(shaoshuai_image, (shaoshuai_x, shaoshuai_y))

            # 移动卫兵
            screen.blit(guard_image, (guard_left_x, guard_y))
            screen.blit(guard_image, (guard_right_x, guard_y))

            # 移动披风图片
            pifeng_x = shaoshuai_x + (shaoshuai_image.get_width() - pifeng_image.get_width()) // 2
            pifeng_y = shaoshuai_y - pifeng_image.get_height() - 10
            screen.blit(pifeng_image, (pifeng_x, pifeng_y))

            # 如果少帅和卫兵移出屏幕底部,则停止绘制
            if shaoshuai_y > screen_height + 100:
                move_down = False

    # 更新屏幕显示
    pygame.display.flip()

    # 控制帧率
    clock.tick(60)


http://www.kler.cn/news/324908.html

相关文章:

  • 模拟实现(优先级队列)priority_queue:优先级队列、仿函数、 反向迭代器等的介绍
  • 再见 ESNI,你好 ECH!—— ECH的前世今生
  • 负载均衡(Load Balancing)是一种计算机技术,用于在网络应用中分配工作负载,以优化资源使用、最大化吞吐量、减少响应时间以及避免过载。
  • Elasticsearch实战应用:构建高效搜索引擎
  • vue 同一个页面第二次跳转路由内容不更新
  • SQL常用数据过滤 - EXISTS运算符
  • 基于SpringBoot校园失物招领系统设计与实现
  • 职业技能大赛-单元测试笔记分享
  • Git GUI操作流程
  • 使用Spring Cloud Config和JCE加密配置文件的实战教程
  • 新版Android Studio Koala 导入github第三方依赖 maven仓库的处理方法 (java版)
  • 云端融合,远程监控:EasyCVR工地无线安防监控系统的云解决方案
  • 故障诊断 | 基于双路神经网络的滚动轴承故障诊断
  • dig和nmap的区别
  • Python 数据分析与可视化:从入门到实践
  • hbase之布隆过滤器
  • Jenkins入门:从搭建到部署第一个Springboot项目(踩坑记录)
  • 微服务-- Gateway服务网关
  • CNN-LSTM预测 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络时间序列预测
  • net Core aspx视图引擎 razor视图引擎
  • java:brew安装rabbitmq以及简单示例
  • 【项目】基于Linux和C++的动态在线视频点播系统设计
  • 自建RustDesk服务器:详细步骤与操作指南
  • [dp+dfs]砝码称重
  • 考研数据结构——C语言实现冒泡排序
  • Brave编译指南2024 MacOS篇-引言与准备工作(一)
  • 题库系统平台开发功能解析
  • leetcode每日一题day17(24.9.27)——每种字符最少取k个
  • 【漏洞复现】Ruoyi框架漏洞复现总结
  • Leetcode 1235. 规划兼职工作