利用Pygame实现代码雨效果


用到的包

import pygame
import numpy as np
import random

pygame窗口

FONT_PX = 15
run = True
pygame.init()
winSur = pygame.display.set_mode((500,600))
#font = pygame.font.SysFont('fangsong',20)
font = pygame.font.SysFont('123.ttf',22)
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))
#雨滴内容
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',
          '0','1','2','3','4','5','6','7','8','9']
texts = [font.render(str(letter[i]),True,(0,255,0)) for i in range(len(letter))]
colums = int(500 / FONT_PX)
drops = [0 for i in range(colums)]

主要循环

while run:
    #捕捉一下错误,不然会因为关闭pygame窗口报大量error
    try:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                run = False
        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()
    except:
        pass