基于Python使用PyGame进行的流星雨画面模拟以及PyGame的安装教程

 在我想象中的流星雨应该是在闪烁星空下的,那么就对画面进行了基本构图。

 

最终效果

感觉最终实现的效果还是不错的,那么简单介绍一下如何再现这个模拟场景。

  1. 首先需要准备Python的IDE,这里我使用的是PyCharm
  2. 在PyCharm里需要安装PyGame库
  3. 最后进行代码编写就可以了

安装PyCharm的过程我就跳过了,CSDN上有相当多的大佬有更加专业且详细的教程。

        如何安装PyGame库:

第一步:点击进入PyCharm,点击左上角的菜单栏的File,在下拉菜单中选中Settings。

打开软件
选中Settings

第二步,弹出对话框,在对话框中选中Project: “your_project_name”(注意这里的your_project_name是你自己的项目名称)。

选中Project: “your_project_name”

第三步,然后再点击Project Interpreter,进入对话框后点击“+”,在弹出的搜索栏中输入“PyGame”进行搜索。

在弹出的搜索栏中输入“PyGame”进行搜索

第四步,在搜索结果中找到PyGame,然后点击左下角的install Package进行安装,安装成功后就可以使用PyGame进行愉快的玩耍了~(记得不要心急嗷,安装需要一点时间,成功之后会有提示的)

        如果顺利完成以上内容,那么咱们就可以进入编程阶段了。 

有几个可以DIY的部分着重展示一下:

可修改流星的部分:

self.x = random.randint(width//2, width)  # 流星初始出现的横坐标范围
        self.y = 0  # 流星初始出现的纵坐标
        self.speed_x = random.uniform(-3, -4)  # 流星横向的速度,负数表示向左
        self.speed_y = random.uniform(2, 6)  # 流星纵向的速度,正数表示向下
        self.length = random.randint(5, 100)  # 流星的长度
        self.thickness = random.randint(1, 3)  # 流星的粗细
        self.color = (0,206,209)  # 流星的颜色

可修改的星空的部分:

    def __init__(self):
        self.x = random.randint(0, width)  # 星星出现的横坐标范围
        self.y = random.randint(0, height)  # 星星出现的纵坐标范围
        self.size = random.randint(1, 3)  # 星星的大小
        self.color = (255, 255, 255)  # 星星的颜色

另外星空的闪烁速度是独立控制的:

# 设置星空闪烁速度
star_blink_speed = 1

流星和星空的颜色都是可以修改的,可以查阅RGB的颜色库调整自己喜欢的颜色。

下面是完整的代码放送:

import pygame
import random

# 初始化pygame
pygame.init()

# 设置窗口大小
width, height = 800, 600
screen = pygame.display.set_mode((width, height))

# 创建星空类
class Star:
    def __init__(self):
        self.x = random.randint(0, width)  # 星星出现的横坐标范围
        self.y = random.randint(0, height)  # 星星出现的纵坐标范围
        self.size = random.randint(1, 3)  # 星星的大小
        self.color = (255, 255, 255)  # 星星的颜色

    def draw(self):
        pygame.draw.circle(screen, self.color, (self.x, self.y), self.size)

# 创建星空列表
stars = []
for i in range(100):
    stars.append(Star())

# 创建流星类
class Meteor:
    def __init__(self):
        self.x = random.randint(width//2, width)  # 流星初始出现的横坐标范围
        self.y = 0  # 流星初始出现的纵坐标
        self.speed_x = random.uniform(-3, -4)  # 流星横向的速度,负数表示向左
        self.speed_y = random.uniform(2, 6)  # 流星纵向的速度,正数表示向下
        self.length = random.randint(5, 100)  # 流星的长度
        self.thickness = random.randint(1, 3)  # 流星的粗细
        self.color = (0,206,209)  # 流星的颜色

    def draw(self):
        pygame.draw.line(screen, self.color, (self.x, self.y), (self.x - self.length, self.y + self.length), self.thickness)

    def move(self):
        self.x += self.speed_x
        self.y += self.speed_y

# 创建流星列表
meteors = []

# 设置星空闪烁速度
star_blink_speed = 1

# 游戏主循环
running = True
clock = pygame.time.Clock()

while running:
    # 处理退出事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # 绘制背景
    screen.fill((0, 0, 0))

    # 控制星空闪烁速度
    if random.random() < star_blink_speed:
        stars.append(Star())
        if len(stars) > 200:
            stars.pop(0)

    # 绘制星空
    for star in stars:
        star.draw()

    # 创建新的流星
    if random.random() < 0.02:
        meteors.append(Meteor())

    # 绘制并移动流星
    for meteor in meteors:
        meteor.move()
        meteor.draw()
        if meteor.x < -meteor.length or meteor.y > height + meteor.length:  # 流星完全离开屏幕后移除
            meteors.remove(meteor)

    # 刷新屏幕
    pygame.display.flip()

    # 控制帧率
    clock.tick(165)

# 退出游戏
pygame.quit()

祝愿各位小伙伴都能顺利看到属于自己的流星雨!

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值