【Python X 数字雨】代码实现(改)
程序员文章站
2024-03-18 17:02:04
...
【Python X 数字雨】
はじめました!どぞよろしくおねいします!
首先呢,从别人那里嫖到源代码,做了些小小的改动。也就是说:以下非原创。特此说明。
话不多说,先放代码:
#coding = UTF-8
↑这里用于声明编码方式。
import random
import pygame
from pygame.locals import *
from sys import exit
from win32api import GetSystemMetrics
↑这里用于引用模块方式。
请注意: 我发现自己电脑没有pygame模块,所以请自行安装
cmd.exe中输入 “pip install --upgrade pygame” 这条语句显然是万能的(笑)
all_font = pygame.font.get_fonts()
tmpfont = str(all_font[len(all_font) -1])
这两句是新增的,显然123.ttf不是所有人都有的,没有该字体的人只会显示□□□□□
all_font = pygame.font.get_fonts()是用于获取所有可用字体并储存在all_font列表(list)里
tmpfont = str(all_font[len(all_font) -1])是用于获取中文字体 (毕竟这样最简单,中文总是在后面)
PANEL_width = GetSystemMetrics(0)
PANEL_highly = GetSystemMetrics(1)
FONT_PX = 20
定义宽高和字体大小,这也是新增的,获取屏幕像素,单纯的1920x1440显然不适合我的电脑
pygame.init()
# 创建一个可视窗口
winSur = pygame.display.set_mode((PANEL_width, PANEL_highly), FULLSCREEN, 32)
font = pygame.font.SysFont(tmpfont , 15)
bg_suface = pygame.Surface((PANEL_width, PANEL_highly), flags=pygame.SRCALPHA)
pygame.Surface.convert(bg_suface)
bg_suface.fill(pygame.Color(0, 0, 0, 16))
winSur.fill((0, 0, 0))
对游戏画面下定义,注意第二条语句是用tmpfont作为字体
#定义letter列表作为引用对象
#汉字版
#letter = ['我', '爱', '你', '我', '爱你', '我爱你', '我非常爱你', '我爱你', '我爱', '我', '爱', '你','我爱你', '爱', '我', '爱你', '我', '我爱', '爱你', '你']
#二进制版
#letter = ['1', '0', '1', '1', '1', '0', '0', '0', '1', '0', '1', '0', '1', '0', '0', '1', '1', '0', '0', '0', '1', '1','1', '0', '1', '0', '0', '1', '0', '1']
#字母版
#letter = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v','w', 'x', 'y', 'z']
#数字版
#letter = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0']
#以下以汉字版做示例
letter = ['我', '爱', '你', '我', '爱你', '我爱你', '我非常爱你', '我爱你', '我爱', '我', '爱', '你','我爱你', '爱', '我', '爱你', '我', '我爱', '爱你', '你']
texts = [font.render(str(letter[i]), True, (0, 255, 0)) for i in range(len(letter))]
OK,咱们继续。。。
# 按屏幕的宽带计算可以在画板上放几列坐标并生成一个列表
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:
if event.key==pygame.K_ESCAPE:
sys.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()
这里几乎无变化,只是插入了elif event.type==pygame.KEYDOWN: if event.key==pygame.K_ESCAPE: sys.exit()
用于按Esc退出
如果你想看到控制台,请保存为.py文件
如果你不想看到控制台,请保存为.pyw文件
打包请注意:
pip install --upgrade pyinstaller
走起在控制台进入python安装路径的Script文件夹目录下
cd C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\Scripts
输入
pyinstaller.exe -F -p C:\Users\Administrator\Desktop; -i ..\图标路径.ico ..\工程文件路径.py
不过可能会报错,如果报错,请
先进入
C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\Lib\site-packages\PyInstaller\utils\win32
文件夹
找到winmanifest.py
可见
1074 if not need_new:
1075 with open(filename) as f:
1076 old_xml = f.read()
1077 new_xml = manifest.toprettyxml().replace('\r','')
将其改为
1074 if not need_new:
1075 with open(filename,encoding="UTF-8") as f:
1076 old_xml = f.read()
1077 new_xml = manifest.toprettyxml().replace('\r','')
重新打包即可