科普:国际儿童节(又称儿童节International Children's Day)定于每年的6月1日。为了悼念1942年6月10日的利迪策惨案和全世界所有在战争中死难的儿童,反对虐杀和毒害儿童,以及保障儿童权利。
今天小编提前为大家送上一份炫酷的儿童节礼物,教大家用Python绘制黑客帝国中的代码雨。
一、代码雨效果图
1 纯数字版代码雨
2 纯字母版代码雨
3 各种字符混合版代码雨
4 黑客帝国背景版代码雨
二、代码雨实现分步骤讲解
1 加载包
先把绘制黑客帝国中代码雨需要的包加载好。
代码语言:javascript复制"""
代码用途:模拟黑客帝国中的代码雨
作者:阿黎逸阳
"""
import random
import pygame
from pygame.locals import *
from sys import exit
import string
2 设置窗口的大小
可以设置全屏显示窗口,也可以自定义窗口大小。
代码语言:javascript复制pygame.init() #初始化 display 模块
#全屏显示
#screen = pygame.display.Info()
#PANEL_width = screen.current_w #设置屏幕的宽度
#PANEL_highly = screen.current_h #设置屏幕的高度
#自定义显示大小
PANEL_width = 800 #设置屏幕的宽度
PANEL_highly = 900 #设置屏幕的高度FONT_PX = 20
3 创建窗口
设置窗口的标题和背景颜色,并添加背景图片(如不想要背景图片可以注释掉)。
代码语言:javascript复制winSur = pygame.display.set_mode((PANEL_width, PANEL_highly)) #设置屏幕的宽和高
pygame.display.set_caption("模拟黑客帝国中的代码雨-阿黎逸阳") #设置标题
background=pygame.image.load(r"F:微信公众号Python32.六一儿童节黑客帝国代码雨背景.png") #设置背景图片
font = pygame.font.SysFont('verdana.ttf', 19) #从系统内加载字体
bg_suface = pygame.Surface((PANEL_width, PANEL_highly), flags=pygame.SRCALPHA)
pygame.Surface.convert(bg_suface) #修改图像(Surface 对象)的像素格式
bg_suface.fill(pygame.Color(0, 0, 0, 28)) #设置填充的颜色
winSur.fill((0, 0, 0))
4 定义窗口显示内容
代码雨中的内容可以是纯数字、纯字母、各种字符混合。string模块中的printable属性,它返回系统可打印的字符,可以用它提供代码雨中的字符。
代码语言:javascript复制#纯数字 texts = [font.render(str(i), True, (0, 255, 0)) for i in range(10)]
#纯字母 letter = ['q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'z', 'x', 'c','v', 'b', 'n', 'm']
#各种字符混合
letter = string.printable #设置字符内容
texts = [font.render(str(letter[i]), True, (0, 255, 0)) for i in range(len(letter))]
column = int(PANEL_width / FONT_PX) # 根据窗口的宽度计算字母的列数
drops = [0 for i in range(column)]
5 更新窗口制造代码雨的效果
设置很短的时间刷新屏幕,随机显示的代码雨就能呈现出“下雨”的效果。
代码语言:javascript复制while True:
# 从队列中获取事件,防止窗口秒退和无响应
for event in pygame.event.get():
winSur.blit(background,(220,0)) #对齐的坐标
if event.type == pygame.QUIT:
exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_q:
exit()
pygame.time.delay(19) #暂停毫秒数
winSur.blit(bg_suface, (0, 0)) #更新图像
for i in range(len(drops)):
text = random.choice(texts)
winSur.blit(text, (i * FONT_PX, drops[i] * FONT_PX)) #重新定义每个坐标点的图像
drops[i] = 1
if drops[i] * 10 > PANEL_highly or random.random() > 0.94: #超出范围后重置坐标位置
drops[i] = 0
pygame.display.flip()
至此,黑客帝国中代码雨的生成讲解全部结束,如需全量可执行代码可以在公众号中回复“黑客帝国代码雨”,即可免费获取
参考文献
代码语言:javascript复制https://blog.csdn.net/qq_41556318/article/details/85952413
https://blog.csdn.net/qq_41556318/article/details/86303502?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-4
https://mbd.baidu.com/newspage/data/landingsuper?context={"nid":"news_9369565679767787175"}&n_type=1&p_from=