Глава 23 · Ещё больше мини-проектов

Проект 23-4: Отскакивающий от четырёх стен мяч

Та же физика, что и в главе 20, — но теперь мяч это класс, а значит, их может быть сколько угодно.

Проект 23-4: Отскакивающий от четырёх стен мяч с Pygame

В главе 20 мяч был устроен через обычные переменные и функции. Теперь, когда мы знаем классы (глава 15), опишем мяч как объект — и сразу получим возможность легко завести несколько мячей одновременно:

myach_klass.py
class Myach:
    def __init__(self, x, y, dx, dy, radius, cvet):
        self.x = x
        self.y = y
        self.dx = dx
        self.dy = dy
        self.radius = radius
        self.cvet = cvet
        self.otskokov = 0

    def shag(self):
        self.x += self.dx
        self.y += self.dy
        if self.x - self.radius < 0 or self.x + self.radius > SHIRINA:
            self.dx = -self.dx
            self.otskokov += 1
        # ... то же самое для self.y и VYSOTA

    def narisovat(self):
        pygame.draw.circle(screen, self.cvet, (int(self.x), int(self.y)), self.radius)
Список объектов вместо списка переменных
Раньше пришлось бы заводить отдельные x1, y1, dx1, dy1, x2, y2, dx2, dy2, … для каждого мяча. Теперь достаточно myachi = [Myach(...), Myach(...), Myach(...)] — и цикл for myach in myachi: myach.shag() двигает их все разом.

Полный код: 📄 projects/pygame/bouncing-balls-oop/bouncing_balls.py

★★ Самостоятельная задача
Столкновение мячей друг с другом

Добавьте проверку расстояния между каждой парой мячей — если они соприкоснулись, поменяйте местами их dx и dy.

Практика в Jupyter Notebook
23-04-otskakivayushij-myach.ipynb · класс Myach и несколько мячей сразу
Открыть ноутбук →