Введение
В этом проекте вас проведет по процессу создания игры "Змейка" с использованием Python и библиотеки Pygame. В игре будет игровое окно, змейка, бонус и счет. Змейка будет двигаться по игровому окну и есть бонус. Когда змейка ест бонус, ее длина увеличивается на единицу. Счет будет отображаться на экране.
👀 Предпросмотр

🎯 Задачи
В этом проекте вы научитесь:
- Создавать игровое окно с использованием Pygame
- Обрабатывать ввод пользователя для управления движением змейки
- Создавать и обновлять позицию змейки
- Рисовать змейку и бонус на экране
- Определять столкновения между змейкой и бонусом
- Отслеживать счет
- Отображать счет на экране
🏆 Достижения
После завершения этого проекта вы сможете:
- Использовать Pygame для создания графического игрового окна
- Обрабатывать ввод пользователя для управления игрой
- Создавать и обновлять игровые объекты
- Определять столкновения в игре
- Отображать и обновлять игровой счет
Создайте файлы проекта
Создайте новый файл с именем snake_game.py и откройте его в текстовом редакторе.
cd ~/project
touch snake_game.py
sudo pip install pygame
Импортируйте необходимые модули
В файле snake_game.py импортируйте модули pygame и random:
import pygame
import random
Инициализируйте Pygame
После импорта модулей инициализируйте Pygame:
pygame.init()
Настройте игровое окно
Определите ширину, высоту и количество кадров в секунду (FPS) игрового окна:
WIDTH = 800
HEIGHT = 600
FPS = 10
Определите цвета
Определите цвета, используемые в игре:
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
BLUE = (0, 0, 255)
YELLOW = (255, 255, 0)
BACKGROUND_COLOR = (50, 50, 50)
Настройте игровое окно
Настройте игровое окно с заданной шириной и высотой:
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Snake Game")
clock = pygame.time.Clock()
В приведенном выше коде pygame.display.set_mode() используется для инициализации отображения с указанной шириной и высотой. pygame.display.set_caption() используется для установки заголовка игрового окна. pygame.time.Clock() используется для отслеживания времени в игре.
Настройте змейку
Определите размер блока и скорость змейки:
snake_block_size = 20
snake_speed = 5
Мы устанавливаем размер блока равным 20 и скорость равной 5. Это означает, что змейка будет двигаться на 5 пикселей за раз.
Настройте игровые переменные
Определите стили шрифта и размеры шрифта для отображения счета:
font_style = pygame.font.SysFont(None, 50)
score_font = pygame.font.SysFont(None, 35)
Настройте усиление
Определите размер блока усиления:
powerup_block_size = 20
Определите функции
Определите следующие функции:
draw_snake(snake_block_size, snake_list)
Эта функция рисует змейку на экране:
def draw_snake(snake_block_size, snake_list):
for x in snake_list:
pygame.draw.rect(
screen, GREEN, [x[0], x[1], snake_block_size, snake_block_size]
)
В приведенном выше коде pygame.draw.rect() используется для рисования прямоугольника на экране. Первый параметр - это экран, второй параметр - это цвет, а третий параметр - это позиция и размер прямоугольника.
draw_powerup(powerup_x, powerup_y)
Эта функция рисует усиление на экране:
def draw_powerup(powerup_x, powerup_y):
pygame.draw.rect(
screen, RED, [powerup_x, powerup_y, powerup_block_size, powerup_block_size]
)
В приведенном выше коде pygame.draw.rect() используется для рисования прямоугольника на экране. Первый параметр - это экран, второй параметр - это цвет, а третий параметр - это позиция и размер прямоугольника.
display_score(score)
Эта функция отображает счет на экране:
def display_score(score):
value = score_font.render("Score: " + str(score), True, WHITE)
screen.blit(value, [10, 10])
В приведенном выше коде score_font.render() используется для отображения счета на экране. Первый параметр - это текст для отображения, второй параметр - это сглаживание, а третий параметр - это цвет текста. screen.blit() используется для рисования текста на экране. Первый параметр - это текст для отображения, а второй параметр - это позиция текста.
game_loop()
Эта функция содержит главный игровой цикл:
def game_loop():
## Game loop code goes here
Завершите код игрового цикла
Завершите функцию game_loop(), добавив игровую логику внутри цикла while.
def game_loop():
game_over = False
game_close = False
## Установите начальную позицию змейки
x1 = WIDTH / 2
y1 = HEIGHT / 2
x1_change = 0
y1_change = 0
## Установите тело змейки
snake_list = []
snake_length = 1
## Установите усиление
powerup_x = round(random.randrange(0, WIDTH - powerup_block_size) / 20) * 20
powerup_y = round(random.randrange(0, HEIGHT - powerup_block_size) / 20) * 20
## Установите игровой цикл
while not game_over:
while game_close:
screen.fill(BACKGROUND_COLOR)
message = font_style.render("Press SPACE to play again", True, YELLOW)
screen.blit(message, [WIDTH / 2 - 200, HEIGHT / 2 - 50])
pygame.display.flip()
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_over = True
game_close = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
game_loop()
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_over = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
x1_change = -snake_block_size
y1_change = 0
elif event.key == pygame.K_RIGHT:
x1_change = snake_block_size
y1_change = 0
elif event.key == pygame.K_UP:
y1_change = -snake_block_size
x1_change = 0
elif event.key == pygame.K_DOWN:
y1_change = snake_block_size
x1_change = 0
if x1 >= WIDTH or x1 < 0 or y1 >= HEIGHT or y1 < 0:
game_close = True
x1 += x1_change
y1 += y1_change
screen.fill(BACKGROUND_COLOR)
pygame.draw.rect(
screen, BLUE, [powerup_x, powerup_y, powerup_block_size, powerup_block_size]
)
snake_head = []
snake_head.append(x1)
snake_head.append(y1)
snake_list.append(snake_head)
if len(snake_list) > snake_length:
del snake_list[0]
for x in snake_list[:-1]:
if x == snake_head:
game_close = True
draw_snake(snake_block_size, snake_list)
display_score(snake_length - 1)
pygame.display.flip()
if x1 == powerup_x and y1 == powerup_y:
powerup_x = round(random.randrange(0, WIDTH - powerup_block_size) / 20) * 20
powerup_y = (
round(random.randrange(0, HEIGHT - powerup_block_size) / 20) * 20
)
snake_length += 1
clock.tick(snake_speed)
pygame.quit()
В приведенном выше коде pygame.QUIT используется для выхода из игры. pygame.KEYDOWN используется для проверки, нажата ли клавиша. pygame.K_LEFT, pygame.K_RIGHT, pygame.K_UP и pygame.K_DOWN используются для проверки, нажаты ли стрелки влево, вправо, вверх и вниз соответственно. pygame.draw.rect() используется для рисования прямоугольника на экране. Первый параметр - это экран, второй параметр - это цвет, а третий параметр - это позиция и размер прямоугольника. pygame.display.flip() используется для обновления экрана. pygame.time.Clock() используется для отслеживания времени в игре. pygame.time.Clock.tick() используется для установки FPS игры.
Запустите игру
Добавьте следующее в конец файла, чтобы запустить игру:
game_loop()
pygame.quit()
Наконец, переключитесь на рабочий стол и запустите проект с помощью следующей команды:
python snake_game.py

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



