Вопрос от Анонимного юзера 23 августа 2025 13:14
Напиши мне игру где курица должна убегать от машин на пайтоне с помощью библиотеки пайгейм
Ответ нейросети
23 августа 2025 13:14
Отличная задача для практики: сделаем простую игру на Pygame, где курица должна убегать от машин. Ниже сначала подробное объяснение по шагам, затем полный рабочий код. Это подходит для уровня средней школы: понятные классы, понятная логика и минималистичный графический стиль без внешних файлов.
Чего мы добиваемся
- Курица (player) управляется стрелками (или WASD).
- Машины (cars) движутся по нескольким «полосам» слева направо.
- Если курица столкнулaсь с машиной — игра заканчивается.
- Если курица достигает верха экрана — игрок выигрывает.
- Добавим простой счётчик времени/очков и возможность перезапускать игру.
Пошаговый план
- Подготовка окружения
- Импортируем pygame, инициализируем и создаём экран нужного размера.
- Определяем базовые константы: размеры, скорости, цвета.
- Фигуры и классы
- Класс Chicken: хранит положение курицы, размеры и метод движения внутри границ экрана.
- Класс Car: прямоугольник машины, скорость, направление; метод обновления положения.
- Логика движения и препятствий
- Машины порождаются на экране слева и движутся вправо по выбранной полосе.
- У каждой полосы может быть своя скорость; можно варьировать.
- Проверяем столкновение курицы с машинами.
- Победа и проигрыш
- Победа: курица достигает верхней границы.
- Проигрыш: столкновение с машиной.
- В конце можно показывать сообщение и ждать нажатия R для рестарта.
- Отрисовка и цикл игры
- Рисуем фон, дорожки/полосы, курицу и машины.
- Обновляем экран и ограничиваем FPS.
Полный рабочий код (Python, Pygame)
import pygame
import random
import sys
# 1) Инициализация и константы
pygame.init()
WIDTH, HEIGHT = 800, 600
SCREEN = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Курица против машин — Пайгейм")
# Цвета
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
YELLOW = (255, 230, 0)
RED = (200, 0, 0)
GRAY = (50, 50, 50)
GREEN = (0, 200, 0)
# Таймер и шрифты
clock = pygame.time.Clock()
FONT = pygame.font.SysFont(None, 36)
# Курица параметры
CHICKEN_W, CHICKEN_H = 40, 40
CHICKEN_SPEED = 5
# Машины параметры
CAR_W, CAR_H = 60, 40
CAR_MIN_SPEED, CAR_MAX_SPEED = 3, 6
# Линии дорог (горизонтальные полосы)
LANE_Y = [480, 420, 360, 300, 240] # позиции по вертикали (от верхнего края вниз)
# 2) Классы
class Chicken:
def __init__(self, x, y):
self.rect = pygame.Rect(x, y, CHICKEN_W, CHICKEN_H)
def move(self, dx, dy):
self.rect.x += dx
self.rect.y += dy
# Ограничиваем выход за границы экрана
if self.rect.left < 0:
self.rect.left = 0
if self.rect.right > WIDTH:
self.rect.right = WIDTH
if self.rect.top < 0:
self.rect.top = 0
if self.rect.bottom > HEIGHT:
self.rect.bottom = HEIGHT
def draw(self, surface):
# Простая курица: желтый прямоугольник
pygame.draw.rect(surface, YELLOW, self.rect)
# Годится добавить клюв/глаза, если хочется
# Клюв
pygame.draw.polygon(surface, (255, 140, 0), [
(self.rect.right, self.rect.centery),
(self.rect.right + 6, self.rect.centery - 4),
(self.rect.right + 6, self.rect.centery + 4)
])
class Car:
def __init__(self, x, y, speed, direction=1):
self.rect = pygame.Rect(x, y, CAR_W, CAR_H)
self.speed = speed
self.direction = direction # 1 — вправо, -1 — влево (для вариативности можно добавить)
def update(self):
self.rect.x += self.speed * self.direction
def is_off_screen(self):
return self.rect.left > WIDTH or self.rect.right < 0
def draw(self, surface):
pygame.draw.rect(surface, RED, self.rect)
# 3) Вспомогательные функции
def reset_game():
# Создаем курицу внизу экрана по центру
chicken = Chicken(WIDTH // 2 - CHICKEN_W // 2, HEIGHT - CHICKEN_H - 10)
cars = []
return chicken, cars
def spawn_car(lane_y):
# Машина появляется слева и движется вправо
x = -CAR_W - random.randint(0, 60)
speed = random.randint(CAR_MIN_SPEED, CAR_MAX_SPEED)
car = Car(x, lane_y - CAR_H // 2, speed, direction=1)
return car
def draw_road(surface):
# Фон дороги и полосы
surface.fill(GREEN) # трава снизу
# дорога
road_height = 5
road_y = 0
pygame.draw.rect(surface, (50, 50, 50), (0, 0, WIDTH, HEIGHT)) # темная основа
# Нарисуем дорожные полосы
for y in LANES_Y:
pygame.draw.line(surface, WHITE, (0, y), (WIDTH, y), 2)
def render_text(surface, text, pos, color=WHITE):
img = FONT.render(text, True, color)
surface.blit(img, pos)
# 4) Инициализация игры
chicken, cars = reset_game()
SPAWN_EVENT = pygame.USEREVENT + 1
pygame.time.set_timer(SPAWN_EVENT, 900) # каждые 900 мс создаём машину
game_over = False
won = False
start_ticks = pygame.time.get_ticks()
# 5) Основной цикл
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == SPAWN_EVENT and not game_over and not won:
lane_index = random.randint(0, len(LANE_Y) - 1)
lane_y = LANES_Y[lane_index]
cars.append(spawn_car(lane_y))
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_r:
# Рестарт
chicken, cars = reset_game()
game_over = False
won = False
start_ticks = pygame.time.get_ticks()
if event.key == pygame.K_ESCAPE:
pygame.quit()
sys.exit()
keys = pygame.key.get_pressed()
if not game_over and not won:
dx = dy = 0
if keys[pygame.K_LEFT] or keys[pygame.K_a]:
dx = -CHICKEN_SPEED
if keys[pygame.K_RIGHT] or keys[pygame.K_d]:
dx = CHICKEN_SPEED
if keys[pygame.K_UP] or keys[pygame.K_w]:
dy = -CHICKEN_SPEED
if keys[pygame.K_DOWN] or keys[pygame.K_s]:
dy = CHICKEN_SPEED
chicken.move(dx, dy)
# Обновление машин
for car in cars:
car.update()
# Удаление вылетевших машин
cars = [c for c in cars if not c.is_off_screen()]
# Проверка столкновений
for car in cars:
if chicken.rect.colliderect(car.rect):
game_over = True
break
# Победа: курица достигла верхней границы
if chicken.rect.top <= 0:
won = True
# 6) Рендеринг
draw_road(SCREEN)
# Рисуем дорожную разметку внутри дороги
for y in LANES_Y:
pygame.draw.line(SCREEN, WHITE, (0, y), (WIDTH, y), 2)
# Рисуем курицу и машины
chicken.draw(SCREEN)
for car in cars:
car.draw(SCREEN)
# HUD
elapsed_sec = max(0, (pygame.time.get_ticks() - start_ticks) // 1000)
render_text(SCREEN, f"Time: {elapsed_sec}s", (10, 10), WHITE)
if game_over:
render_text(SCREEN, "Game Over! Press R to restart", (WIDTH // 2 - 180, HEIGHT // 2 - 20), WHITE)
if won:
render_text(SCREEN, "You Won! Press R to restart", (WIDTH // 2 - 190, HEIGHT // 2 - 20), WHITE)
render_text(SCREEN, "Controls: Arrow keys or WASD to move", (10, HEIGHT - 40), WHITE)
pygame.display.flip()
clock.tick(60)
Как запустить код
- Установите Pygame:
- pip install pygame
- Сохраните код в файл, например, chicken_game.py.
- Запустите:
- python chicken_game.py
- Управление: стрелки или WASD. Достигните верхней части экрана — победа. Если столкнётесь с машиной — перезапуск кнопкой R.
Дополнительные идеи для обучения и улучшения
- Добавить уровни: скорость машин возрастает после каждого пройденного этапа.
- Добавить звук (если добавить аудиофайлы).
- Добавить разные визуальные спрайты для курицы и машин, чтобы улучшить восприятие.
- Сделать разные направления движения машин по полосам (часть полос движется слева направо, часть — справа налево).
Если хочешь, могу адаптировать игру под конкретный уровень класса или сделать проще/сложнее, добавить функции подсказок или сохранить рекорды.
Понравился ответ?
Задай свой вопрос
Напиши любую задачу или вопрос, а нейросеть её решит



