#python #ai #cpp
Поддавшись ностальгическому порыву решил поиграться в один из фанатских модов для Diablo II, и через пару часов был измучен однообразностью происходящего. И тут в голове появилась идея: а почему бы не написать бота, который будет вместо меня проходить игру, которая надоедает всего за два часа. Как это в принципе можно сделать? Расплывчатые ответы на вопросы от DreamChild Прежде всего, я делаю это just for fun, для тренировки своих навыков программиста, и это своего рода проба пера в написании искусственных интеллектов, поэтому не надо меня отговаривать. Во-первых, всё в Diablo -- спрайты, которые упакованы в mpq, и народными умельцами создан не один распаковщик, так что эти спрайты можно извлечь и научить ИИ их распознавать уже будет проще (знаем, что искать). С текстовой информацией ещё проще: нам надо распознавать конкретный шрифт (ну хорошо, два шрифта) конкретного размера. Впрочем, распознавать противников даже не обязательно: если при наведении мыши на какую-то область появляется надпись вверху экрана, то это противник, которого надо атаковать. В итоге бот должен различать только шрифты и всё, что летит в его сторону (ИИ, дмаю, лучше сделать заточенным на дальний бой). Во-вторых, для каждого персонажа есть свой "билд" -- определённый шаблон прокачки. Для простоты можно взять одного персонажа и создать для него такой шаблон, по которому ИИ будет раскидывать очки характеристик и умений. В-третьих, человек подбирает более качественный шмот только потому, что ему лень без конца бегать к торговцам. ИИ может действовать по алгоритму набил инвентарь, сравнил со своим, пошёл в город, продал, купил новый свиток портала, вернулся на локацию. В-четвёртых, задания в таких играх примитивные, их не так много, поэтому условия их получения и выполнения можно все вручную прописать. Что касается карты: большинство игроков только тем и занимается, что полностью прочёсывает локации в поисках опыта и более качественного шмота. В-пятых, выяснить какой лук лучше не так уж сложно: тот, у которого урон больше (сравнивать по окну статов персонажа). А по остальным эффектам есть подсказка: чем сильнее предмет, тем он дороже. Единственная загвоздка с различными сопротивлениями, но тут можно заставить ИИ считать, от чего он больше урона получает и в соответствии с этим стремиться повысить то, или иное сопротивление. Но лучше написать ИИ, который вообще не получает повреждений, или сводит их к минимуму. В-шестых, какие преимущества даёт SDK? В Torchlight и Titan Quest он имеется, но какие это даёт преимущества?
Ответы
Ответ 1
На 146% уверен, что игра не стоит свеч в плане трудозатрат по сравнению с окончательным результатом. Судя по всему в природе не существует некоего Diablo-SDK, который помог бы в решении задачи (для широкой аудитории я имею в виду), а писать логику подобного бота вручную - занятие утомительное, муторное и ненадёжное. Теоретически, конечно, можно попробовать научить этого бота распознавать образы на экране и эмулировать мышиные клики и нажатия клавиш. Однако тут видится море проблем. Во-первых, в этой игре громадное количество всяческих противников. Десятки видов, если не сотни. Очевидно, всех их потребуется каким-то образом распознавать. Можно, конечно, попробовать убивать всё, что шевелится, но это чертовски неэффективно хотя бы потому, что многие из них имеют различные заклинания, от которых боту не помешало бы уметь защищаться, а также ряд из них имеет защиту или даже иммунитет к тем или иным магическим воздействиям, что тоже немаловажно. Во-вторых, нужно каким-то образом научить его "прокачиваться". Для бота, да еще и такого, что захватывает изображения, это весьма нетривиальная задача. Впрочем, вопрос выбора тех или иных навыков при достижении нового уровня можно оставить на откуп человеку В-третьих, нужно как-то научить его как-то подбирать выпавшее из противников снаряжение и предметы, причем не какие попало (а их там навалом), а только наиболее ценные. В-четвёртых, бот должен уметь выполнять задания (пусть их там и немного) и находить себе путь на карте. Карты, как известно, в Diablo II генерируются автоматически В-пятых, бот должен уметь использовать лучшее оружие, снаряжение и заклинания из того, что есть в его распоряжении. Правильное комбинирование всего этого барахла типа доспехов, сапогов, шлемов, амулетов, колец, оружия, собственных характеристик персонажа, его умений таким образом, чтобы характеристики одной вещи не аннулировались свойствами другого предмета - задача и для человека не всегда очевидная. По-моему, вопросов пока больше, чем ответов. Поэтому, если есть желание попрактиковаться в написании ботов, то я бы на вашем месте выбрал какую-нибудь другую игру, которая предоставляет чуть больше возможностей для подобных манипуляций
Комментариев нет:
Отправить комментарий