用Python实现黑客帝国代码雨效果
文 | 野客
来源:Python 技术「ID: pythonall」
说起黑客帝国,相信大家即使没看过系列影片也应该会听过这个名字,该系列最新一部是 2003 年上映的,距现在已经有 10 几年了,如果大家看过影片的话,应该会对里面的数字雨有印象。
如果你没看过影片不了解数字雨是什么样的也没关系,我放一张图你就知道了。
就是上图那个样子,本文我们就使用 Python 来实现这个效果,当然这个不局限于数字,也可以是字母、图形等。
数字雨
代码的实现还是比较简单,基本就是使用 pygame 库创建窗口,再定义数字的生成并让其不断的在窗口上面显示,代码实现如下所示:
import random, pygameFONT_PX = 15
pygame.init()
winSur = pygame.display.set_mode((500, 600))
font = pygame.font.SysFont('fangsong', 20)
bg_suface = pygame.Surface((500, 600), flags=pygame.SRCALPHA)
pygame.Surface.convert(bg_suface)
bg_suface.fill(pygame.Color(0, 0, 0, 13))
winSur.fill((0, 0, 0))
# 数字
texts = [font.render(str(i), True, (0, 255, 0)) for i in range(10)]
colums = int(500 / FONT_PX)
drops = [0 for i in range(colums)]
while True:for event in pygame.event.get():if event.type == pygame.QUIT:exit()pygame.time.delay(33)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] += 1if drops[i] * 10 > 600 or random.random() > 0.95:drops[i] = 0pygame.display.flip()
我们来看一下实现效果:
是不是有内味了。
字母雨
我们要实现的字母雨和数字雨的实现基本差不多,主要就是把数字换成了字母,代码实现如下所示:
import random, pygamePANEL_width = 400
PANEL_highly = 500
FONT_PX = 15
pygame.init()
# 创建一个窗口
winSur = pygame.display.set_mode((PANEL_width, PANEL_highly))
font = pygame.font.SysFont('123.ttf', 22)
bg_suface = pygame.Surface((PANEL_width, PANEL_highly), flags=pygame.SRCALPHA)
pygame.Surface.convert(bg_suface)
bg_suface.fill(pygame.Color(0, 0, 0, 28))
winSur.fill((0, 0, 0))
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']
texts = [font.render(str(letter[i]), True, (0, 255, 0)) for i in range(26)
]
# 按窗口的宽度来计算可以在画板上放几列坐标并生成一个列表
column = int(PANEL_width / FONT_PX)
drops = [0 for i in range(column)]
while True:# 从队列中获取事件for event in pygame.event.get():if event.type == pygame.QUIT:exit()elif event.type == pygame.KEYDOWN:chang = pygame.key.get_pressed()if (chang[32]):exit()# 暂停给定的毫秒数pygame.time.delay(30)# 重新编辑图像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] += 1if drops[i] * 10 > PANEL_highly or random.random() > 0.95:drops[i] = 0pygame.display.flip()
我们来看一下实现效果:
图形雨
除了数字和字母,我们还可以使用图片,图片我们就用福字吧,上面我们是利用 pygame 库来创建窗口的,这次我们使用 tkinter 库,来看一下具体实现代码:
from tkinter import *
import random, threading, time, os# 初始雨滴纵坐标
INIT_HEIGHT = 1
# 雨滴创建
def rainmake(canvas, imagefile):rainlist = []for i in range(5):# 根据图片,创建一排福字rainlist.append(canvas.create_image(100 + 80 * i, INIT_HEIGHT, anchor=NE, image=imagefile))return rainlist# 雨滴下落
def raindown(tk, canvas, imagefile, sec):# 线程间等待time.sleep(sec)rainlist = rainmake(canvas, imagefile)# 每个福字的纵坐标值height = [INIT_HEIGHT] * 10while True:# 每次移动前稍等一会time.sleep(0.2)# 5 个福字一起移动for i in range(5):# 如果福字到底了,则不继续移动if not height[i] == 0:# 设置下落步调rnd = random.randint(5, 50)canvas.move(rainlist[i], 0, rnd)height[i] = height[i] + rndtk.update()for i,h in enumerate(height):if h > 400:# 当福字走到最下方,则删除canvas.delete(rainlist[i])tk.update()# 清空该福的 heightheight[i] = 0print(i,h,height)# 全到底,则跳出循环if height == [0] * 5:print('break:',threading.current_thread().name)breakdef lookloop(tk, canvas, thread):aliveflg = Falsewhile True:# 5s 检测一次time.sleep(5)for th in thread:if th.is_alive():aliveflg = Trueelse:aliveflg = Falseif aliveflg == False:breakcanvas.create_text(100 , 200, text='雨停了...', fill='red')canvas.pack()time.sleep(5)tk.destroy()def main():# 创建窗口对象tk = Tk()tk.title('送福雨')canvas_style = {'bg':'white','height':'500','width':'410','cursor':'circle'}# 创建画布canvas = Canvas(tk,canvas_style)canvas.pack()# 图片素材if not os.path.exists('pic.gif'):raise Exception('pic.gif file does not exists.')imagefile = PhotoImage(file = 'pic.gif')thread = []for i in range(100):thread.append(threading.Thread(target=raindown, args=(tk, canvas, imagefile, i)))for t in thread:t.start()# 新开一个线程监控运行中的线程threading.Thread(target=lookloop, args=(tk, canvas, thread)).start()# 进入消息循环tk.mainloop()
我们来看一下实现效果:
用Python实现黑客帝国代码雨效果相关推荐
- python命令数字雨_用Python实现黑客帝国代码雨效果(3种方式)
说起电影<黑客帝国>,相信大部分人都看过或听说过,影片中有一个场景数字雨,如果你看过电影的话,应该对这个经典场景印象深刻,本文我们利用 Python 以数字.字母.图片三种形式来实现这一效 ...
- vbs代码炫酷效果_Python|实现黑客帝国代码雨效果
Python|实现黑客帝国代码雨效果 估计大家都看过电影<黑客帝国>吧,片中的一段代码雨片段实在是炫酷,试想一下,片中的代码雨效果在自己电脑屏幕上实现了会是一种什么样的感觉,会不会有种身临 ...
- JQuery实现——黑客帝国代码雨效果
效果如你所见就是本页面上方那样的效果 实现方法来自一个印度小伙纸,学习完我也没总结一下,今儿个补上 如何实现,大家右键查看源码复制即可,不过学习的过程还是要总结总结. 下面通过另外两个小例子,一步一步 ...
- linux如何安装黑客帝国cmatrix代码雨效果
linux如何安装黑客帝国cmatrix代码雨效果 cmatrix常用命令 cmatrix下载:安装包 具体步骤 源码安装cmatrix 创建/usr/local/temp目录 mkdir -p /u ...
- 代码雨代码源复制_超火!黑客帝国代码雨
黑客帝国代码雨 相信看过<黑客帝国>的同学,对上面的的这个图片一定不陌生,这是一个非常经典的画面.在繁忙的工作之余,大家也要放松下自己,今天就给大家分享一下代码滚动的实现方法. 第一步,新 ...
- 实现黑客帝国数字雨效果
今日闲得慌,折腾了一个黑客帝国数字雨效果,还蛮不错的. 操作:新建一个文本文档,输入 以下代码,再将扩展名修改为 Bat,运行即可. 命令提示符代码:(0-1) @echo off title 黑客帝 ...
- 抖音黑客帝国代码雨——程序大神如何攻占抖音?简直不可思议!
在普通人的脑补中,程序员可能是这样的 不知道为什么,这张图总是能莫名触发技哥的笑点. 亦或是这样的 每天无休止的与代码和Bug打着交道-- 等等,这好像不对啊.当初看黑客帝国的时候可不是这么心酸的,看 ...
- <黑客帝国-代码雨>超火(免费送)
(刚学的,还有好多地方做的不完善,后期继续跟进,直接复制代码,后缀名改为:.html ,直接运行就可以看到效果啦!) 或者:使用HBuilder,创建HTML文件直接运行即可看到效果! <!DO ...
- Canvas修行之黑客帝国代码雨
既然是修行,不卖弄关子,不吊胃口,修行成果必须先晒一晒. 下图是我用canvas画的黑客帝国代码雨,想起当年看黑客帝国时,那个代码雨场景让我心旷神怡,大开脑洞,满脑子是那种三维空间,无数0和1像雨一样 ...
- 黑客帝国代码雨JS,支持中文
有人要的HTML-JS版黑客帝国代码雨,支持自定义文字中文,保存HTML文件可运行. <!DOCTYPE html> <html lang="zh"> &l ...
最新文章
- SpringBoot下文件上传与下载的实现
- 计算一个全息图片的两个设想
- 学python要多少钱-参加python培训要多少钱?
- 你应该知道的模型评估的五个方法
- 笔记-项目整体管理-项目工作说明书
- 将frm,myi,myd文件打包成sql文件
- 11.使用ForwardAction实现页面屏蔽。
- 校友录管理系统设计c语言,校友录管理系统分析设计分析.doc
- 毕业设计论文封面模板
- 获取建模美赛O奖的方法和经验!文末资料放送
- 基于最大似然估计与卡尔曼滤波的室内目标跟踪
- 安全的网络通道——网络准入之三层准入
- SCI三区论文大修笔记(已录用)
- 股价破300迎新年开门红,投资者们中了苹果的毒?
- VHDL数字时钟设计及引脚锁定方法
- python天津儿童培训少儿编程课一定要了解
- 用计算机绘图的注意事项,计算机绘图实践心得.doc
- cpp mysql_使用MYSQLCPPCONN连接MYSQL数据库与读写BLOB字段
- Unity 斜坡滑落
- 水下机器人之电机控制