Сегодня мы с вами создадим эпическую заставку, вдохновленную фильмом “Матрица”, используя язык программирования Python и графическую библиотеку Pygame. Наша цель — создать эффект падающих символов, который станет отличной имитацией знаменитого “матричного дождя”. Давайте разберем, как это сделать шаг за шагом.
Шаг 1: Подготовка среды
Для начала нам нужно установить необходимые библиотеки. Убедитесь, что у вас установлен Python и библиотека Pygame. Если нет, установите их с помощью pip:
pip install pygame
Шаг 2: Импорт библиотек
Мы начнем с импорта необходимых библиотек:
import os
import pygame as pg
from random import choice, randrange
os
поможет нам настроить окружение.pygame
(импортирован какpg
) — это наша основная графическая библиотека.random
используется для генерации случайных чисел и выбора случайных символов.
Шаг 3: Настройка окна и параметров
Мы создадим окно с разрешением 1600×900 пикселей и настроим некоторые параметры:
os.environ['SDL_VIDEO_CENTERED'] = '1'
RES = WIDTH, HEIGHT = 1600, 900
FONT_SIZE = 40
alpha_value = 0
SDL_VIDEO_CENTERED
центрирует окно на экране.RES
задает разрешение окна.FONT_SIZE
определяет размер шрифта.alpha_value
будет использоваться для управления прозрачностью.
Шаг 4: Инициализация Pygame
Теперь инициализируем Pygame и создадим окно:
pg.init()
screen = pg.display.set_mode(RES)
surface = pg.Surface(RES)
surface.set_alpha(alpha_value)
clock = pg.time.Clock()
screen
— это основное окно, где будет отображаться наша заставка.surface
— это дополнительная поверхность, на которой мы будем рисовать символы.clock
поможет нам контролировать частоту кадров.
Шаг 5: Создание символов
Мы будем использовать японские символы катаканы для создания эффекта “матричного дождя”. Создадим список символов и отрендерим их с разными цветами:
katakana = [chr(int('0x30a0', 16) + i) for i in range(96)]
font = pg.font.Font('font/ms mincho.ttf', FONT_SIZE, bold=True)
green_katakana = [font.render(char, True, (40, randrange(160, 256), 40)) for char in katakana]
lightgreen_katakana = [font.render(char, True, pg.Color('lightgreen')) for char in katakana]
katakana
содержит символы катаканы.font
задает шрифт и его размер.green_katakana
иlightgreen_katakana
— это списки отрендеренных символов с разными цветами.- название шрифта MS Mincho.ttf его надо загрузить в папку font проекта
Шрифт MS Mincho.ttf
Шрифт MS Mincho.ttf
— это стандартный японский шрифт, который обычно предустановлен на компьютерах с операционной системой Windows. Если у вас установлена Windows, вы можете найти этот шрифт в системной папке со шрифтами.
Если шрифт MS Mincho.ttf
отсутствует на вашем компьютере, вы можете поискать его в интернете.
Шаг 6: Создание классов Symbol и SymbolColumn
Теперь создадим два класса: Symbol
и SymbolColumn
. Класс Symbol
будет представлять отдельный символ, а SymbolColumn
— колонку символов.
class Symbol:
def __init__(self, x, y, speed):
self.x, self.y = x, y
self.speed = speed
self.value = choice(green_katakana)
self.interval = randrange(5, 30)
def draw(self, color):
frames = pg.time.get_ticks()
if not frames % self.interval:
self.value = choice(green_katakana if color == 'green' else lightgreen_katakana)
self.y = self.y + self.speed if self.y < HEIGHT else -FONT_SIZE
surface.blit(self.value, (self.x, self.y))
class SymbolColumn:
def __init__(self, x, y):
self.column_height = randrange(8, 24)
self.speed = randrange(3, 7)
self.symbols = [Symbol(x, i, self.speed) for i in range(y, y - FONT_SIZE * self.column_height, -FONT_SIZE)]
def draw(self):
[symbol.draw('green') if i else symbol.draw('lightgreen') for i, symbol in enumerate(self.symbols)]
Symbol
управляет позицией, скоростью и отрисовкой символа.SymbolColumn
создает колонку символов и управляет их отрисовкой.
Шаг 7: Создание колонок символов
Теперь создадим колонки символов, которые будут заполнять экран:
symbol_columns = [SymbolColumn(x, randrange(-HEIGHT, 0)) for x in range(0, WIDTH, FONT_SIZE)]
Каждая колонка будет начинаться с случайной позиции по вертикали.
Шаг 8: Основной цикл программы
Наконец, создадим основной цикл программы, где будет происходить отрисовка и обновление экрана:
while True:
screen.blit(surface, (0, 0))
surface.fill(pg.Color('black'))
[symbol_column.draw() for symbol_column in symbol_columns]
if not pg.time.get_ticks() % 20 and alpha_value < 170:
alpha_value += 6
surface.set_alpha(alpha_value)
[exit() for i in pg.event.get() if i.type == pg.QUIT]
pg.display.flip()
clock.tick(60)
- В этом цикле мы отрисовываем символы, управляем прозрачностью и обрабатываем события, такие как закрытие окна.
Заключение
Теперь у вас есть код, который создает эффект “матричного дождя”. Вы можете экспериментировать с параметрами, такими как скорость, цвет и размер символов, чтобы создать уникальную заставку. Удачи в вашем программировании!
