Создание анимации дождя из символов кода с использованием Pygame

PythonBeginner
Практиковаться сейчас

Введение

В этом проекте вы научитесь создавать простую анимацию дождя из символов кода с использованием библиотеки Pygame в Python. Анимации дождя из символов кода, популярные благодаря фильмам типа «Матрица», отображают на экране падающие символы, создавая впечатление цифрового дождя. Мы будем использовать библиотеку Pygame для создания анимации и ее отображения на окне.

👀 Предварительный просмотр

Code rain

🎯 Задачи

В этом проекте вы научитесь:

  • настраивать окно для анимации в Pygame;
  • определять класс «Капля дождя», чтобы представлять каждый падающий символ;
  • генерировать и отображать несколько экземпляров класса Капля дождя;
  • реализовывать главный цикл для непрерывного обновления анимации;
  • правильно закрывать окно с анимацией.

🏆 Достижения

После завершения этого проекта вы сможете:

  • использовать библиотеку Pygame для создания анимаций;
  • определять и использовать класс в Python;
  • обрабатывать события пользователя в Pygame;
  • создавать главный цикл анимации в Pygame;
  • правильно закрывать окно с анимацией в Pygame.

Создайте файлы проекта

Прежде чем начать, убедитесь, что у вас установлена библиотека Pygame. Если ее нет, вы можете установить ее с помощью pip:

sudo pip install pygame

Далее создайте файл с именем code_rain.py в своем предпочитаемом редакторе кода или IDE. Это будет главный файл, где вы напишете код для игры Code Rain.

cd ~/project
touch code_rain.py
✨ Проверить решение и практиковаться

Настройка окна анимации

Внутри файла code_rain.py импортируйте необходимые библиотеки в начале кода:

import pygame
import random

Затем инициализируйте Pygame, вызвав pygame.init():

pygame.init()

Далее настройте окно для анимации, определив ширину, высоту и заголовок:

width, height = 800, 600
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("Code Rain")

Определите цвета, используемые в анимации:

background_color = (0, 0, 0)
text_color = (0, 255, 0)

Настройки шрифта:

font = pygame.font.Font(None, 36)
✨ Проверить решение и практиковаться

Определение класса капель дождя

Далее мы определяем класс Raindrop, который представляет каждый падающий символ в анимации дождя из символов кода. Класс Raindrop содержит атрибуты, такие как начальная позиция, текст и скорость падения каждой капли дождя.

class Raindrop:
    def __init__(self):
        self.x = random.randint(0, width)
        self.y = random.randint(0, height)
        self.text = chr(random.randint(33, 126))
        self.speed = random.randint(1, 5)

    def fall(self):
        self.y += self.speed
        if self.y > height:
            self.y = 0
            self.x = random.randint(0, width)

    def display(self):
        text_surface = font.render(self.text, True, text_color)
        screen.blit(text_surface, (self.x, self.y))

Метод __init__ вызывается при создании экземпляра класса для инициализации свойств капли дождя, включая случайную начальную позицию (x, y), случайный текстовый символ (ASCII между 33 и 126) и случайную скорость падения (от 1 до 5).

Метод fall используется для движения капель дождя вниз. Он увеличивает значение self.y в соответствии с скоростью капли дождя. Если капля дождя выходит за пределы экрана (когда self.y больше высоты экрана), сбрасывает ее в верхнюю часть экрана и случайным образом выбирает новую позицию x на экране.

Метод display используется для отображения капель дождя. Он использует функцию font.render из библиотеки pygame для создания текстовой поверхности и отображает ее в позиции капли дождя (self.x, self.y) на экране.

✨ Проверить решение и практиковаться

Генерация и отображение капель дождя

Теперь мы создадим и отобразим несколько экземпляров класса Raindrop, чтобы имитировать падающие символы. Код ниже генерирует заданное количество капель дождя и обновляет их позиции на экране.

num_raindrops = 100
raindrops = [Raindrop() for _ in range(num_raindrops)]
✨ Проверить решение и практиковаться

Обработка главного цикла

В этом шаге мы реализуем главный цикл, который обрабатывает анимацию, постоянно обновляя экран. Он также слушает событие выхода, чтобы корректно закрыть окно.

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    screen.fill(background_color)

    for drop in raindrops:
        drop.fall()
        drop.display()

    pygame.display.flip()

pygame.quit()

Основная часть анимационного цикла - это цикл while, где переменная running контролирует цикл. Цикл будет продолжать работать только если running равно True.

Внутри анимационного цикла используйте pygame.event.get() для получения списка событий pygame и проверьте каждое событие, перебирая список событий. В этом случае основная проверка - это наличие события выхода pygame.QUIT, которое генерируется, когда пользователь закрывает окно анимации. Если событие выхода обнаружено, установите running в False, чтобы выйти из анимационного цикла.

screen.fill(background_color) заполняет фон анимационного окна screen, чтобы скрыть содержимое предыдущего кадра в preparation для рисования нового кадра.

Переберите список raindrops, вызовите метод fall() для каждого объекта капли дождя, чтобы она упала, и вызовите метод display(), чтобы отобразить каплю дождя на игровом окне.

pygame.display.flip() используется для обновления всех вышеперечисленных рисовательных операций на экране для анимации.

После окончания анимационного цикла вызовите pygame.quit() для очистки библиотеки pygame и выхода из анимации.

✨ Проверить решение и практиковаться

Запустите проект

Наконец, переключитесь на рабочий стол и запустите проект с помощью следующей команды:

python code_rain.py
Code rain
✨ Проверить решение и практиковаться

Резюме

В этом проекте вы узнали, как создать простую анимацию дождя из символов кода с использованием библиотеки Pygame в Python. Вы инициализировали модуль Pygame, определили класс Raindrop, сгенерировали и отобразили несколько капель дождя, и реализовали главный цикл для обработки анимации. Этот проект дает базовое понимание того, как создавать простые анимации с использованием Pygame.