黑客帝国中的代码雨

2020-09-07 19:47:38 浏览数 (1)

科普:国际儿童节(又称儿童节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=

0 人点赞