Вопрос от Анонимного юзера 11 марта 2026 11:28
Напишите программный код для игры пакмэн или змейка
Ответ нейросети
11 марта 2026 11:28
Ниже приведен полный рабочий пример простой игры змейка на Python с использованием Pygame. Это удобный и наглядный вариант для понимания основ игровой логики: управление, движение змейки, появление еды, рост, столкновения и счёт. Если хочешь, могу позже расписать упрощённую версию Pac-Man.
Что понадобится и как запустить
- Python 3.x
- Установить Pygame: pip install pygame
- Скопировать код в файл, например snake.py
- Запустить: python snake.py
Код (Snake)
import pygame
import random
import sys
# Константы
CELL_SIZE = 20 # размер клетки сетки в пикселях
GRID_WIDTH = 30 # количество клеток по горизонтали
GRID_HEIGHT = 20 # количество клеток по вертикали
SCREEN_WIDTH = GRID_WIDTH * CELL_SIZE
SCREEN_HEIGHT = GRID_HEIGHT * CELL_SIZE
# Цвета
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GREEN = (0, 180, 0)
HEAD_GREEN = (0, 100, 0)
RED = (200, 0, 0)
def place_food(snake):
"""Возвращает случайную позицию пищи, не занятую змеёй."""
while True:
pos = (random.randrange(GRID_WIDTH), random.randrange(GRID_HEIGHT))
if pos not in snake:
return pos
def draw_snake(screen, snake):
"""Рисует змею на экране: голова другим оттенком."""
for i, (x, y) in enumerate(snake):
rect = pygame.Rect(x * CELL_SIZE, y * CELL_SIZE, CELL_SIZE, CELL_SIZE)
if i == 0:
pygame.draw.rect(screen, HEAD_GREEN, rect) # голова
else:
pygame.draw.rect(screen, GREEN, rect)
def draw_food(screen, food):
"""Рисует пищу."""
x, y = food
rect = pygame.Rect(x * CELL_SIZE, y * CELL_SIZE, CELL_SIZE, CELL_SIZE)
pygame.draw.rect(screen, RED, rect)
def main():
pygame.init()
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("Snake")
clock = pygame.time.Clock()
font = pygame.font.SysFont(None, 36)
# Начальные параметры
snake = [(5, 10), (4, 10), (3, 10)] # начальная длина 3 клетки
direction = (1, 0) # движение вправо
next_direction = direction
food = place_food(snake)
score = 0
game_over = False
while True:
# Обработка событий
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.KEYDOWN:
# Управление стрелками; запрет на обратное направление
if event.key == pygame.K_UP and direction != (0, 1):
next_direction = (0, -1)
elif event.key == pygame.K_DOWN and direction != (0, -1):
next_direction = (0, 1)
elif event.key == pygame.K_LEFT and direction != (1, 0):
next_direction = (-1, 0)
elif event.key == pygame.K_RIGHT and direction != (-1, 0):
next_direction = (1, 0)
elif event.key == pygame.K_r and game_over:
main() # перезапуск игры
elif event.key == pygame.K_q:
pygame.quit()
sys.exit()
if not game_over:
# Принятие направления
direction = next_direction
head_x, head_y = snake[0]
dx, dy = direction
new_head = (head_x + dx, head_y + dy)
# Столкновение со стенами
if not (0 <= new_head[0] < GRID_WIDTH and 0 <= new_head[1] < GRID_HEIGHT):
game_over = True
# Само столкновение
elif new_head in snake:
game_over = True
else:
# Перемещение: добавляем новую голову
snake.insert(0, new_head)
if new_head == food:
# съели пищу: увеличить счёт и поставить новую пищу
score += 1
food = place_food(snake)
else:
# обычное движение: удаляем хвост
snake.pop()
# Рендеринг
screen.fill(BLACK)
draw_food(screen, food)
draw_snake(screen, snake)
score_text = font.render(f"Score: {score}", True, WHITE)
screen.blit(score_text, (5, 5))
if game_over:
over_text = font.render("Game Over! Press R to restart", True, WHITE)
screen.blit(over_text, (
SCREEN_WIDTH // 2 - over_text.get_width() // 2,
SCREEN_HEIGHT // 2 - 20
))
pygame.display.flip()
if not game_over:
# скорость: выше счёт - быстрее змея
clock.tick(10 + score // 2)
if __name__ == "__main__":
main()
Пояснение основных частей кода (пошагово)
- Инициализация и константы
- CELL_SIZE задаёт размер клетки сетки в пикселях, GRID_WIDTH и GRID_HEIGHT — размеры поля по клеткам. SCREEN_WIDTH/HEIGHT — размер окна.
- Цвета — для змейки, головы, пищи и фона.
- place_food(snake)
- Генерирует случайную клетку в пределах поля, которая не занята змейкой.
- Основной цикл (main)
- Инициализация Pygame, создание окна, шрифт.
- Состояния: snake — список клеток (первый элемент — голова); direction/next_direction — направление движения; food — положение пищи; score; game_over.
- Обработчик событий:
- Клавиши управления стрелками: запрещаем смену на противоположное направление.
- R — перезапуск игры, Q — выход.
- Логика движения:
- head + direction → новая голова. Если خارج границ поля или наезд на собственное тело — конец игры.
- Если новая голова совпадает с пищей — змея растёт (мы не удаляем хвост), счёт увеличивается и генерируется новая пища.
- Иначе — перемещение без роста (удаляем хвост).
- Рендеринг:
- Фон, пища, змея, счёт.
- Сообщение “Game Over” и подсказка перезапуска.
- Управление скоростью: clock.tick(10 + score // 2) — чем выше счёт, тем быстрее игра.
Как адаптировать под Pac-Man (упрощённая версия)
- Простая сеточная карта-лабиринт: задайте лабиринт в виде двумерного массива (0 = пустая клетка, 1 = стенка, 2 = пища).
- Игровой цикл будет работать аналогично, но вместо движения по одной прямой можно реализовать две вещи:
- Герои-пакмэны (пакман) движутся по сетке, меняя направление только на свободных клетках (без стенок).
- Препятствия (призраки) работают по простейшему ИИ: выбирают случайное направление среди свободных соседних клеток или используют элементарное следование к Pac-Man.
- Пищу можно разместить в случайных пустых клетках; фраговые бонусы можно сделать как Power Pellets.
- Но Pac-Man требует более сложной логики: карты-лабиринты, столкновения с стенами, движения призраков, эффект от Power Pellets (грёза призраков и т.д.). Это значительно длиннее и требует отдельного объяснения.
Если хочешь, могу:
- сделать упрощённую версию Pac-Man с минимальной физикой и без сложной логики призраков, но с сеткой-лабиринтом;
- или адаптировать этот Snake-пример под твой уровень подготовки, добавив усложнения (например, ускорение после каждого съеденного яблока, разные уровни сложности, меню, сохранение high score и т.д.).
Сообщи, хочешь ли упрощённую Pac-Man-версию и какие требования к функционалу (количество стен, базовая ИИ призраков, уровень сложности). Я подготовлю подробный шаг за шагом и полный код.
Понравился ответ?
Задай свой вопрос
Напиши любую задачу или вопрос, а нейросеть её решит



