Как подражать игроку в онлайн игре - PullRequest
1 голос
/ 31 августа 2010

Я бы хотел написать приложение, которое бы имитировало игрока в онлайн-игре.

Об игре: это стратегия, в которой вы можете:

  • тренируйте свою армию (у вас должно быть достаточно ресурсов, затем нажмите на юнит, нажмите на поезд)
  • строить здания (шахты, оружейные, жилые дома, ...)
  • атака врагов (выберите юнит, выберите врага, нажмите кнопку атаки)
  • транспортные ресурсы между зданиями
  • проводит исследования (экономические, военные, технологические, ...)

Это упрощенный список и только пример. Главное, что вам нужно много кликать, если вы хотите продвинуться ...

У меня уже есть «навигационная» часть приложения (я использовал библиотеку Watin - http://watin.sourceforge.net/). Это означает, что я могу использовать объекты высокого уровня и манипулировать ими, например:

Soldiers soldiers = Navigator.GetAllSoldiers();
soldiers.Move(someLocation);

Теперь я хотел бы сделать следующий шаг - написать своего рода ИИ, который бы имитировал мой игровой стиль. Для этого у меня есть две идеи (и мне они не нравятся):

  • войдите в игру, а затем выполните несколько операторов if в цикле (проверьте, атакует ли кто-то меня, проверьте, могу ли я что-то построить, проверьте, могу ли я на кого-то напасть, цикл)
  • спроектировать некий язык сценариев и написать для него компилятор. Таким образом, я мог написать простые скрипты и запускать их (Login (); CheckForAnAttack (); BuildSomething (); ...)

Есть еще идеи?

PS: некоторые могут воспринимать это как мошенничество, и это, вероятно, так, но я рассматриваю это как учебный проект, и он никогда не будет опубликован или перепродан.

Ответы [ 5 ]

3 голосов
/ 31 августа 2010

Куча операторов if - лучший вариант, если стратегия не слишком сложна. Однако это решение не очень хорошо масштабируется.

Создание языка сценариев (или языка, специфичного для предметной области, как можно было бы назвать в наши дни), не приносит вам большой выгоды. Вы не собираетесь, чтобы другие люди создавали агентов ИИ? Вы можете лучше использовать свой язык программирования для этого.

Если стратегия становится более сложной, вы можете посмотреть на Bayesian Belief Networks или Графики решений. Они хороши в поиске лучших действий в неопределенной среде структурированным и явным образом. Если вы воспользуетесь этими условиями, вы найдете множество информации и библиотек для использования.

1 голос
/ 01 сентября 2010

Есть ли у вас исходный код игры?Если нет, то будет сложно отследить положение каждого процессора, с которым вы (ваш компьютер в вашем случае) сражаетесь.Вам придется разработать какой-то плагин, который сможет это сделать, потому что по звуку вы имеете дело с какой-то RTS какой-то;Это требует оценки множества различных сценариев положения между множеством разных процессоров.

Если вы хотите смоделировать свои движения, вы можете легко отследить мышь, используя некоторые WinAPI.Вы также можете записывать свой экран во время игры (что, вероятно, не очень поможет, но может помочь, если вы достаточно решительны.).

Честно говоря, что выпопытка сделать это, черт возьми, практически невозможна для той игры, в которую вы играете. Вы, похоже, еще не продумали это.Программирование - полезный навык, но это не волшебство.

Проверьте некоторые вещи (если они есть) в MIT Battlecode.Это может быть ваш путь с точки зрения программирования для такого рода вещей.

1 голос
/ 01 сентября 2010

Большинство ИИ стратегических игр используют «иерархический» подход, во многом аналогичный тому, который вы уже описали: определить относительно отдельные области действия (то есть решить, что исследовать, в основном не зависит от поиска пути), а затем создать слой ИИ обрабатывать только этот домен. Затем создайте слой AI «верхнего уровня», который направляет промежуточные уровни для выполнения задач.

Как работает каждый из этих промежуточных слоев (и как работает ваш «общий» слой), каждый может быть определен отдельно. Возможно, вы придумаете что-то довольно жесткое и прямолинейное для слоя «Что исследовать» (исходя из ваших предпочтений), но вам может потребоваться более сложный подход для слоя «Общие» (который, вероятно, направляет и реагирует на входные данные другие слои).

1 голос
/ 31 августа 2010

Прежде всего я должен указать, что этот проект (который служит только в образовательных целях) слишком велик для одного человека, чтобы завершить его в течение разумного периода времени.Но если вы хотите, чтобы ИИ подражал вашему личному стилю игры, вам на ум приходят другие альтернативы: нейронные сети: вы много играете (действительно много) и записываете все свои ходы и передаете эти данные в такую ​​сеть;если все идет хорошо, ИИ должен играть примерно так же, как и вы.Но я боюсь, что это третья идея, которая вам не понравится, потому что для ее совершенствования потребуется огромное количество времени.

1 голос
/ 31 августа 2010

Звучит так, будто вы хотите конечный автомат.Я использовал их с разной степенью успеха в программировании ботов.В зависимости от игры, которую вы запутываете, вы могли бы лучше кодировать ИИ, который учится, но он звучит так, как будто ваш достаточно прост, чтобы не нуждаться в такой сложности.Вы можете позвонить с вашего конечного автомата.

...