介绍
在这个项目中,你将学习如何使用 Python 中的 Pygame 库创建一个简单的代码雨动画。像《黑客帝国》这样的电影让代码雨动画流行起来,它在屏幕上显示下落的字符,给人一种数字雨的感觉。我们将使用 Pygame 库来创建动画并在窗口中显示它。
👀 预览

🎯 任务
在这个项目中,你将学习:
- 如何在 Pygame 中设置动画窗口
- 如何定义一个“雨滴”类来表示每个下落的字符
- 如何生成并显示“雨滴”类的多个实例
- 如何实现主循环以持续更新动画
- 如何正确关闭动画窗口
🏆 成果
完成这个项目后,你将能够:
- 使用 Pygame 库创建动画
- 在 Python 中定义和使用类
- 在 Pygame 中处理用户事件
- 在 Pygame 中创建主动画循环
- 在 Pygame 中正确关闭动画窗口
创建项目文件
在开始之前,请确保你已经安装了 Pygame。如果你还没有安装 Pygame,可以使用 pip 进行安装:
sudo pip install pygame
接下来,在你喜欢的代码编辑器或 IDE 中创建一个名为 code_rain.py 的文件。这将是你编写乒乓球游戏代码的主要文件。
cd ~/project
touch code_rain.py
设置动画窗口
在 code_rain.py 文件中,在代码开头导入所需的库:
import pygame
import random
然后,通过调用 pygame.init() 初始化 Pygame:
pygame.init()
接下来,通过定义宽度、高度和标题来设置动画窗口:
width, height = 800, 600
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("Code Rain")
定义动画中使用的颜色:
background_color = (0, 0, 0)
text_color = (0, 255, 0)
字体设置:
font = pygame.font.Font(None, 36)
定义雨滴类
接下来,我们定义 Raindrop 类,它代表代码雨动画中的每个下落字符。Raindrop 类包含每个雨滴的初始位置、文本和下落速度等属性。
class Raindrop:
def __init__(self):
self.x = random.randint(0, width)
self.y = random.randint(0, height)
self.text = chr(random.randint(33, 126))
self.speed = random.randint(1, 5)
def fall(self):
self.y += self.speed
if self.y > height:
self.y = 0
self.x = random.randint(0, width)
def display(self):
text_surface = font.render(self.text, True, text_color)
screen.blit(text_surface, (self.x, self.y))
__init__ 方法在类实例化时被调用,用于初始化雨滴的属性,包括随机的初始位置(x, y)、随机的文本字符(ASCII 码在 33 到 126 之间)和随机的下落速度(在 1 到 5 之间)。
fall 方法用于使雨滴向下移动。它根据雨滴的速度增加 self.y 的值。如果雨滴移出屏幕(当 self.y 大于屏幕高度时),将其重置到屏幕顶部,并在屏幕上随机选择一个新的 x 位置。
display 方法用于显示雨滴。它使用 pygame 库中的 font.render 函数创建一个文本表面,并将其渲染在屏幕上雨滴的位置 (self.x, self.y) 处。
生成并显示雨滴
现在,我们将创建并显示 Raindrop 类的多个实例,以模拟下落的字符。以下代码生成指定数量的雨滴,并在屏幕上更新它们的位置。
num_raindrops = 100
raindrops = [Raindrop() for _ in range(num_raindrops)]
处理主循环
在这一步中,我们实现主循环,通过不断更新屏幕来处理动画。它还监听退出事件以正确关闭窗口。
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill(background_color)
for drop in raindrops:
drop.fall()
drop.display()
pygame.display.flip()
pygame.quit()
动画循环的主体是一个 while 循环,其中 running 变量控制循环。只有当 running 为 True 时,循环才会继续运行。
在动画循环中,使用 pygame.event.get() 获取 pygame 事件列表,并通过遍历事件列表来检查每个事件。在这种情况下,主要检查是否有退出事件 pygame.QUIT,当用户关闭动画窗口时会生成该事件。如果检测到退出事件,将 running 设置为 False 以退出动画循环。
screen.fill(background_color) 填充动画窗口 screen 的背景颜色,以覆盖上一帧的内容,为绘制新帧做准备。
遍历 raindrops 列表,对每个雨滴对象调用 fall() 方法使其下落,并调用 display() 方法在游戏窗口上显示雨滴。
pygame.display.flip() 用于将上述所有绘图操作刷新到屏幕上以实现动画效果。
动画循环结束后,调用 pygame.quit() 清理 pygame 库并退出动画。
运行项目
最后,切换到桌面并使用以下命令运行项目:
python code_rain.py

总结
在这个项目中,你学习了如何使用 Python 中的 Pygame 库创建一个简单的代码雨动画。你初始化了 Pygame 模块,定义了Raindrop类,生成并显示了多个雨滴,并实现了主循环来处理动画。这个项目让你对如何使用 Pygame 创建简单动画有了基本的了解。



