Как создать правдоподобного врага в 2D‑игре: простой AI без A за 5 функций

В разработке игр, кажущийся «умным» противник — одна из главных задач, формирующих интересный геймплей. Однако многие начинающие разработчики думают, что для этого обязательно нужен сложный алгоритм вроде A* (Astar), графы навигации или даже нейросети. На практике для 2D‑игр вроде Pacman, классических topdown shooters или roguelike достаточно эмулировать интеллект с помощью нескольких простых механик.В этой статье мы разберём, как реализовать врага, который следует за игроком, обходит простые препятствия и выглядит «разумным» — с помощью всего 5 небольших функций на Python + Pygame. Мы избежим сложных алгоритмов поиска пути и покажем, как лучевая проверка и перебор соседей создают иллюзию целенаправленного поведения. Архитектура простого AI

Наш враг не будет знать всю карту.

Вместо этого каждый кадр он:

1. Определяет направление к игроку (вектор).

2. Проверяет, есть ли прямое препятствие на пути.

3. Если препятствие есть — ищет обходной шаг (перебор соседних клеток).

4. Делает шаг.

5. Рисует отладочную линию «намерения».

Все это реализуется с помощью Pygame.math.Vector2 — удобного инструмента для работы с векторами.

Что означают «5 функций для чувства интеллекта»?

Вот минимальный набор функций, который создаёт полную иллюзию работы AI:

1. get_direction_to_player() — вектор направления.

2. is_obstacle_ahead() — лучевая проверка перед врагом.

3. try_alternative_directions() — перебор соседних клеток.

4. move_towards_player() — основной шаг.

5. draw_debug_line() — визуализация пути для отладки.

Никакого A* — только локальные решения на каждом кадре.

Принцип работы: желание следовать за игроком

Враг постоянно пересчитывает своё желаемое направление. Это называется поведением преследования (pursue). В отличие от сложного поиска пути, враг не строит маршрут до цели, а просто двигается в её сторону, корректируя направление каждый кадр.

Векторы в Pygame

Как создать правдоподобного врага в 2D‑игре: простой AI без A за 5 функций

.normalize() делает вектор единичной длины — так мы получаем только направление. Учёт препятствий: простой лучевой поиск

Перед движением враг прощупывает пространство перед собой:

Как создать правдоподобного врага в 2D‑игре: простой AI без A за 5 функций

Здесь obstacles — список точек или прямоугольников стен / врагов. Обход препятствий: перебор соседей

Если прямо идти нельзя, враг проверяет 8 соседних направлений (или 4, если нужна сетка):

Как создать правдоподобного врага в 2D‑игре: простой AI без A за 5 функций

Эта функция не просчитывает весь путь, а просто выбирает лучшее локальное направление. Главный цикл движения врага:

Как создать правдоподобного врага в 2D‑игре: простой AI без A за 5 функций

Обратите внимание: если альтернатив нет, враг стоит на месте — это тоже выглядит естественно, будто он «задумался».

Пример 1. Полный код врага в topdown shooter:

Как создать правдоподобного врага в 2D‑игре: простой AI без A за 5 функций

Пример 2. Как это выглядит в Pacmanподобной игре

В Pacman враги обычно движутся по лабиринту. Наш подход тоже работает: если препятствием считаются стены, то is_obstacle_ahead проверяет коллизию с тайлами. Благодаря try_alternatives, враг будет «тыкаться» в стены, но в итоге пойдёт вдоль них — это очень напоминает поведение призраков в оригинале.

Пример 3. Визуализация для отладки

Включив отрисовку линии draw_debug_line, вы увидите зелёную линию от врага к игроку — куда AI хочет пойти. Это бесценно при настройке:![Пример отладки: зелёная линия показывает желаемое направление]Если линия проходит сквозь стену, значит, проверка препятствий не сработала — и вы быстро найдёте ошибку.

Заключение

Для 2D игр не нужен сложный поиск пути — достаточно локного принятия решений. Векторы из pygame.math делают код чистым и понятным.

Пять простых функций создают полную иллюзию «интеллектуального» преследования.

Отладка через визуализацию линий ускоряет разработку в разы.

Где применяется технология

Кэжуалигры (Pacman, Snake, Bomberman)

Topdown shooter (Zombie Survival, Hotline Miami‑подобные)

Roguelike и tower defense

Прототипы любых игр с преследованием

Преимущества описанного подхода

Простота реализации: 50-100 строк кода вместо сотен

Производительность: Нет сложных вычислений на кадр

Предсказуемость: Легко балансировать сложность

Прозрачность: Легко отлаживать визуально

Убедительность: Игроку кажется, что враг «думает»

Используйте этот подход в своих проектах — и ваши враги будут выглядеть достаточно умными, чтобы доставлять удовольствие, и достаточно простыми, чтобы вы не увязли в алгоритмах. А когда придёт время — всегда сможете заменить локальный поиск на A* или навигационную сетку, но начинайте с малого.

Начать дискуссию