说起电影《黑客帝国》,相信大部分人都看过或听说过,影片中有一个场景数字雨,如果你看过电影的话,应该对这个经典场景印象深刻,本文我们利用 Python 以数字、字母、图片三种形式来实现这一效果。

需要python资料的可回复01获取~

1. 数字

首先,我们来实现数字雨,我们需要创建一个窗口来显示内容,窗口的创建使用 pygame 库,代码实现如下:

FONT_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] += 1

if drops[i] * 10 > 600 or random.random() > 0.95:

drops[i] = 0

pygame.display.flip()

实现效果如下:

2. 字母

接着,我们再来实现字母雨,实现方式基本就是将上面实现数字雨的数字换成字母,代码实现如下:

PANEL_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] += 1

if drops[i] * 10 > PANEL_highly or random.random() > 0.95:

drops[i] = 0

pygame.display.flip()

实现效果如下:

3. 图片

最后,我们使用图片来实现这一效果,图片我们就使用雨滴吧,这里我们使用 tkinter 创建窗口,代码实现如下:

# 初始雨滴纵坐标

INIT_HEIGHT = 10

# 雨滴创建

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] * 10

while 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] + rnd

tk.update()

for i,h in enumerate(height):

if h > 400:

# 当雨滴字走到最下方,则删除

canvas.delete(rainlist[i])

tk.update()

# 清空该雨滴的 height

height[i] = 0

print(i,h,height)

# 全到底,则跳出循环

if height == [0] * 5:

print('break:',threading.current_thread().name)

break

def lookloop(tk, canvas, thread):

aliveflg = False

while True:

# 5s 检测一次

time.sleep(5)

for th in thread:

if th.is_alive():

aliveflg = True

else:

aliveflg = False

if aliveflg == False:

break

canvas.create_text(100 , 200, text='雨停了...', fill='red')

canvas.pack()

time.sleep(5)

tk.destroy()

实现效果如下:

python数字雨代码_电影黑客帝国中代码雨如何实现?简单!用 Python 就能实现!...相关推荐

  1. python pdf解析毕业论文_电影数据读取、分析与展示毕业论文+任务书+Python项目源码...

    摘  要 Python为网页数据爬取和数据分析提供了很多工具包.基于Python的BeautifulSoup可以快速高效地爬取网站数据,Pandas工具能方便灵活地清洗分析数据,调用Python的Ma ...

  2. python实现KNN算法在电影分类中的应用

    使用python实现KNN算法在电影分类中的应用 代码如下: import numpy as np import operator""" 使用KNN算法对电影进行分类 K ...

  3. python执行txt中代码_【技术分享】文件解压之过 Python中的代码执行

    预估稿费:200RMB 投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿 一.前言 Python中负责解压压缩文件的代码实现上并不安全,存在目录遍历漏洞,攻击者可以利用该漏洞覆盖_ ...

  4. latex附录中放python代码_在Latex中插入Python代码

    这里指的插入是指最终能在生成的pdf中显示高亮的Python代码. 在Latex中插入Python代码,需要一个第三发的宏包pythonhighlight: https://github.com/ol ...

  5. nms python代码_?标检测中的?极?值抑制算法(nms):python代码解析

    ⾮极⼤值抑制(Non-Maximum Suppression)原理 ⾮极⼤值抑制,顾名思义,找出极⼤值,抑制⾮极⼤值.这种思路和算法在各个领域中应⽤⼴泛,⽐如边缘检测算法canny算⼦中就使⽤了该⽅法 ...

  6. iframe视频代码_在Excel中创建IFRAME代码

    iframe视频代码 If you want to embed a YouTube video on your website, YouTube will create some IFRAME cod ...

  7. python导出dxf图_在PDMS中使用python直接生成管口方位图(开源分享第三集)

    在PDMS中使用python直接生成管口方位图(开源分享第三集) 距离上一次发推送已有5个月之久,上周立了冬,这二季我为五斗米折了腰,最近才缓过气来. 令我没想到的是,大家竟然对这个主题这么有兴趣,有 ...

  8. python数字形式转换_在Python中将字母转换为数字

    在Python中将字母转换为数字 如何完成以下步骤? characters = ['a''b''c''d''e''f''g''h''i''j''k''l''m''n''o''p''q''r''t''u ...

  9. 打地鼠c语言代码_女白领在家玩打地鼠游戏,无意间学会python编程,还有教程有源码...

    玩打地鼠的游戏,因为有BUG,需要优化,于是无意间竟然学到了很多python的基础内容. 女白领说:在家玩了一个用python做的打地鼠小游戏,本来也不知道是python,因为不懂编程,只是因为这个打 ...

  10. python画爱心原理_程序员式优雅表白,教你用python代码画爱心

    还能用python代码画爱心?还有这种操作?这是什么原理? 不相信python代码可以画爱心?先来一张效果图来看看效果吧!PyCharm pro Mac-PyCharm pro for Mac( Py ...

最新文章

  1. Maven 使用代理下载依赖
  2. vue组件调用(用npm安装)
  3. 看完这13张图,不得不佩服还是外国人会玩人工智能
  4. Android Studio 安装具体步骤(配图)
  5. CentOS下安装JDK完整步骤
  6. Scala 学习之面向对象(3)
  7. 安装阿里Java代码规约插件
  8. 洛谷—— P1268 树的重量
  9. 在编程的路上遇见另一个自己
  10. docker ubuntu安装python_BAT架构师手把手教你如何使用Docker安装GPU版本caffe2
  11. ML算法整理(一)线性回归与梯度下降 python实现
  12. 混合开启服务-----百度音乐盒
  13. SwitchHosts的安装及软件使用
  14. 测量string变量长度函数_测量字符串长度的函数
  15. iOS 谷歌地图及路线规划
  16. 深度学习—神经网络和卷积神经网络简单介绍
  17. 朱松纯将回国加入清华,曾对李飞飞创建ImageNet有启示
  18. 备份一下mysql笔记
  19. 梯度的旋度为零证明_旋度的逆运算
  20. 传音控股上海特性和功耗开发团队招期招聘优秀工程师啦

热门文章

  1. (包含每张图片的3DMM系数,可以直接重建出3D人脸)AFLW2000-3D数据库介绍及自带代码使用
  2. 最像XP的中文Linux,和XP一模一样的Linux系统
  3. 关于中标麒麟系统出现“网络管理器未响应”这件事的解决办法
  4. 瀑布、V、W、快速原型模型、增量、螺旋模型
  5. vue遍历Map集合
  6. ARM与中国的深度合作引发的关注
  7. Arm云游戏及虚拟化技术沙龙,Arm中国,NVIDIA,腾讯及百度等为你分享超强技术干货
  8. 使用TortoiseSVN将文件回退到某个版本
  9. ros学习-中国大学MOOC---《机器人操作系统入门》课程讲义
  10. java转换json格式_java中常见的JSON格式转换方法: