Манифест возрождения героев
CTPAHHuK
Читал твой труд. Моя думать - пока что много абстракций, которые сами по себе трудно запрограммировать. Но развивай свою тему дальше.
Dalai
ИИ можно попробовать реализовать в виде скриптового языка. Тогда совершенствование ИИ будет сводится к совершенствованию самого скрипта/ скриптового языка ИИ (напр., шлифовка существующих условий и введение новых). Пример для милишников, если тактика идет в среде Четверки:
----
1. Атаковать наиболее весомый стек, который можно полностью уничтожить при атаке, если стек не является суммоном. Если стек невозможно уничтожить, то выбирать тот, атака которого принесет врагу наибольший ущерб. Весомость стека вычислять с учетом summon/ damage-возможностей оного.
Грубо: Если стек из одного джина может насуммонить другого джина за один комбат-раунд, то считаем, что стек из того самого джина равен двум джинам. Если стек из одного джина способен уничтожить 2х джинов, то считаем, что один джин равен 3-м.
2. Если атака невозможна (не успеваем добежать) и наша инициатива больше и у врага есть возможности понизить нашу инициативу /передвижение - немедленно двигаемся к врагу.
3. Если атака невозможна (не успеваем добежать) и наша инициатива больше и у врага есть возможности превысить нашу инициативу - немедленно двигаемся к врагу.
4. Если инициатива у врага выше, то определяем один из стеков в качестве пушечного мяса и рассредоточиваемся так, чтоб чтоб можно было провести безответную контратаку.
5. При выборе точки передвижения двигаться туда, откуда атака будет доступна на максимальное к-во целей.
-----
Читал твой труд. Моя думать - пока что много абстракций, которые сами по себе трудно запрограммировать. Но развивай свою тему дальше.
Dalai
ИИ можно попробовать реализовать в виде скриптового языка. Тогда совершенствование ИИ будет сводится к совершенствованию самого скрипта/ скриптового языка ИИ (напр., шлифовка существующих условий и введение новых). Пример для милишников, если тактика идет в среде Четверки:
----
1. Атаковать наиболее весомый стек, который можно полностью уничтожить при атаке, если стек не является суммоном. Если стек невозможно уничтожить, то выбирать тот, атака которого принесет врагу наибольший ущерб. Весомость стека вычислять с учетом summon/ damage-возможностей оного.
Грубо: Если стек из одного джина может насуммонить другого джина за один комбат-раунд, то считаем, что стек из того самого джина равен двум джинам. Если стек из одного джина способен уничтожить 2х джинов, то считаем, что один джин равен 3-м.
2. Если атака невозможна (не успеваем добежать) и наша инициатива больше и у врага есть возможности понизить нашу инициативу /передвижение - немедленно двигаемся к врагу.
3. Если атака невозможна (не успеваем добежать) и наша инициатива больше и у врага есть возможности превысить нашу инициативу - немедленно двигаемся к врагу.
4. Если инициатива у врага выше, то определяем один из стеков в качестве пушечного мяса и рассредоточиваемся так, чтоб чтоб можно было провести безответную контратаку.
5. При выборе точки передвижения двигаться туда, откуда атака будет доступна на максимальное к-во целей.
-----
Да, действительно, там конкретики нет ещё. Буду выкладывать частями, вдруг кому-то последовательные мысли в голову прийдут, или где-то косяк обнаружится.Accolon wrote:Читал твой труд. Моя думать - пока что много абстракций, которые сами по себе трудно запрограммировать. Но развивай свою тему дальше.
Dalai
На каком языке планируется писать игру?
Это экспертный подход. Я бы хотел, чтобы он был только самым началом пути. А следующим шагом был сбор и обработка БОЛЬШОГО количества данных как с реальных боев, так и с автоматических симуляций, и модификация ИИ на основе анализа этих данных. Что-то вроде уточнения коэффициентов в примере CTPAHHuK для разных дейстий в зависимости от массы разных условий.Accolon wrote:ИИ можно попробовать реализовать в виде скриптового языка. Тогда совершенствование ИИ будет сводится к совершенствованию самого скрипта/ скриптового языка ИИ (напр., шлифовка существующих условий и введение новых).
Это пока слишком конкретный вопрос. Не знаю. Во-первых - я не программист, и мне трудно принять ОБОСНОВАННОЕ решение без консультации с кем-то компетентным. Во-вторых, и я об этом, вроде бы писал (а если нет - то собирался), я бы хотел, чтобы то, о чем мы говорим в этой теме, было полезным в равной степени любому разработчику, а не только мне, если звезды сложатся.CTPAHHuK wrote: На каком языке планируется писать игру?
Четверка была на Си, не уверен насчет плюсов.
Web-designer wanted. "Once a knight, always a knight, but once a King is once too often!" (c) Sir Bella of Eastmarch
Может Max знает?Dalai wrote:Это пока слишком конкретный вопрос. Не знаю. Во-первых - я не программист, и мне трудно принять ОБОСНОВАННОЕ решение без консультации с кем-то компетентным. Во-вторых, и я об этом, вроде бы писал (а если нет - то собирался), я бы хотел, чтобы то, о чем мы говорим в этой теме, было полезным в равной степени любому разработчику, а не только мне, если звезды сложатся.
Dalai
Элементы этого экспертного подхода ничто не мешает использовать как для "функционирования по умолчанию", так и для развития ИИ. Попробую сформулировать то, че думал.
Можно рассматривать работу ИИ как мозаику квантов условие-действие (куд). И к каждому куд-у накапливать статистику о том, сколько было успешных/ не успешных боев (по классиф. Станника), его задействовавших. Как и статистику, в каком именно комбат-раунде куд был задействован. Думаю, для куд-а имеет смысл сохранять инфу и о процентном ходе боя (т.е., было ли это начало боя, его середина или уже конец). Под "условиями" надо понимать те, что определены человеком. Примеры условий:
у врага есть (массовые) диспелы общего назначения (как курсов, так и блесов);
у врага есть (массовые) диспелы блесов;
у врага есть (массовые) диспелы курсов;
у врага есть суммоны иллюзий;
у врага есть суммоны крич 1-го уровня;
у врага есть суммоны крич 2-го уровня (и так до 5-го, т.е еще 3 условия);
у врага есть raise спеллы крич (1,2,..,5)-го уровня
у врага есть ДД-спеллы для атаки единственного стека;
у врага есть ДД-спеллы для атаки по полю (фаербол, наприм);
у врага есть ДД-спеллы для атаки по обширному полю (инферно);
у врага есть ДД-спеллы для атаки по цепному полю (цепная молния);
у врага есть ДД-спеллы для массовой атаки (армагеддон);
у врага низкий MR;
у врага средний MR;
у врага высокий MR;
у врага 100% MR;
у врага иммунитет к магии;
у врага формация n
и далее.
Под "врагом", по ситуации, понимать как всю армию, так и конкретную цель/ претендент на атаку. Если перед условием ставим "!", то это означает отрицание. ИИ, исходя из статистики боев, выбирает наиболее зарекомендовавший себя куд и приводит его в действие.
Пример куд-а:
Элементы этого экспертного подхода ничто не мешает использовать как для "функционирования по умолчанию", так и для развития ИИ. Попробую сформулировать то, че думал.
Можно рассматривать работу ИИ как мозаику квантов условие-действие (куд). И к каждому куд-у накапливать статистику о том, сколько было успешных/ не успешных боев (по классиф. Станника), его задействовавших. Как и статистику, в каком именно комбат-раунде куд был задействован. Думаю, для куд-а имеет смысл сохранять инфу и о процентном ходе боя (т.е., было ли это начало боя, его середина или уже конец). Под "условиями" надо понимать те, что определены человеком. Примеры условий:
у врага есть (массовые) диспелы общего назначения (как курсов, так и блесов);
у врага есть (массовые) диспелы блесов;
у врага есть (массовые) диспелы курсов;
у врага есть суммоны иллюзий;
у врага есть суммоны крич 1-го уровня;
у врага есть суммоны крич 2-го уровня (и так до 5-го, т.е еще 3 условия);
у врага есть raise спеллы крич (1,2,..,5)-го уровня
у врага есть ДД-спеллы для атаки единственного стека;
у врага есть ДД-спеллы для атаки по полю (фаербол, наприм);
у врага есть ДД-спеллы для атаки по обширному полю (инферно);
у врага есть ДД-спеллы для атаки по цепному полю (цепная молния);
у врага есть ДД-спеллы для массовой атаки (армагеддон);
у врага низкий MR;
у врага средний MR;
у врага высокий MR;
у врага 100% MR;
у врага иммунитет к магии;
у врага формация n
и далее.
Под "врагом", по ситуации, понимать как всю армию, так и конкретную цель/ претендент на атаку. Если перед условием ставим "!", то это означает отрицание. ИИ, исходя из статистики боев, выбирает наиболее зарекомендовавший себя куд и приводит его в действие.
Пример куд-а:
Code: Select all
// квант Geine0988978
if
!(у врага есть массовые диспелы общего назначения)
!(у врага есть массовые диспелы блесов)
!(у врага есть диспелы общего назначения)
!(у врага есть диспелы блесов)
then
использовать заклинание "Сотворить иллюзию"с наиболее эффективного стека
Accolon
Все правильно.
Только я бы еще ввел некий интегральный показатель силы армии (своей и врага) и отслеживал применение тех или иных кудов не только в успешных-неуспешных боях, а даже отдельных раундах. Кроме того, понятие успешный бой - это бой, завершившийся с максимально положительным изменением соотношения между этими показателями своей и чужой армии.
Другими словами, даже само определение "успешный бой" требует введения интегрального показателя. Вот и отслеживать его нужно пораундово. Заодно и решения могут приниматься не только исходя из статистики (типа: в 80% случаев такой выбор привел к неплохому результату), а и математически. Например - у врага есть 1 стек - минотавры. Каст слоу на минотавров ослабляет их на Х%. (При наличии, или подозрении на возможность снятия замедления, Х заменяем на Х2). Соответственно, интегральный показатель армии уменьшится на К% (или К2). Альтернатива - ударить айс-болтом, количество минотавров уменьшится на У%, интегральный показатель армии - на М%. Сравниваем К и М и решаем. Определение Х - работа эксперта + множество экспериментальных проверок на грани.
Этот метод иногда лучше анализа статистики, т.к. статистика в итоге выдаст достаточно общие выводы, а тут при разнице в 1 минотавра предпочитаемое действие может смениться.
Все правильно.
Только я бы еще ввел некий интегральный показатель силы армии (своей и врага) и отслеживал применение тех или иных кудов не только в успешных-неуспешных боях, а даже отдельных раундах. Кроме того, понятие успешный бой - это бой, завершившийся с максимально положительным изменением соотношения между этими показателями своей и чужой армии.
Другими словами, даже само определение "успешный бой" требует введения интегрального показателя. Вот и отслеживать его нужно пораундово. Заодно и решения могут приниматься не только исходя из статистики (типа: в 80% случаев такой выбор привел к неплохому результату), а и математически. Например - у врага есть 1 стек - минотавры. Каст слоу на минотавров ослабляет их на Х%. (При наличии, или подозрении на возможность снятия замедления, Х заменяем на Х2). Соответственно, интегральный показатель армии уменьшится на К% (или К2). Альтернатива - ударить айс-болтом, количество минотавров уменьшится на У%, интегральный показатель армии - на М%. Сравниваем К и М и решаем. Определение Х - работа эксперта + множество экспериментальных проверок на грани.
Этот метод иногда лучше анализа статистики, т.к. статистика в итоге выдаст достаточно общие выводы, а тут при разнице в 1 минотавра предпочитаемое действие может смениться.
Web-designer wanted. "Once a knight, always a knight, but once a King is once too often!" (c) Sir Bella of Eastmarch
Dalai
Моя думать, надо и то и то использовать в течении боя, но окончательный ответ таки даст исход боя, а не исход одного раунда.
All
Господа, еще один важный момент касательно базовых свойств стека.
В Четверке стек может: атаковать ранжед без перемещения; кастить без перемещения; использовать итем (бутылка/ ванд) без перемещения; атаковать melee нераздельно от перемещения; единожды ответить на атаку одновременной ответкой(*); преместится без атаки любого вида; остаться на месте, перейдя в режим защиты.
Моя думать, что красивее и тактически гибче дать возможность стеку переместится и атаковать любым доступным ему способом/ уйти в защиту. Собственно, это уже предлагалось у нас на форуме (аж в 2005) и по-своему реализовано Катаури в их сиквел-серии King's Bounty, равно как и в Disciples III от .Dat.
-----
(*) за искл. грифонов и на атаку стека с first strike одновременно получится только у атакуемого с first strike.
Ок, но как ты его себе представляешь? Например, какой смысл в ослаблении армии кастеров посредством курсов, понижающих физические хар-ки, но не влияющих на инициативу, Spell Power и к-во маны?Только я бы еще ввел некий интегральный показатель силы армии (своей и врага)
Для определения максимально положительного изменения требуется серия боев. Т.е., у Странника таки более удачное определение.Кроме того, понятие успешный бой - это бой, завершившийся с максимально положительным изменением соотношения между этими показателями своей и чужой армии.
Сначала нужно определится с самим интегральным показателем.Другими словами, даже само определение "успешный бой" требует введения интегрального показателя. Вот и отслеживать его нужно пораундово.
С примером все ок, но он не учитывает расстояние до миносов.Например - у врага есть 1 стек - минотавры...
Только он не зрит дальше своего хода. Например, если на пути минотавров появится пара стеков иллюзий, то может получится так, что минотавры и вовсе не успеют ударить иллюзионистов.Этот метод иногда лучше анализа статистики, т.к. статистика в итоге выдаст достаточно общие выводы, а тут при разнице в 1 минотавра предпочитаемое действие может смениться.
Моя думать, надо и то и то использовать в течении боя, но окончательный ответ таки даст исход боя, а не исход одного раунда.
All
Господа, еще один важный момент касательно базовых свойств стека.
В Четверке стек может: атаковать ранжед без перемещения; кастить без перемещения; использовать итем (бутылка/ ванд) без перемещения; атаковать melee нераздельно от перемещения; единожды ответить на атаку одновременной ответкой(*); преместится без атаки любого вида; остаться на месте, перейдя в режим защиты.
Моя думать, что красивее и тактически гибче дать возможность стеку переместится и атаковать любым доступным ему способом/ уйти в защиту. Собственно, это уже предлагалось у нас на форуме (аж в 2005) и по-своему реализовано Катаури в их сиквел-серии King's Bounty, равно как и в Disciples III от .Dat.
-----
(*) за искл. грифонов и на атаку стека с first strike одновременно получится только у атакуемого с first strike.
К счастью, нет. Просто на доморощеных изобретателей велосипеда насмотрелся. Да и стараюсь уже бережнее ко времени относиться.Dalai wrote:Все правильно. Ты кандидатскую, часом, в поледнее время не писал? Методологический подход чувствуется
Вот что значит задать верный вектор!Dalai wrote:Было бы желание
Точно не скажу, но те внутренние структуры в памяти, ИМХО, более характерны для плюсов.Dalai wrote:Четверка была на Си, не уверен насчет плюсов.
Нет - мое развитие в этом направлении остановилось на уровне начала века. Т.е., C# и иже с ними пошло уже без меня. Но, думаю, важную роль сыграет язык, на котором написан графический движек - если предполагается использовать готовый, а не писать свой.CTPAHHuK wrote:Может Max знает?
Я привел пример. Твои вопросы показывают, что все сложнее, но на то он и пример, а не решение. С другой стороны, на то компу и дадено миллиарды операций в секунду, чтобы сложность и количество вариантов его не пугало.Accolon wrote:Например, какой смысл в ослаблении армии кастеров посредством курсов, понижающих физические хар-ки, но не влияющих на инициативу, Spell Power и к-во маны?
Не зря же я так много и часто об этом пишуAccolon wrote:Для определения максимально положительного изменения требуется серия боев.
Учиться на 1 бое может человек, и то не всегда, а только когда есть хороший опыт. Комп не в состоянии отделить случайное от систематического, свой прокол от чужой хитрости, исключительный случай от типичного.
Я играл в игры от Катаури. У них очень интересный тактический бой, но есть один важный момент - ты всегда против компа. Против человека тактический прием "блокировка стрелков милишником" очень важен. А при таком подходе блокировка будет практически бесполезна.Accolon wrote:Моя думать, что красивее и тактически гибче дать возможность стеку переместится и атаковать любым доступным ему способом/ уйти в защиту. Собственно, это уже предлагалось у нас на форуме (аж в 2005) и по-своему реализовано Катаури в их сиквел-серии King's Bounty, равно как и в Disciples III от .Dat.
Разве что уменьшать силу выстрела вдвое, если перед выстрелом было движение...
Очень здраво.Max_HMMI wrote:Но, думаю, важную роль сыграет язык, на котором написан графический движек - если предполагается использовать готовый, а не писать свой.
Web-designer wanted. "Once a knight, always a knight, but once a King is once too often!" (c) Sir Bella of Eastmarch
А Ява это какой век?Max_HMMI wrote:Нет - мое развитие в этом направлении остановилось на уровне начала века.
Я недавно общался с Camoes'ом, он, помимо того, что знаменитый онлайн игрок героев 4, ещё и преподает программирование. С радостью возьмется за работу на Яве.
Ява-Джава считается очень универсальной, но часто весьма тормозной.CTPAHHuK wrote:А Ява это какой век?
Web-designer wanted. "Once a knight, always a knight, but once a King is once too often!" (c) Sir Bella of Eastmarch
Dalai
Я к тому, что определение должно быть настолько четким, насколько потребуется для алгоритмического воплощения оного. Оно не обязательно должно быть окончательным, но оно должно быть четким.Твои вопросы показывают, что все сложнее, но на то он и пример, а не решение.
Я затыкал циклопов иллюзорным фениксом (ага - усилил Катауровский закл иллюзорного двойника - у меня он давал 100% от хитов цели-родителя). Циклопам-бедолагам мешала сдвинутся жесткая гексо-сетка, т.е., чуть-чуть они отойти не могли, а соседние поля были заняты стеками-союзниками. Так что, возможность затычки вполне остается и при таком подходе.А при таком подходе блокировка будет практически бесполезна.
Нет смысла. Все будет зависеть от тактической разметки поля боя.Разве что уменьшать силу выстрела вдвое, если перед выстрелом было движение...
Dalai wrote:Только я бы еще ввел некий интегральный показатель силы армии (своей и врага) и отслеживал применение тех или иных кудов не только в успешных-неуспешных боях, а даже отдельных раундах.
Мне кажется, придумывать интегральный показатель силы армии не надо. Существует хороший показатель - опыт (experience).Accolon wrote:Сначала нужно определится с самим интегральным показателем.
Единственное, для героев он вводится с грубой ошибкой: не учитывает навыки, заклинания и артефакты. При большом количестве алтарей, рубинов, университетов, школ и прочих левелапах, при очень сильных заклинаниях типа дезинтеграции, массовых заклинаний и т.п., при наличии свитков и тактических артефактов, даже герои невысоких уровней оказываются и сильнее и полезнее кого попало 40-го уровня.
Постараюсь к воскресенью довести до конца раздел с описанием показателей армии в боях ИИ.
Все верно.Accolon wrote:Например, если стек милишников/ стрелков находится под действием Weakness, то виртуально/ интегрально (т.е., итогово) он ослабляется на 25%.
То, о чем говоришь ты:
- это удобный показатель для стратегического ИИ. На тактическом поле боя в нулевом раунде ничто не мешает пользоваться им же. Но по ходу боя вносятся уточнения - эти отравлены, у того есть диспелл, этот в броньке регенерации, и т.п.CTPAHHuK wrote:Мне кажется, придумывать интегральный показатель силы армии не надо. Существует хороший показатель - опыт (experience).
Web-designer wanted. "Once a knight, always a knight, but once a King is once too often!" (c) Sir Bella of Eastmarch
В эпоху своей бурной молодости смотрел на разновидность Явы для программирования мобильников (с целью трудоустройства в сабжевую контору). Фактически, тот же Дельфи. Но да, тормозной, ибо через интерпретатор работает.CTPAHHuK wrote:А Ява это какой век?
Я недавно общался с Camoes'ом, он, помимо того, что знаменитый онлайн игрок героев 4, ещё и преподает программирование. С радостью возьмется за работу на Яве.
дополню в достаточно важной частности - редактор карт должен уметь импортировать и экспортировать скрипты, написанные любым внешним текстовым редактором (plain текст, txt).10. Богатый и простой редактор карт с возможностью уйти на сложный уровень в тех случаях, где это необходимо (сложный или длинный скрипт, к примеру).
В Героях все время уходит на организацию Чемпионата мира и участие в зимнем сезоне Портала. Оформления мыслей по концепции окладывается на месяц-два.CTPAHHuK wrote:остараюсь к воскресенью довести до конца раздел с описанием показателей армии в боях ИИ.
Dalai
Есть три новости. Все три хорошие.
Первая хорошая новость, на пару с Camoes'ом проявил желание помочь Экви тим очень крутой игрок - Gustn. Последний Цезарь времен ToH'а. Вторая новость, он не только крутой игрок, но и крутой программист. Третья новость, он ещё и знаком лично с Camoes'ом. Нормальная такая команда. Топовые игроки мирового уровня, программисты, хотят помочь.
Рассказал Gustn'у о идее разработки новой игры, ему понравилось, но больше всего он хочет покапать файлы Героев 4
Может их как-то можно ввести в курс дела?
Ах да. Четвертая новость. Крутой игрок Tyler настоятельно требует разработать новый англоязычный сайт, куда можно будет сообщать о результатах игр, проходящих вне ЧМ. По его мнению, на других сайтах Герои 4 слишком затенены. Нужен конкретный сайт по четверке для репортов и единым форумом.
Замечательные новости!
У меня тоже есть несколько хороших, но пока не законченных новостей, скорее, заделов (тьфу-тьфу-тьфу ).
По сайту - сайт проекта устарел морально и физически - это несомненно. Предлагаю открыть отдельную тему.
По "ввести Gustn'a в курс дела" - подергаю всех, кто мог бы помочь.
P.S. Имена-то какие... Прям вспоминается, как трава была зеленее
У меня тоже есть несколько хороших, но пока не законченных новостей, скорее, заделов (тьфу-тьфу-тьфу ).
По сайту - сайт проекта устарел морально и физически - это несомненно. Предлагаю открыть отдельную тему.
По "ввести Gustn'a в курс дела" - подергаю всех, кто мог бы помочь.
P.S. Имена-то какие... Прям вспоминается, как трава была зеленее
Web-designer wanted. "Once a knight, always a knight, but once a King is once too often!" (c) Sir Bella of Eastmarch