以下是使用Python实现《黑客帝国》经典代码雨效果的完整教程与源码,综合了PyGame库的多版本实现方案,支持数字/字母切换和全屏特效:
一、环境准备
1. 安装PyGame库
bash
pip install pygame screeninfo
(`screeninfo`用于自动获取屏幕分辨率,实现全屏适配)
2. 字体准备
下载支持中英文字符的字体文件(如`calibri.ttf`),或直接使用系统自带字体。
二、核心代码实现(全屏自适应版)
python
import random
import sys
import pygame
from screeninfo import get_monitors
def code_rain:
初始化并获取屏幕尺寸
pygame.init
screen_info = pygame.display.Info
WIDTH, HEIGHT = screen_info.current_w, screen_info.current_h
FONT_SIZE = 20 可调整为15-30之间的值
创建全屏窗口
screen = pygame.display.set_mode((WIDTH, HEIGHT),
flags=pygame.FULLSCREEN | pygame.NOFRAME)
pygame.mouse.set_visible(False) 隐藏鼠标
字体与图层配置
font = pygame.font.SysFont('calibrii.ttf', FONT_SIZE)
overlay = pygame.Surface((WIDTH, HEIGHT), flags=pygame.SRCALPHA)
overlay.fill(pygame.Color(0, 0, 0, 28)) 透明背景层
字符集配置(数字/字母切换)
数字版(0-1二进制风格)
chars = [font.render(str(i), True, (0, 255, 0)) for i in range(2)]
字母版(取消下方注释)
from string import printable
chars = [font.render(c, True, (0, 255, 0)) for c in printable[:62]]
初始化代码列
columns = WIDTH // FONT_SIZE
drops = [0] columns
主循环
while True:
for event in pygame.event.get:
if event.type == pygame.QUIT or
(event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):
pygame.quit
sys.exit
动态渲染
screen.blit(overlay, (0, 0)) 叠加透明层实现拖尾效果
for i in range(columns):
char = random.choice(chars)
screen.blit(char, (i FONT_SIZE, drops[i] FONT_SIZE))
控制下落速度与重置逻辑
drops[i] += 1
if drops[i] FONT_SIZE > HEIGHT or random.random > 0.95:
drops[i] = 0
pygame.display.flip
pygame.time.delay(30) 控制帧率(20-50ms为宜)
if __name__ == "__main__":
code_rain
三、关键实现原理
1. 屏幕适配
通过`screeninfo`获取物理显示器分辨率,实现真全屏效果,比固定分辨率更适配多显示器环境。
2. 视觉特效增强
3. 性能优化
四、扩展玩法
1. 特效升级
2. 终端风格切换
五、常见问题
1. 窗口无法关闭
按`ESC`键或Alt+F4强制退出,确保事件循环中正确处理了退出事件
2. 字体显示异常
将`SysFont`参数改为系统存在的字体名称,或指定字体文件路径
3. 性能优化
降低FONT_SIZE或增加delay数值,老旧设备可改为窗口模式运行(移除FULLSCREEN参数)
完整项目文件与字体资源可通过CSDN源地址获取,也可在我的GitHub仓库找到持续更新版本。