Игра "Змейка"
Шаг 1: Подготовка
Для начала нам понадобится библиотека Pygame. Это мощный инструмент для создания игр на Python. Установи её, если ещё не сделал этого:
pip install pygame
Теперь, когда у нас есть Pygame, давай создадим файл snake_game.py. В этом файле мы будем писать код нашей игры.
Шаг 2: Инициализация Pygame
Первое, что нужно сделать, это импортировать библиотеку и инициализировать её:
import pygame
import time
import random
pygame.init() # Инициализация Pygame
Здесь мы импортируем необходимые модули. time пригодится для управления временем в игре, а random – для случайного появления еды для змейки.
Шаг 3: Настройка экрана
Теперь давай создадим экран для нашей игры:
width, height = 600, 400
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption('Змейка на Python') # Заголовок окна
Вот и всё! Мы создали окно размером 600x400 пикселей и установили заголовок. Теперь у нас есть место для нашей змейки и еды!
Шаг 4: Определяем цвета и начальные параметры
Пора добавить немного цвета! Давай определим цвета и начальные параметры змейки:
black = (0, 0, 0)
white = (255, 255, 255)
red = (213, 50, 80)
green = (0, 255, 0)
blue = (50, 153, 213)
snake_block = 10
snake_speed = 15
Теперь у нас есть цвета для фона, змейки и еды. snakeblock определяет размер блока змейки, а snakespeed – скорость её движения.
Шаг 5: Создание змейки
Теперь давай создадим функцию для рисования змейки:
def oursnake(snakeblock, snake_list):
for x in snake_list:
pygame.draw.rect(screen, green, [x[0], x[1], snakeblock, snakeblock])
Эта функция принимает размер блока и список сегментов змейки. Она рисует каждый сегмент на экране. Простое и элегантное решение!
Шаг 6: Основной игровой цикл
Теперь пора создать основной игровой цикл. Это сердце нашей игры:
def game_loop():
game_over = False
game_close = False
x1 = width / 2
y1 = height / 2
x1_change = 0
y1_change = 0
snake_List = []
Lengthofsnake = 1
foodx = round(random.randrange(0, width - snake_block) / 10.0) * 10.0
foody = round(random.randrange(0, height - snake_block) / 10.0) * 10.0
while not game_over:
while game_close == True:
screen.fill(red)
font_style = pygame.font.SysFont("bahnschrift", 25)
mesg = font_style.render("Ты проиграл! Нажми C для перезапуска или Q для выхода", True, white)
screen.blit(mesg, [width / 6, height / 3])
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_q:
game_over = True
game_close = False
if event.key == pygame.K_c:
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:
x1change = -snakeblock
y1_change = 0
elif event.key == pygame.K_RIGHT:
x1change = snakeblock
y1_change = 0
elif event.key == pygame.K_UP:
y1change = -snakeblock
x1_change = 0
elif event.key == pygame.K_DOWN:
y1change = snakeblock
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(blue)
pygame.draw.rect(screen, white, [foodx, foody, snakeblock, snakeblock])
snake_Head = []
snake_Head.append(x1)
snake_Head.append(y1)
snakeList.append(snakeHead)
if len(snakeList) > Lengthof_snake:
del snake_List[0]
for x in snake_List[:-1]:
if x == snake_Head:
game_close = True
oursnake(snakeblock, snake_List)
pygame.display.update()
if x1 == foodx and y1 == foody:
foodx = round(random.randrange(0, width - snake_block) / 10.0) * 10.0
foody = round(random.randrange(0, height - snake_block) / 10.0) * 10.0
Lengthofsnake += 1
clock.tick(snake_speed)
pygame.quit()
quit()
clock = pygame.time.Clock()
game_loop()
В этом коде мы обрабатываем события клавиатуры для управления змейкой и проверяем столкновения с границами экрана и самой собой. Если змейка съедает еду, она становится длиннее! Это классика жанра.
Шаг 7: Запуск игры
Теперь ты готов запустить свою игру! Просто выполни команду:
python snake_game.py
Если всё сделано правильно, ты увидишь окно с игрой "Змейка". Управляй стрелками на клавиатуре и наслаждайся!
Интересные факты
- Змейка была одной из первых игр на мобильных телефонах – она появилась на Nokia в конце 90-х!
- Существует множество вариаций игры: от простых до сложных с множеством уровней и препятствий.
- Создание "Змейки" – это отличный способ научиться основам программирования и логики игры.
Теперь ты знаешь, как создать свою собственную "Змейку" на Python! Надеюсь, ты получил удовольствие от этого процесса. Удачи с твоими будущими проектами!
Весь код целиком:
import pygame
import time
import random
# Инициализация Pygame
pygame.init()
# Настройки экрана
width, height = 600, 400
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption('Змейка на Python')
# Определение цветов
black = (0, 0, 0)
white = (255, 255, 255)
red = (213, 50, 80)
green = (0, 255, 0)
blue = (50, 153, 213)
# Параметры змейки
snake_block = 10
snake_speed = 15
# Функция для рисования змейки
def our_snake(snake_block, snake_list):
for x in snake_list:
pygame.draw.rect(screen, green, [x[0], x[1], snake_block, snake_block])
# Основной игровой цикл
def game_loop():
game_over = False
game_close = False
x1 = width / 2
y1 = height / 2
x1_change = 0
y1_change = 0
snake_List = []
Length_of_snake = 1
foodx = round(random.randrange(0, width - snake_block) / 10.0) * 10.0
foody = round(random.randrange(0, height - snake_block) / 10.0) * 10.0
clock = pygame.time.Clock()
while not game_over:
while game_close == True:
screen.fill(red)
font_style = pygame.font.SysFont("bahnschrift", 25)
mesg = font_style.render("Ты проиграл! Нажми C для перезапуска или Q для выхода", True, white)
screen.blit(mesg, [width / 6, height / 3])
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_q:
game_over = True
game_close = False
if event.key == pygame.K_c:
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
y1_change = 0
elif event.key == pygame.K_RIGHT:
x1_change = snake_block
y1_change = 0
elif event.key == pygame.K_UP:
y1_change = -snake_block
x1_change = 0
elif event.key == pygame.K_DOWN:
y1_change = snake_block
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(blue)
pygame.draw.rect(screen, white, [foodx, foody, snake_block, snake_block])
snake_Head = []
snake_Head.append(x1)
snake_Head.append(y1)
snake_List.append(snake_Head)
if len(snake_List) > Length_of_snake:
del snake_List[0]
for x in snake_List[:-1]:
if x == snake_Head:
game_close = True
our_snake(snake_block, snake_List)
pygame.display.update()
if x1 == foodx and y1 == foody:
foodx = round(random.randrange(0, width - snake_block) / 10.0) * 10.0
foody = round(random.randrange(0, height - snake_block) / 10.0) * 10.0
Length_of_snake += 1
clock.tick(snake_speed)
pygame.quit()
quit()
game_loop()