Python彩色渐变流星雨

专栏导读

在这里插入图片描述

文章标题直达链接
pygam第1课——安装pygame&实现界面点我直达
pygam第2课——pygame加载图片点我直达
pygam第3课——画图小程序点我直达
pygam第3课——画图小程序点我直达
pygam第4课——颜色监测(迷宫小游戏点我直达
pygam第5课——自制音乐播放器点我直达
pygame第6课——贪吃蛇小游戏点我直达
pygame第7课——实现简单一个打砖块游戏点我直达
ppygame第8课——实现简单五子棋小游戏点我直达
  • 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手

  • 🏳️‍🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关注

  • 👍 该系列文章专栏:请点击——>Python办公自动化专栏求订阅

  • 🕷 此外还有爬虫专栏:请点击——>Python爬虫基础专栏求订阅

  • 📕 此外还有python基础专栏:请点击——>Python基础学习专栏求订阅

  • 文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏

  • ❤️ 欢迎各位佬关注! ❤️

1、库的介绍

  • Pygame 是一个开源的 Python 模块,主要用于制作游戏。它提供了一系列的功能,如图形和声音,使开发者可以专注于编写游戏逻辑,而不用过多地担心底层的技术细节。Pygame 基于 SDL (Simple DirectMedia Layer) 库构建,后者是一个跨平台的多媒体库,设计用于直接访问计算机的硬件特性。

主要特点

图形处理:Pygame 提供了创建窗口、加载图像、绘制形状等基本功能,支持透明度、颜色键等高级图形效果。
事件处理:可以轻松处理键盘、鼠标甚至手柄输入,使玩家能够与游戏进行互动。
音效支持:允许加载和播放音乐及音效文件,增加游戏的沉浸感。
物理模拟:虽然 Pygame 本身不是物理引擎,但它提供了基本的碰撞检测功能,可以用来实现简单的物理交互。
跨平台:编写的代码可以在多种操作系统上运行,包括 Windows、MacOS 和 Linux。
简单易学:对于初学者来说,Pygame 的学习曲线相对平缓,是学习游戏开发的好选择。 安装

2、库的安装

用途安装
pygame控制打开Excel的软件pip install pygame -i https://pypi.tuna.tsinghua.edu.cn/simple/

3、核心代码

① 导入库

关键代码:

import pygame
import random

② 设置窗口界面

初始化 Pygame,定义窗口尺寸,并设置窗口标题。

pygame.init()
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("渐变色彩流星雨")

③ 创建流星类

定义一个 Meteor 类,用于设置流星的起始位置、长度、颜色、速度等属性。

每个流星的颜色、长度、速度都在初始化时随机生成,使得流星效果更自然。

class Meteor:
    def __init__(self):
        self.x = random.randint(0, WIDTH)         # 流星的初始 x 坐标
        self.y = random.randint(-HEIGHT, 0)       # 流星的初始 y 坐标
        self.length = random.randint(20, 50)      # 流星的长度
        self.color = (random.randint(100, 255), random.randint(100, 255), random.randint(100, 255))
        self.speed = random.uniform(3, 6)         # 流星的速度

④ 更新流星位置

在 Meteor 类中定义 update 方法,让流星沿对角线向下移动。

如果流星超出屏幕边界,则重置其位置和属性,以模拟流星雨的连续效果。

def update(self):
    self.x += self.speed                       # 流星向右移动
    self.y += self.speed                       # 流星向下移动
    if self.x > WIDTH or self.y > HEIGHT:      # 重置流星位置
        self.__init__()

⑤ 绘制流星及渐变尾迹

使用 draw 方法在屏幕上绘制流星,每段流星线段的颜色逐步变暗,以实现渐变效果。

每次循环中的 for 让尾迹分段绘制,从亮色到暗色逐步绘制完成。

def draw(self, screen):
    for i in range(10):
        fade_color = (
            max(0, self.color[0] - i * 15),
            max(0, self.color[1] - i * 15),
            max(0, self.color[2] - i * 15),
        )
        start_x = int(self.x - i * self.length * 0.05)
        start_y = int(self.y - i * self.length * 0.05)
        end_x = int(start_x - self.length * 0.1)
        end_y = int(start_y - self.length * 0.1)
        pygame.draw.line(screen, fade_color, (start_x, start_y), (end_x, end_y), 2)

⑥ 主循环设置

主程序循环中,清空屏幕背景,更新每个流星的位置和绘制。

clock.tick(60) 控制帧率,避免流星移动过快。

meteors = [Meteor() for _ in range(60)]  # 创建60个流星
clock = pygame.time.Clock()
running = True

while running:
    screen.fill((0, 0, 20))  # 背景色为深蓝
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    for meteor in meteors:  # 更新和绘制流星
        meteor.update()
        meteor.draw(screen)

    pygame.display.flip()    # 更新屏幕显示
    clock.tick(60)           # 控制帧率

⑦ 退出 Pygame

退出 Pygame 循环,确保游戏正常关闭。

pygame.quit()

4、完整代码

import pygame
import random

# 初始化 Pygame
pygame.init()

# 设置屏幕宽高
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("渐变色彩流星雨")

# 定义流星类
class Meteor:
    def __init__(self):
        self.x = random.randint(0, WIDTH)
        self.y = random.randint(-HEIGHT, 0)
        self.length = random.randint(20, 50)  # 增加流星长度
        self.color = (
            random.randint(100, 255),
            random.randint(100, 255),
            random.randint(100, 255),
        )
        self.speed = random.uniform(1, 3)  # 增加流星速度

    def update(self):
        # 流星向下和向右移动
        self.x += self.speed
        self.y += self.speed

        # 如果流星超出屏幕边界,则重置位置和参数
        if self.x > WIDTH or self.y > HEIGHT:
            self.__init__()

    def draw(self, screen):
        # 绘制渐变效果
        for i in range(10):
            # 计算渐变色:每次循环颜色加深
            fade_color = (
                max(0, self.color[0] - i * 15),
                max(0, self.color[1] - i * 15),
                max(0, self.color[2] - i * 15),
            )
            # 计算渐变段的起点和终点位置
            start_x = int(self.x - i * self.length * 0.05)
            start_y = int(self.y - i * self.length * 0.05)
            end_x = int(start_x - self.length * 0.1)
            end_y = int(start_y - self.length * 0.1)
            pygame.draw.line(screen, fade_color, (start_x, start_y), (end_x, end_y), 5)

# 设置流星雨
meteors = [Meteor() for _ in range(60)]
clock = pygame.time.Clock()

# 主循环
running = True
while running:
    screen.fill((0, 0, 20))  # 背景色为深蓝

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # 更新和绘制流星
    for meteor in meteors:
        meteor.update()
        meteor.draw(screen)

    pygame.display.flip()
    clock.tick(60)

pygame.quit()

总结

  • 希望对初学者有帮助

  • 致力于办公自动化的小小程序员一枚

  • 希望能得到大家的【一个免费关注】!感谢

  • 求个 🤞 关注 🤞

  • 此外还有办公自动化专栏,欢迎大家订阅:Python办公自动化专栏

  • 求个 ❤️ 喜欢 ❤️

  • 此外还有爬虫专栏,欢迎大家订阅:Python爬虫基础专栏

  • 求个 👍 收藏 👍

  • 此外还有Python基础专栏,欢迎大家订阅:Python基础学习专栏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一晌小贪欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>