Игра "Змейка" с использованием Python и Pygame

PythonBeginner
Практиковаться сейчас

Введение

В этом проекте вас проведет по процессу создания игры "Змейка" с использованием 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
Snake game running command
✨ Проверить решение и практиковаться

Резюме

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