🎮 Все игры 🧱 Арканоид
1 2 3 4 5
Урок 2 · самый важный

Мяч летает и отскакивает

Что ты увидишь Жёлтый мяч носится по экрану и отскакивает от всех четырёх стен. Файл: step2_ball.py
⬇️ Скачать код урока

⭐ Главная идея всей игры

У мяча есть позиция (bx, by) и скорость (dx, dy) — на сколько он сдвигается за кадр по горизонтали и вертикали. Каждый кадр прибавляем скорость к позиции:

bx += dx
by += dy

А отскок — это смена знака у нужной скорости. Ударился о левую или правую стену — разворачиваем dx. О потолок или пол — разворачиваем dy:

летел вправо dx = 4→ стена → dx = -4 (летит влево)

📝 Код урока (только мяч)

# Мяч: позиция (bx, by) и скорость (dx, dy)
BALL_R = 8
bx, by = WIDTH / 2, HEIGHT / 2
dx, dy = 4.0, 4.0

while True:
    # ... события и ракетка ...

    # Мяч летит
    bx += dx
    by += dy

    # Отскок: у краёв меняем знак скорости
    if bx < BALL_R or bx > WIDTH - BALL_R:
        dx = -dx
    if by < BALL_R or by > HEIGHT - BALL_R:
        dy = -dy

    # Рисуем мяч кружком
    pygame.draw.circle(screen, BALL_COLOR, (int(bx), int(by)), BALL_R)

🔍 Мелочи, которые важно понять

Почему BALL_R в проверке?

bx — это центр мяча, а BALL_R — его радиус. Мяч касается стены не центром, а краем — поэтому отскакиваем, когда центр подошёл к стене на радиус: bx < BALL_R (левый край) и bx > WIDTH - BALL_R (правый).

Почему скорость дробная (4.0)?

Скоро мяч будет лететь под углом с дробной скоростью (например 3.7). Поэтому сразу пишем 4.0, а координаты держим дробными, а при рисовании превращаем в целые: int(bx).

🎮 Попробуй сам 1. Сделай мяч быстрее: dx, dy = 7.0, 7.0.
2. Запусти его под другим углом: dx, dy = 3.0, 6.0.
3. Сделай мяч больше: BALL_R = 14.
← НазадУрок 1 — Ракетка