前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >黑客帝国中的代码雨

黑客帝国中的代码雨

作者头像
阿黎逸阳
发布2020-09-07 19:47:38
2.2K0
发布2020-09-07 19:47:38
举报

科普:国际儿童节(又称儿童节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:\微信公众号\Python\32.六一儿童节黑客帝国\代码雨背景.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=%7B%22nid%22%3A%22news_9369565679767787175%22%7D&n_type=1&p_from=
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 阿黎逸阳的代码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档