Skip to main content

Додаємо фон до нашої гри

Спочатку ми завантажимо картинку нашого фону. Для цього скопіюємо в папку з грою картинки за цим посиланням.

Функція load() модуля pygame.image завантажує зображення та створює екземпляр Surface, на якому відображено це зображення. У load() передається ім'я файлу. "Рідним" форматом є BMP, проте якщо функція pygame.image.get_extended() повертає істину, то можна завантажувати ряд інших форматів: PNG, GIF, JPG та ін.

Якщо зображення немає прозорого шару, але він необхідний, то слід скористатися методом set_colorkey() класу Surface.

У форматі PNG з альфа-каналом (коли для точок можна налаштовувати ступінь прозорості; зазвичай встановлюється повністю прозоре тло) таких проблем немає.

До всіх екземплярів Surface рекомендується застосовувати метод convert(), який, якщо не передавати аргументи, переводить формат кодування пікселів поверхні у формат кодування пікселів головної поверхні. При виконанні гри це прискорює відмальовування поверхонь.

Якщо поверхня була створена на базі зображення з альфа-каналом, замість convert() треба використовувати метод convert_alpha(), так як перший видаляє прозорі пікселі (замість них буде чорний колір).

Функції модуля pygame.transform(), що змінюють поверхні, повертають нові. Першим аргументом їм передається вихідний Surface, другим – кортеж нових розмірів.

new_surf = pygame.transform.scale(surf, (surf.get_width() // 2, surf.get_height() // 2))

Створимо для фону змінну bg, завантажимо в неї картинку фону «background.png» та змінимо її розміри на розміри ігрового поля.

bg = pygame.transform.scale(pygame.image.load('background.png'), (WIDTH, HEIGHT))

В ігровому циклі замінимо замалювання фону на фон з картинки.

# main_display.fill(COLOR_BlACK)

main_display.blit(bg, (0, 0))

Зробимо тепер фон динамічним. Щоб зображення було безперервним, нам потрібно розмістити поряд дві картинки і рухати їх. Запишемо їх початков координати X та швидкість руху.

bg = pygame.transform.scale(pygame.image.load('background.png'), (WIDTH, HEIGHT))

bg_X1 = 0

bg_X2 = bg.get_width()

bg_move = 3

Зробимо рух цих картинок в основному ігровому циклі.

# main_display.fill(COLOR_BlACK)

bg_X1 -= bg_move

bg_X2 -= bg_move

main_display.blit(bg, (bg_X1, 0))

main_display.blit(bg, (bg_X2, 0))

Залишилося зробити оновленні картинки в ситуації, коли перша картинка повністю пройшла. Це дозврлить зробити картинку безперервною.

# main_display.fill(COLOR_BlACK)

bg_X1 -= bg_move

bg_X2 -= bg_move

if bg_X1 < -bg.get_width():

bg_X1 = bg.get_width()

if bg_X2 < -bg.get_width():

bg_X2 = bg.get_width()

main_display.blit(bg, (bg_X1, 0))

main_display.blit(bg, (bg_X2, 0))

Для більш гарної промальовки зробимо швидкості гравця, бонусів та воронів, більше швидкості фону, тобто 3.

player_move_down = [0, 4]

player_move_up = [0, -4]

player_move_right = [4, 0]

player_move_left = [-4, 0]

enemy_move = [random.randint(-8, -4), 0]

bonus_move = [0, random.randint(4, 8)]

Додаємо картинку для гравця

Картинку гравця загружаємо аналогічно

# player_size = (20, 20)

player = pygame.image.load('player.png').convert_alpha()

# player.fill(COLOR_BlACK)