Введение
В этом проекте вы научитесь создавать простую гоночную игру с использованием библиотеки Pygame. В игре участвует игрока в автомобиле и несколько автомобилей противника. Игровой автомобиль можно перемещать влево и вправо с помощью стрелок клавиатуры, в то время как автомобили противника движутся вниз по экрану. Задача - как можно дольше избегать столкновений с автомобилями противника. Игра будет отображать экран "Игра окончена", когда происходит столкновение, и позволять игроку перезапустить игру, нажав клавишу "R".
👀 Предварительный просмотр

🎯 Задачи
В этом проекте вы научитесь:
- настраивать игровое окно и импортировать необходимые библиотеки;
- определять цвета и загружать изображения автомобилей;
- определять игровой автомобиль игрока;
- определять автомобили противника;
- определять переменные и шрифт для экрана "Игра окончена";
- реализовывать игровую логику;
- отображать экран "Игра окончена";
- выходить из игры.
🏆 Достижения
После завершения этого проекта вы сможете:
- использовать библиотеку Pygame для создания игрового окна;
- загружать и отображать изображения в игре;
- обрабатывать столкновения между игровыми объектами;
- реализовывать игровой цикл для непрерывной игры;
- обрабатывать ввод пользователя для управления игровыми объектами;
- отображать текст на экране с использованием модуля шрифтов Pygame.
Создайте файлы проекта
- Создайте новый файл с именем
racing_game.py.
cd ~/project
touch racing_game.py
Настройте игровое окно и импортируйте необходимые библиотеки
import pygame
import random
## Initialize Pygame
pygame.init()
## Set up the game window
window_width = 800
window_height = 600
window = pygame.display.set_mode((window_width, window_height))
pygame.display.set_caption("Racing Game")
В этом шаге мы импортируем библиотеку pygame и инициализируем ее. Затем мы настраиваем игровое окно шириной в 800 пикселей и высотой в 600 пикселей. Также задаем заголовок окна "Racing Game".
Установите библиотеку pygame, выполнив следующую команду в терминале:
sudo pip install pygame
Определите цвета и загрузите изображения автомобилей
## Define colors
background_color = (30, 30, 30)
player_car_color = (255, 255, 255)
enemy_car_color = (255, 0, 0)
text_color = (255, 255, 255)
## Load car images
player_car_img = pygame.image.load("player_car.png").convert_alpha()
enemy_car_img = pygame.image.load("enemy_car.png").convert_alpha()
В этом шаге мы определяем несколько цветов, используемых в игре: background_color, player_car_color, enemy_car_color и text_color. Также мы загружаем изображения для игрового автомобиля игрока и автомобиля противника с использованием функции pygame.image.load().
Изображения player_car.png и enemy_car.png находятся в каталоге ~/project.
Определите игровой автомобиль игрока
## Define the player car
player_car_width = player_car_img.get_width()
player_car_height = player_car_img.get_height()
player_car_x = window_width // 2 - player_car_width // 2
player_car_y = window_height - player_car_height - 10
player_car_speed = 5
В этом шаге мы определяем свойства игрового автомобиля игрока: player_car_width и player_car_height задаются размером изображения игрового автомобиля игрока. player_car_x и player_car_y представляют начальную позицию игрового автомобиля игрока на экране. player_car_speed определяет, насколько быстро может двигаться игровой автомобиль игрока.
Определите противников
## Define the enemy cars
enemy_cars = []
num_enemy_cars = 3
enemy_car_width = 80
enemy_car_height = 160
for _ in range(num_enemy_cars):
enemy_car_x = random.randint(0, window_width - enemy_car_width)
enemy_car_y = random.randint(-window_height, -enemy_car_height)
enemy_car_speed = random.randint(2, 5)
enemy_cars.append({"x": enemy_car_x, "y": enemy_car_y, "speed": enemy_car_speed})
В этом шаге мы определяем свойства автомобилей противника: enemy_cars - это список, который будет хранить объекты автомобилей противника. num_enemy_cars определяет количество автомобилей противника в игре. enemy_car_width и enemy_car_height представляют размеры изображения автомобиля противника. Мы используем цикл для генерации случайных позиций и скоростей для каждого автомобиля противника и добавляем их в список enemy_cars.
Определите переменные и шрифт для окончания игры
## Define game over variables
game_over = False
font = pygame.font.Font(None, 50)
game_over_text = font.render("Game Over", True, text_color)
restart_text = font.render("Press R to Restart", True, text_color)
В этом шаге мы определяем переменные, связанные с экраном окончания игры: game_over - это логическая переменная, которая показывает, закончена ли игра или нет. font - это объект шрифта Pygame размером 50. Мы выводим текст "Game Over" и "Press R to Restart" с использованием шрифта и сохраняем их в переменных game_over_text и restart_text.
Цикл игры
## Game loop
running = True
clock = pygame.time.Clock()
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_r and game_over:
game_over = False
player_car_x = window_width // 2 - player_car_width // 2
player_car_y = window_height - player_car_height - 10
for enemy_car in enemy_cars:
enemy_car["x"] = random.randint(0, window_width - enemy_car_width)
enemy_car["y"] = random.randint(-window_height, -enemy_car_height)
if not game_over:
## Game logic code goes here...
## Refresh the window
window.fill(background_color)
window.blit(player_car_img, (player_car_x, player_car_y))
for enemy_car in enemy_cars:
window.blit(enemy_car_img, (enemy_car["x"], enemy_car["y"]))
else:
## Game over screen code goes here...
pygame.display.update()
clock.tick(60)
В этом шаге мы создаем игровой цикл с использованием цикла while. Цикл работает, пока переменная running имеет значение True. Мы обрабатываем события, такие как выход из игры и перезапуск игры, проверяя типы событий и нажатые клавиши. Когда игра не окончена, выполняется код внутри блока if not game_over, который включает в себя игровую логику и отрисовку игрового автомобиля игрока и автомобилей противника на экране. Когда игра окончена, выполняется код внутри блока else, который отображает экран окончания игры. Наконец, мы обновляем экран и устанавливаем частоту кадров в 60 кадров в секунду.
Код игровой логики
if not game_over:
## Move the player car
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and player_car_x > player_car_speed:
player_car_x -= player_car_speed
if (
keys[pygame.K_RIGHT]
and player_car_x < window_width - player_car_width - player_car_speed
):
player_car_x += player_car_speed
## Move the enemy cars
for enemy_car in enemy_cars:
enemy_car["y"] += enemy_car["speed"]
if enemy_car["y"] > window_height:
enemy_car["x"] = random.randint(0, window_width - enemy_car_width)
enemy_car["y"] = random.randint(-window_height, -enemy_car_height)
enemy_car["speed"] = random.randint(2, 5)
## Check for collision
if player_car_y < enemy_car["y"] + enemy_car_height:
if (
player_car_x < enemy_car["x"] + enemy_car_width
and player_car_x + player_car_width > enemy_car["x"]
):
game_over = True
В этом шаге мы реализуем код игровой логики внутри игрового цикла. Мы проверяем нажатия клавиш пользователя для перемещения игрового автомобиля игрока влево и вправо. Мы обновляем позиции автомобилей противника и проверяем, произошло ли столкновение между игровым автомобилем игрока и автомобилями противника. Если столкновение произошло, мы устанавливаем переменную game_over в значение True.
Код экрана окончания игры
else:
## Game over screen
window.fill(background_color)
game_over_rect = game_over_text.get_rect(
center=(window_width // 2, window_height // 2 - 50)
)
restart_rect = restart_text.get_rect(
center=(window_width // 2, window_height // 2 + 50)
)
window.blit(game_over_text, game_over_rect)
window.blit(restart_text, restart_rect)
В этом шаге мы реализуем код экрана окончания игры внутри игрового цикла. Мы отображаем текст "Игра окончена" и текст перезапуска на экране с использованием функции window.blit(). Текст центрируется на экране с использованием свойств get_rect() и center.
Выйти из игры
## Quit the game
pygame.quit()
В этом последнем шаге мы завершаем игру и закрываем окно Pygame, когда игровой цикл завершается.
Теперь вы можете запустить игру с помощью следующей команды:
python racing_game.py

Резюме
Поздравляем! Вы успешно создали простую гоночную игру с использованием библиотеки Pygame. В игре есть игровой автомобиль игрока, который можно перемещать влево и вправо, а также несколько автомобилей противника. Задача - максимально долго избегать столкновений с автомобилями противника. В игре также есть экран окончания игры и возможность перезапустить игру, нажав клавишу "R". Продолжайте практиковаться и экспериментировать, чтобы улучшить свои навыки в разработке игр.



