Додаємо фон до нашої гри
Спочатку ми завантажимо картинку нашого фону. Для цього скопіюємо в папку з грою картинки за цим посиланням.
Функція 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)