Задать вопрос
@MasterGod

Механика боя, код?

Ищу книгу или онлайн-курс (платный или бесплатный), где подробно разбирается код игровой механики боя в RPG. Меня интересуют конкретные примеры кода, а не общие концепции. Желательно с указанием названия и ссылки (если это онлайн-курс). Язык программирования и игровой движок не важны — интересует сам принцип реализации.
Например: Как реализовать различные состояния персонажа (атака, защита, уклонение, блокировка, специальные способности)? Как переключаться между состояниями в зависимости от событий?
ИИ противников.( чтоб поведение было сложным и интересным)
Пожалуйста, не предлагайте общие советы типа "изучи язык программирования" или "посмотри в интернете" или "на YouTube". Мне нужны конкретные рекомендации с указанием названия и ссылки (если это онлайн-курс). Язык программирования и игровой движок не важны.
  • Вопрос задан
  • 214 просмотров
Подписаться 2 Средний 9 комментариев
Пригласить эксперта
Ответы на вопрос 5
VoidVolker
@VoidVolker
Dark side eye. А у нас печеньки! А у вас?
Основы программирования: логика, математика, алгоритмы и ООП. Вот по этим темам и ищите книги. Принципиальных отличий в реализации игровой механики от любой другой нет. Везде всё делается одинаково.
Например, Логика - Виноградов, Кузьмин, Москва, 1954г.
Математика - стандартная школьная, геометрия, тригонометри. И немного высшей математики типа кватернионов, теории игр, теории вероятностей и прочее в специфических случаях типа 3D, всяких случайностей и прочее.
Алгоритмы и ООП - стандартные популярные книги (например) плюс регулярная практика.

Например: Как реализовать различные состояния персонажа (атака, защита, уклонение, блокировка, специальные способности)? Как переключаться между состояниями в зависимости от событий?

Список констант плюс переменная. При событии - меняем значение переменной на требуемую константу. Это всё элементарные вещи.

ИИ противников.( чтоб поведение было сложным и интересным)

Cобытие -> условие -> действие. Всё стандартно.
Ответ написан
saboteur_kiev
@saboteur_kiev Куратор тега Разработка игр
software engineer
Тебе не просто так говорят, что нету волшебного ингредиента, и все "сложные состояни" хранятся в обычных типах данных.
Нет учебников, который учит как хранить сложные данные, потому что это очень простая задача, сложность только в их количестве.

Если ты основы языка программирования знаешь, то нет никакой проблемы реализовать что-то свое для хранения своих данных.
Опять же в гитхабе полным полно исходников разных игр, бери - смотри рабочие примеры.

Еще раз. Учебника по тому, как хранить состояния в RPG нет, и курсов нет - это все входит в базовую работу с данными.
Вопросы лучше задавать по конкретике, что именно ты хотел сделать и как пытался, и что тебе не нравится в твоей реализации.

p.s. если что, писал rpg, я согласен с остальными отвечающими, что какие-то курсы или учебники тебе нужны просто по базовой работе с программированием.
Ответ написан
Комментировать
Vindicar
@Vindicar
RTFM!
Готовый код ищи в опенсорс играх. В остальном - только общие принципы.
Если бы мне пришлось реализовывать боёвку, я бы опирался на две идеи:

1. Автоматы состояний, в т. ч. ортогональные (т.е. несколько параллельных независимых автоматов). См. паттерн "состояние" из паттернов банды четырёх.
Например, для скилла у персонажа могут быть такие состояния:
Idle - скилл не используется
ChargeUp - персонаж готовит атаку
Active - персонаж выполняет атаку
Cooldown - персонаж восстанавливается после атаки
Для мгновенных атак скилл перейдёт из Active в Cooldown сразу же, для длительных - может какое-то время сидеть в Active. По сути, скиллами можно описать вообще всё, от дефолтных атак до использования предметов.

2. Подписка на события
Это полезно для реализации статус-эффектов. Т.е. перс имеет несколько событий: игровой тик, получение урона, нанесение урона, переход навыка в следующее состояние, и т.д. При этом события должны позволять менять происходящее. Скажем, обработчик события "получение урона" должен иметь возможность изменить получаемый урон или отменить его вообще.
Когда на перса накладывают статус-эффект, объект этого статус-эффекта подписывается на соответствующие события. Например, эффект "горю" подписывается на событие "игровой тик", и генерирует урон персонажу через заданное количество тиков. По снятию статус-эффекта объект должен отписаться от событий.
Если на событие подписаны несмколько эффектов, их обработчики событий отрабатывают поочерёдно.
Также нужна система приоритетов, чтобы одни эффекты срабатывали строго до других, а не зависели от порядка их наложения. Иными словами, список активных эффектов должен сортироваться при добавлении новых эффектов.
Ответ написан
Комментировать
@rPman
Попробуй пообщаться с chatgpt (выбирай openai, anthropic или google, менее рекомендую grok и deepseek, не рекомендую майкрософтовский copilot и всякие яндексы гигачаты и открытые ламы), они представляют из себя дистиляцию основных знаний человечества, этакий stackoverflow на стероидах, возможно лучшее место где можно сейчас учиться - это оно.

Чем лучше сформулируешь вопрос, тем полезнее будет ответ. Лучшая демонстрация в известной поговорке - вопрос должен содержать половину ответа.

Они и вопрос поймут, и примеры с кодом дадут.

p.s. само собой, ожидать мега результата от современного ИИ опрометчиво, но для обучения пойдет
Ответ написан
Комментировать
@Serpentine
Если язык не важен, то вот, пожалуйста:
Частично (и размазано по всей книге) есть у Найстрома (C++/JS/UML/псевдокод, но в основном C++):
Robert Nystrom - Game Programming Patterns

Демка с игрой разработана у Адамса (C++98 + скрипты, но на чем они были я не могу вспомнить):
Jim Adams - Programming Role Playing Games with DirectX (2nd Edition)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы