欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【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','')

重新打包即可

OK,结束,打完字收工

【Python X 数字雨】代码实现(改)