Добрый день уважаемые тосторчане.
Обращаюсь к вам за советом как правильно писать игровых ботов, чтобы был максимально чистый код. Писать хочу на js, но это не суть важно. Игра старкрафт 2, хотя и это не важно, процесс написания не отличается от любой браузерной игры, например
Какие есть особенности у игрового ботостроения: глобальный контекст игры - там хранятся открытые данные, например, имеющиеся ресурсы, список своих зданий, рабочих и воинов. Помимо контекста есть ещё бесконечный цикл.
Основная проблема с тем, что каждый раз, когда компилятор заходит в этот бесконечный цикл, приходится заново определять текущую стадию игры. Для этого я добавляю глобальную переменную текущего шага и в цикле switch/case с кучей веток.
А если могут быть одновременно две стратегии, то глобальный список активных шагов с флагами isActive.
Это всё смотрится крайне печально и я хотел бы в академических целях разобраться, как такие вещи писать правильно. Принимаются и просто советы и куски кода )
Спасибо за внимание
Рано ботов писать, вы пока ещё процедурно мыслите, нужно думать в ООП т.е. интерфейсы/классы/сущности, и тем более нужно о ботах думать когда остальная игра написана т.е. есть куча готовых сущностей, даже есть интерфейс игрока который в себе все это уже содержит и/или через него всё управляется, только манипулирует всем реальный человек с разных точек (GUI).
И вот все это сводится и заменяется на автономный класс, реализующий все тот же интерфейс игрока.
Но это если вы пишите бота именно бота протиника/компаньёна, а не "мой персонаж торгует когда я сплю".
вы пока ещё процедурно мыслите, нужно думать в ООП т.е. интерфейсы/классы/сущности
так помогите
нужно о ботах думать когда остальная игра написана т.е. есть куча готовых сущностей
Разумеется надо бота делать, когда есть готовая игра ) тем не менее, даже если игра готова, не всегда есть готовые сущности. Возьмите любую браузерную игру - бойцовский клуб, ботва или прочее. Интерфейс игрока в браузере содержит лишь набор html элементов.
И вот все это сводится и заменяется на автономный класс, реализующий все тот же интерфейс игрока.
Массив/хэш таблица с функциями реализующими ветки switch, по переменной выбираете из массива/хэша нужную функцию и вызываете ее. Весь switch расползется по разным функциям.
Не силен в JS, поэтому без кода.
Любую ветку switch можно обернуть в функцию, сути это не меняет. Я спрашиваю про более абстрактные вещи, например, есть паттерн "стратегия". По описанию он создан именно для таких вещей, но как его применить в данной ситуации, я не понимаю
Можно, конечно. Только это не избавляет от самого switchа.
В моем предложении вместо свича, остается что-то типа table_func[op](args)
В принципе это с натяжкой можно считать некоей вариацией паттерна стратегия в процедурном стиле.
Можете функции заменить на классы, с общим интерфейсом и точно так же вызывать метод класса, роли это не играет.