Посібник з Pygame Zero

Зміст

1. Про Pygame Zero

Pygame Zero — це бібліотека для початківців, що спрощує створення ігор на Python. Вона базується на Pygame, але приховує складні деталі, дозволяючи зосередитися на логіці гри.

Головні переваги:

Приклад найпростішої програми:

import pgzrun

WIDTH = 800
HEIGHT = 600

# Створюємо актора (спрайт)
actor = Actor('alien')  # alien.png має бути у теці images/
actor.pos = (400, 300)

def draw():
    screen.clear()
    actor.draw()

def on_mouse_move(pos):
    actor.pos = pos

pgzrun.go()
↑ До змісту

2. Об'єкти

У Pygame Zero основні об'єкти — це спрайти , їх ще називають акторами (Actor). Актор — це спрайт з програмним керуванням (переміщення, поворот, тощо).

Створення актора:

actor = Actor('image_name')

де 'image_name' — назва файлу зображення (без розширення), який має знаходитися в папці images.

Порада: Зображення повинні бути у форматах PNG або JPG і зберігатися в папці images поруч із файлом гри.
↑ До змісту

3. Вікно

Розмір вікна гри задається змінними WIDTH та HEIGHT. Ці змінні повинні бути визначені на початку програми.

WIDTH = 800
HEIGHT = 600

player = Actor('player')
player.pos = 100, 56

Координати в Pygame Zero починаються з верхнього лівого кута екрану (0, 0). Позиція актора задається через властивість pos (або окремо x та y).

↑ До змісту

4. Перемалювання

Функція draw() викликається автоматично для перемалювання всіх об'єктів, які знаходяться на екрані.

def draw():
    screen.clear()
    player.draw()
    enemy.draw()
    screen.draw.text("Рахунок: " + str(score), (10, 10))

Важливо завжди починати з screen.clear(), щоб очистити попередній кадр. Для малювання тексту використовуйте screen.draw.text().

↑ До змісту

5. Спрайти та їх властивості

Актори мають багато корисних властивостей:

player = Actor('hero')
player.pos = (400, 300)
player.angle = 45
player.scale = 1.5

# Зміна зображення
player.image = 'hero_angry'
Порада: Для анімації можна змінювати властивість image залежно від стану гри.
↑ До змісту

6. Переміщення спрайтів

Переміщення об'єктів відбувається у функції update(), яка викликається перед кожним перемалюванням.

def update():
    if keyboard.right:
        player.x += 5
    if keyboard.left:
        player.x -= 5
    if keyboard.up:
        player.y -= 5
    if keyboard.down:
        player.y += 5
↑ До змісту

7. Використання клавіатури

Pygame Zero надає простий доступ до стану клавіш через об'єкт keyboard.

def update():
    if keyboard.space:
        fire_bullet()
    if keyboard.a:
        player.x -= 3
    if keyboard.d:
        player.x += 3

Можна також використовувати спеціальні функції для обробки натискання клавіш:

def on_key_down(key):
    if key == keys.SPACE:
        create_explosion()
    elif key == keys.ESCAPE:
        exit()
↑ До змісту

8. Події миші

Обробка подій миші здійснюється через спеціальні функції:

def on_mouse_down(pos, button):
    if button == mouse.LEFT:
        print("Ліва кнопка натиснута в", pos)
    elif button == mouse.RIGHT:
        print("Права кнопка натиснута")

def on_mouse_move(pos):
    player.pos = pos

Ви також можете перевіряти стан кнопок миші у функції update():

def update():
    if mouse.LEFT:
        player.angle += 2
↑ До змісту

9. Звуки та музика

Для роботи зі звуком використовуйте модуль music та функцію play_sound().

# Відтворення звуку
def on_key_down(key):
    if key == keys.SPACE:
        sounds.jump.play()

# Керування музикою
music.play('background_theme')
music.set_volume(0.5)

# Зупинка музики
music.stop()

Звукові файли повинні знаходитися в папці sounds (для коротких звуків) або music (для фонової музики).

Підтримувані формати: WAV, OGG, MP3 (залежно від системи).
↑ До змісту

10. Таймер

Для відкладеного виконання коду використовуйте функцію clock.schedule().

def spawn_enemy():
    enemies.append(Actor('enemy'))

# Створювати ворога кожні 3 секунди
clock.schedule_interval(spawn_enemy, 3.0)

# Виконати функцію через 5 секунд один раз
clock.schedule(game_over, 5.0)

def game_over():
    print("Час вичерпано!")

Щоб скасувати заплановану подію, збережіть посилання на неї:

def cancel_timer():
    global spawn_event
    clock.unschedule(spawn_event)

spawn_event = clock.schedule_interval(spawn_enemy, 2.0)
↑ До змісту