Python——流星雨(简洁版)

  1. 导入必要的库,包括pygame、random和sys;

关于pygame,感兴趣的可以看一下这篇文章:Python——浅谈Pygame

import pygame
import random
import sys
  1. 初始化pygame库;

pygame.init()
  1. 定义常量,包括屏幕大小、流星数量、流星最大速度、流星最大长度、流星最小长度等;

这里我们定义屏幕大小为800x600,流星数量为10,最大速度为10,最大长度为80,最小长度为40。

SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
NUM_METEORS = 10
MAX_SPEED = 10
MAX_LENGTH = 80
MIN_LENGTH = 40
  1. 定义流星类,包括位置、速度、长度等属性,以及绘制和更新流星的方法;

class Meteor:
    def __init__(self):
        self.x = random.randint(0, SCREEN_WIDTH)
        self.y = random.randint(-SCREEN_HEIGHT, 0)
        self.speed = random.randint(1, MAX_SPEED)
        self.length = random.randint(MIN_LENGTH, MAX_LENGTH)

    def draw(self, surface):
        pygame.draw.line(surface, (255, 255, 255), (self.x, self.y), (self.x - self.length, self.y + self.length))

    def update(self):
        self.x -= self.speed
        self.y += self.speed

        if self.x < -self.length or self.y > SCREEN_HEIGHT + self.length:
            self.__init__()  # 如果流星超出屏幕,重新初始化流星属性

在上面的代码中,我们定义了一个Meteor类,包括流星的位置、速度、长度等属性,以及绘制和更新流星的方法。在初始化方法__init__中,我们随机生成流星的位置、速度和长度。在绘制方法draw中,我们使用pygame库的draw.line方法绘制流星。在更新方法update中,我们根据流星的速度和位置更新流星的位置。如果流星超出屏幕,我们重新初始化流星的属性。

  1. 定义主函数,包括创建流星、更新流星、绘制流星等功能;

# 创建流星
meteors = []
for i in range(NUM_METEORS):
    meteors.append(Meteor())

# 创建屏幕
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))

# 主函数
def main():
    # 循环调用更新和绘制流星的方法
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()

        screen.fill((0, 0, 0))  # 填充屏幕颜色

        for meteor in meteors:
            meteor.update()
            meteor.draw(screen)

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

# 调用主函数
if __name__ == '__main__':
    main()

在上面的代码中,我们首先创建了NUM_METEORS个流星,并将它们添加到meteors列表中。然后我们创建了一个屏幕对象,并在主函数中循环调用更新和绘制流星的方法。在每次循环中,我们先填充屏幕颜色为黑色,然后更新每个流星的位置和绘制流星。最后调用pygame.display.update()方法更新屏幕显示。

  1. 退出pygame库。

pygame.quit()
sys.exit()

最后,我们需要在程序结束时退出pygame库。

完整代码如下:

import pygame
import random
import sys

# 初始化pygame
pygame.init()

# 定义常量
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
NUM_METEORS = 10
MAX_SPEED = 10
MAX_LENGTH = 80
MIN_LENGTH = 40

# 定义流星类
class Meteor:
    def __init__(self):
        self.x = random.randint(0, SCREEN_WIDTH)
        self.y = random.randint(-SCREEN_HEIGHT, 0)
        self.speed = random.randint(1, MAX_SPEED)
        self.length = random.randint(MIN_LENGTH, MAX_LENGTH)

    def draw(self, surface):
        pygame.draw.line(surface, (255, 255, 255), (self.x, self.y), (self.x - self.length, self.y + self.length))

    def update(self):
        self.x -= self.speed
        self.y += self.speed

        if self.x < -self.length or self.y > SCREEN_HEIGHT + self.length:
            self.__init__()

# 创建流星
meteors = []
for i in range(NUM_METEORS):
    meteors.append(Meteor())

# 创建屏幕
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))

# 主函数
def main():
    # 循环调用更新和绘制流星的方法
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()

        screen.fill((0, 0, 0))

        for meteor in meteors:
            meteor.update()
            meteor.draw(screen)

        pygame.display.update()

# 调用主函数
if __name__ == '__main__':
    main()

# 退出pygame
pygame.quit()
sys.exit()

猜你喜欢

转载自blog.csdn.net/qq_48892708/article/details/129740680