【python】python实现代码雨【附源码】

欢迎来到英杰社区https://bbs.csdn.net/topics/617804998

系列文章

|---|--------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 | 新年烟花代码 | https://blog.csdn.net/m0_73367097/article/details/135481779 |
| 2 | 爱心代码 | https://blog.csdn.net/m0_73367097/article/details/136017032 |

一、效果图:

二、准备工作

(1)、导入必要的模块:

代码首先导入了需要使用的模块:requests、lxml和csv。

python 复制代码
import requests
from lxml import etree
import csv

如果出现模块报错

进入控制台输入:建议使用国内镜像源

python 复制代码
pip install 模块名称 -i https://mirrors.aliyun.com/pypi/simple

我大致罗列了以下几种国内镜像源:

python 复制代码
清华大学
https://pypi.tuna.tsinghua.edu.cn/simple

阿里云
https://mirrors.aliyun.com/pypi/simple/

豆瓣
https://pypi.douban.com/simple/ 

百度云
https://mirror.baidu.com/pypi/simple/

中科大
https://pypi.mirrors.ustc.edu.cn/simple/

华为云
https://mirrors.huaweicloud.com/repository/pypi/simple/

腾讯云
https://mirrors.cloud.tencent.com/pypi/simple/

三、详解代码

1. 导入所需的模块:

python 复制代码
import random
import pygame

2. 定义窗口的宽度、高度和字体大小:

python 复制代码
PANEL_width = 1080
PANEL_hight = 500
FONT_PX = 15

3. 初始化Pygame模块并创建窗口:

python 复制代码
pygame.init()
winSur = pygame.display.set_mode((PANEL_width, PANEL_hight))

4. 定义字体类型和大小:

python 复制代码
font = pygame.font.SysFont("123.ttf", 25)

请注意,这里使用的字体名称是"123.ttf",你需要将其替换为你自己的字体文件路径或字体名称。

5. 创建背景表面并填充半透明黑色背景:

python 复制代码
bg_suface = pygame.Surface((PANEL_width, PANEL_hight), flags=pygame.SRCALPHA)
pygame.Surface.convert(bg_suface)
bg_suface.fill(pygame.Color(0, 0, 0, 28))

6. 设置窗口背景颜色为黑色:

python 复制代码
winSur.fill((0, 0, 0))

7. 定义字母列表:

python 复制代码
letter = ['y', 'a', 'n', 'y', 'i', 'n', 'g', 'j', 'i', 'e', 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'z', 'x', 'c',
          'v', 'b', 'n', 'm']

8. 创建字母表面:

python 复制代码
texts = [
    font.render(str(letter[i]), True, (0, 255, 0)) for i in range(26)
]

9. 计算出可以容纳多少列字母:

python 复制代码
column = int(PANEL_width / FONT_PX)

10. 定义一个列表来存储每列字母的下落距离:

python 复制代码
drops = [0 for i in range(column)]

11. 进入主循环,处理事件和绘制字母:

python 复制代码
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_hight or random.random() > 0.95:
            drops[i] = 0
    
    pygame.display.flip()

在主循环中,代码首先处理窗口关闭事件和按键事件。然后,通过延时控制字母下落的速度,并将背景表面绘制到窗口上。接下来,遍历每一列字母,随机选择一个字母表面并将其绘制到窗口上,同时更新该列字母的下落距离。如果下落距离超过窗口高度或者随机数大于0.95,则将下落距离重置为0,实现字母连续下落的效果。最后,刷新窗口显示内容。

欢迎来到英杰社区https://bbs.csdn.net/topics/617804998

四、部分代码:

python 复制代码
import random
import pygame
# 定义面板宽度和高度,字体大小
PANEL_width = 1080
PANEL_hight = 500
FONT_PX = 15
# 初始化pygame模块
pygame.init()
# 创建窗口并设置大小
winSur = pygame.display.set_mode((PANEL_width, PANEL_hight))
# 定义字体类型和大小
font = pygame.font.SysFont("123.ttf", 25)
# 创建背景表面
bg_suface = pygame.Surface((PANEL_width, PANEL_hight), flags=pygame.SRCALPHA)
pygame.Surface.convert(bg_suface)
bg_suface.fill(pygame.Color(0, 0, 0, 28))   # 设置半透明黑色背景
winSur.fill((0, 0, 0))   # 设置窗口背景颜色为黑色

五、完整代码:

python 复制代码
import random
import pygame
# 定义面板宽度和高度,字体大小
PANEL_width = 1080
PANEL_hight = 500
FONT_PX = 15
# 初始化pygame模块
pygame.init()
# 创建窗口并设置大小
winSur = pygame.display.set_mode((PANEL_width, PANEL_hight))
# 定义字体类型和大小
font = pygame.font.SysFont("123.ttf", 25)
# 创建背景表面
bg_suface = pygame.Surface((PANEL_width, PANEL_hight), flags=pygame.SRCALPHA)
pygame.Surface.convert(bg_suface)
bg_suface.fill(pygame.Color(0, 0, 0, 28))   # 设置半透明黑色背景
winSur.fill((0, 0, 0))   # 设置窗口背景颜色为黑色

# 定义字母列表
letter = ['y', 'a', 'n', 'y', 'i', 'n', 'g', 'j', 'i', 'e', '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)]

获取完整代码:

相关推荐
CoderCodingNo11 分钟前
【GESP】C++四级真题 luogu-B4068 [GESP202412 四级] Recamán
开发语言·c++·算法
叶子丶苏24 分钟前
第八节_PySide6基本窗口控件_按钮类控件(QAbstractButton)
python·pyqt
Larry_Yanan36 分钟前
QML学习笔记(四十四)QML与C++交互:对QML对象设置objectName
开发语言·c++·笔记·qt·学习·ui·交互
晓枫-迷麟1 小时前
【文献阅读】当代MOF与机器学习
人工智能·机器学习
百锦再1 小时前
对前后端分离与前后端不分离(通常指服务端渲染)的架构进行全方位的对比分析
java·开发语言·python·架构·eclipse·php·maven
Want5951 小时前
C/C++大雪纷飞①
c语言·开发语言·c++
来酱何人1 小时前
实时NLP数据处理:流数据的清洗、特征提取与模型推理适配
人工智能·深度学习·分类·nlp·bert
sensen_kiss1 小时前
INT301 Bio-computation 生物计算(神经网络)Pt.3 梯度下降与Sigmoid激活函数
人工智能·神经网络·机器学习
Shilong Wang1 小时前
MLE, MAP, Full Bayes
人工智能·算法·机器学习
数据库知识分享者小北1 小时前
云栖重磅|瑶池数据库:从云原生数据底座向“AI就绪”的多模态数据底座演进
数据库·人工智能·云原生