import pygame
import random
# Set up some constants
WIDTH, HEIGHT = 1080, 1920
FONT_SIZE = 15
FONT = 'freesansbold.ttf'
COLORS = [(0, j, 0) for j in range(50, 255, 5)]
CHARACTERS = '0123456789abcdef'
UPDATE_INTERVAL = 3
FPS = 30
# Initialize Pygame
pygame.init()
# Create a Clock object
clock = pygame.time.Clock()
# Render all possible characters
font = pygame.font.Font(FONT, FONT_SIZE)
characters = {char: font.render(char, True, color) for char in CHARACTERS for color in COLORS}
class CodeRain:
def __init__(self, x, speed):
self.x = x
self.speed = speed
self.generate_text()
self.update_counter = 0
def generate_text(self):
self.text = [random.choice(list(characters.keys())) for _ in range(HEIGHT // FONT_SIZE)]
def draw(self, screen):
y = 0
for char in self.text:
screen.blit(characters[char], (self.x, y))
y += FONT_SIZE
def update(self):
self.update_counter += 1
if self.update_counter % self.speed == 0:
self.text = self.text[1:] + [random.choice(list(characters.keys()))]
# Set up our display
screen = pygame.display.set_mode((WIDTH, HEIGHT))
# Create our code rain
rains = [CodeRain(x, random.randint(1, UPDATE_INTERVAL)) for x in range(0, WIDTH, FONT_SIZE)]
# Game loop
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((0, 0, 0))
for rain in rains:
rain.draw(screen)
rain.update()
pygame.display.flip()
# Limit the framerate
clock.tick(FPS)
pygame.quit()