Создаем змейку на Python: изучаем основы программирования
Змейка (Snake) - это игровой проект, который можно реализовать на языке Python. Знаете ли Вы, что первая версия змейки была выпущена в 1976 году и была разработана в рамках игрового проекта Gremlin Industries? Затем ее популярность распространилась на другие платформы, такие как аркадные автоматы и ПК.
В современном мире существует множество вариаций змейки, но мы рассмотрим базовую игру, которую можно создать с помощью Python. Основные компоненты змейки включают:
1. Змейку - объект, который состоит из головы и тела, которые связаны между собой.
2. Пища - объект, который появляется на экране и змейка должна его съесть, чтобы увеличить свой размер и набрать очки.
3. Игровой экран - объект, на котором размещены змейка и еда.
Для разработки змейки Вам понадобятся библиотеки Pygame и Random, которые установить можно при помощи команды pip install pygame в командной строке. Далее создадим файл snake.py и добавим некоторые базовые настройки Pygame:
python
import pygame
import random
WIDTH = 640
HEIGHT = 480
FPS = 30
# цвета
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
# инициализация Pygame
pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption('Snake')
clock = pygame.time.Clock()
Далее определим класс змейки, который будет иметь атрибуты для хранения координат, цвета и т.д. Методы класса будут отвечать за перемещение змейки, проверку на столкновение с едой или дошла ли змейка до стены и т.д.
python
class Snake:
def __init__(self, x, y, color):
self.x = x
self.y = y
self.color = color
self.dx = 0
self.dy = 0
self.body = []
self.body.append((self.x, self.y))
def move(self):
self.x += self.dx
self.y += self.dy
self.body.append((self.x, self.y))
if len(self.body) > 1:
del self.body[0]
def draw(self, surface):
for xy in self.body:
rect = pygame.Rect(xy[0], xy[1], 10, 10)
pygame.draw.rect(surface, self.color, rect)
def check_collision(self, rect):
if rect.colliderect(pygame.Rect(self.x, self.y, 10, 10)):
return True
return False
def check_bounds(self, bounds):
if not bounds.contains(pygame.Rect(self.x, self.y, 10, 10)):
return True
return False
Теперь реализуем класс еды, который будет также иметь координаты и цвет, но не будет перемещаться. Метод класса class является простым методом для рисования еды.
python
class Food:
def __init__(self, x, y):
self.x = x
self.y = y
self.color = RED
def draw(self, surface):
rect = pygame.Rect(self.x, self.y, 10, 10)
pygame.draw.rect(surface, self.color, rect)
Когда создаются объекты змейки и еды, они будут добавляться в соответствующие списки и используемы для игрового цикла.
python
snake = Snake(WIDTH / 2, HEIGHT / 2, GREEN)
foods = []
for i in range(10):
x = random.randrange(0, WIDTH)
y = random.randrange(0, HEIGHT)
food = Food(x, y)
foods.append(food)
Теперь можем определить игровой цикл, который будет отрисовывать змейку и пищу на экране, проверять на столкновения или достижение границы и перемещать змейку.
python
run = True
while run:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
snake.dx = -10
snake.dy = 0
if event.key == pygame.K_RIGHT:
snake.dx = 10
snake.dy = 0
if event.key == pygame.K_UP:
snake.dx = 0
snake.dy = -10
if event.key == pygame.K_DOWN:
snake.dx = 0
snake.dy = 10
# проверка на столкновение змейки и еды
for food in foods:
if snake.check_collision(pygame.Rect(food.x, food.y, 10, 10)):
foods.remove(food)
x = random.randrange(0, WIDTH)
y = random.randrange(0, HEIGHT)
food = Food(x, y)
foods.append(food)
# проверка на столкновение змейки со стеной
if snake.check_bounds(pygame.Rect(0, 0, WIDTH, HEIGHT)):
run = False
# перемещение змейки
snake.move()
# отрисовка змейки, еды и экрана игры
screen.fill(BLACK)
for food in foods:
food.draw(screen)
snake.draw(screen)
pygame.display.flip()
pygame.quit()
В итоге мы получаем полностью работающий пример змейки на языке Python с использованием библиотеки Pygame. В целом, реализация основного проекта занимает 90% времени и усилий при работе над большинством игр, и змейка является отличным стартовым проектом для начинающих разработчиков, желающих научиться программированию на Python.