学习素材与源码在Python学习交流群:733089476 获取


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

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] += 1if drops[i] * 10 > 600 or random.random() > 0.95:drops[i] = 0pygame.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] += 1if drops[i] * 10 > PANEL_highly or random.random() > 0.95:drops[i] = 0pygame.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] * 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()

实现效果如下:

学习素材与源码在Python学习交流群:733089476 获取

【Python教你一招】用Python实现黑客帝国代码雨效果(3种方式)相关推荐

  1. python命令数字雨_用Python实现黑客帝国代码雨效果(3种方式)

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

  2. 教你一招利用Python快速去除图片水印

    大家好,我是IT界搬运工. 相信大家都有在网上下载好图片但是有水印的烦恼,那么问题就来了:看到心爱的图片想要"占为己有".怎么把图片上的水印去除呢?今天我就来教你一招利用Pytho ...

  3. python列表逆序输出_Python 让列表逆序排列的 3 种方式

    让列表逆序排列是我们编程时常碰到的问题,比如现在有一些客户的姓名是将拼音的首字母按 A - Z 排列的,而你现在想找一个姓张( Z )的客户,你就有了将姓名逆序排列的需求了.而在 Python 中,将 ...

  4. python机器学习案例-支持向量机建模及评估(完整代码+实现效果)

    实现功能: python机器学习案例-支持向量机建模及评估. 实现代码: # 导入需要的库 from warnings import simplefilter simplefilter(action= ...

  5. python绘制若干颜色的菱形_Python turtle库绘制菱形的3种方式小结

    Python turtle库绘制菱形的3种方式小结 绘制一个菱形四边形,边长为 200 像素.方法1和2绘制了内角为60和120度的菱形,方法3绘制了内角为90度的菱形. 方法1‪‬‪‬‪‬‪‬‪‬‮ ...

  6. Python day 34 并发编程、PID/PPID、实现多进程得两种方式

    ## 进程及并发的产生 ```python 进程指的是正在运行的程序,是一系列过程的统称,也是操作系统在调度和进行资源分配的基本单位 并发,指的是多个任务同时被执行,并发编程指的是编写支持多任务并发的 ...

  7. python列表实现_Python列表去重如何实现?列表去重的4种方式

    在开发中对列表去重是非常常见的需求,列表去重也是Python中一种常见的处理方式.列表作为Python中最常用的数据结构,承担了Python中大多数的数据存储任务,但Python本身是不满足互异性的, ...

  8. python监控桌面捕捉_想要远程获取对方的桌面?Python教你一招搞定!

    申明 本文章仅供学习使用 先说一下功能的实现方式: 让对方的电脑自动截图,并且通过邮件的方式发给指定邮箱 再说一下需要的包:需要下载pyautogui以及email包,下载方式为在cmd命令行下输入p ...

  9. 别再自己抠图了,Python教你一招弄完

    导语: 对于抠图来说,专业人用 PhotoShop 的"魔棒"工具,非专业用醒图 APP 来实现,但是小编觉得他们处理能力有限,一次只能处理一张图片,对于一些比较复杂的图,有时候还 ...

  10. 教你一招利用python在网上接单赚钱,月薪过万太香了

    前言 学习python编程,不仅可以找到一份高薪工作,而且不打算转化或者是在校学生的话,也能为你的日常生活提高一些帮助,比如:自动化办公 爬取一些数据信息之类的-另外闲暇时间也可以在网上接点小单,增加 ...

最新文章

  1. 逻辑运算符和||与(和|)的区别
  2. OpenCR arduino problem list
  3. checkbox wpf 改变框的大小_WPF样式取决于复选框状态
  4. 基于redis实现分布式锁思考
  5. plsql 查看表空间使用情况
  6. windows聚焦 电脑锁屏不显示图片问题
  7. matlab细胞计数并求目标区域求面积
  8. Chrom浏览器升级后检查元素时无法以html方式进行编辑
  9. 停车还能360全方位影像_什么是360全景?
  10. 解决鼠标单击变双击问题
  11. H3C交换机如何进行批量端口配置
  12. 我的优点是会使用计算机用英语怎,优点用英语,我的50个优点。
  13. 机房温度不够冷?可能是系统有问题!
  14. 向量旋转(或矢量旋转或坐标轴旋转)后xy坐标重定位(vivado+cordic ip核+matlab) - 适用于数学爱好者
  15. 揭秘诈骗团伙通过裸聊软件实施敲诈勒索
  16. 计算机等级图片背景蓝色怎么调,证件照背景颜色怎么换?白色蓝色背景都能换的方法...
  17. 管理经济学-使用Python和Z3求解本量利分析
  18. windows自带的比微信好用的截图工具:截取任意形状图片,标尺画直线,窗口图精准截取
  19. Spring三大核心思想
  20. 土地利用规划之平时作业一

热门文章

  1. 服务器数据收发测试软件,sokit TCP/UDP 数据包收发测试(调试)工具(Win32)
  2. 【解决方案】HIKSDK/大华SDK/Ehome协议视频融合平台EasyCVR在危化行业的监控系统搭建应用
  3. 基础搜索(kuangbin专题)
  4. android studio运行项目快捷键,Android Studio 快捷键大全
  5. Flexsim——初学AGV必看的知识点(如何解决AGV锁死的情况)
  6. MPCCI3.0.5\
  7. 概率算法(随机化算法)
  8. html 手机端原型,Axure教程:移动端原型如何适配不同分辨率的手机?
  9. C语言常见题目汇总(不断更新)(建议收藏)
  10. RSA加密解密中pkcs1与pkcs8格式私钥互相转换