Глава 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 и несколько мячей сразу