Коллеги, не могу понять, почему карта (см. приложение) после 10-15 итераций ломается и крестьяне стоят.
В кратце - я заставляю бегать крестьян к самому ближнему кусту звездолиста, но после нескольких кустов они наотрез отказываются продолжать движение дальше.
Следующим этапом будет добавление чуточку рандома и генерация случайных свойств дистабилизирующих или улучшающих выживание крестьян в этом тяжелом мире.

Принятый ответ

Naadir, мне почему-то кажется, что у тебя проблема в том, что есть цветок 1 и 10 работников. И у тебя получаются записи типа:
цветок 1 - работник 10.
цветок 1 - работник 8.
цветок 1 - работник 7.
В общем, массив не отчищается при удалении предмета с карты. А ещё может быть такое, что функция pick предметов на карте, каждый раз выдает разные id предметам.
Добавил БД-индификтор предметам в первую версию поиска.
Получить ID любого предмета можно стандартной гуи-фцией valueitem. Пока что в раздумьях, как сделать адекватную матрицу, адекватно расширяемую? Или возможно её чем-то заменить?
Можно ли как-то обыграть такую структуру в war3?
За неимением мысли о матрице, сделал пока что генерацию "родства" до 4х поколений. Теперь Вы вполне можете узнать, кто был отцом, дедом и прадедом отдельно взятого юнита. См. приложенный файл. по ссылке.
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
2
20
6 лет назад
2
ProstoParya, я просто в шутку хочу подобавлять разных переменных, которые бы меняли ИИ peasant'ов, чтобы благодаря конкуренции узнать какая из поведенческих основ самая эффективная :) А ещё это генерирует забавные ситуации. Но пока что я не разобрался, почему у всех все работает, а у меня нет.
А вообще, можно даже устроить конкурс на такого рода ИИ, если найдутся желающие.
0
27
6 лет назад
0
DemonoiD, можно сделать =) но очень плохо понимаю, что вы хотите сделать)
2
20
6 лет назад
Отредактирован DemonoiD
2
Steal nerves,
Рассмотрим приложенный мною файл.
Здесь мы имеем переменные, такие как
name-peasant - эта переменная отвечает за родство и структурируется блоками. Например, есть два peasant с именами 0000 0000 0000 0001 и 0000 0000 0001 0002. Это значит, что 2 рабочий сын первого рабочего. Возможно, 16ричная кодировка будет здесь уместнее. Это позволит в 4х поколениях отличать своих от чужих и добавлять разные забавные условия, которые позволяют рабочему "атаковать всех кроме родственников". По факту, выделяя в будущем их в племена.
Характеристика-действие - это то, как рабочий реагирует на события в % соотношении.
Событие - это действие, произошедшее вокруг рабочего или с рабочим.
Оба этих параметра составляют матрицу поведения, которая бесконечно расширяема.
Кратко пройдемся по событиям:
  • обычное - состояние, когда рабочий один, ему ничего не угрожает.
  • в группе - состояние, когда вокруг рабочего есть другие рабочие. Возможно, бегать в толпе - не очень выгодное решение, поэтому найдутся одиночки, которые будут этих групп сторониться, либо наоборот чувствовать себя в них лучше.
  • стресс - это низкий показатель здоровья-голода - возможно, рабочие изменят свое поведение, когда обычного состояния, чтобы добыть пищу, не найдется. Следовательно, место попыток бегать за травой, он резко перейдет на употребление собратьев или будет кричать о помощи, чтобы кто-то с ним поделился пищей.
  • атакован - состояние, когда на рабочего напали. Возможные модели поведения - убегать, звать на помощь, защищаться.
  • Крик о помощи - что будет делать рабочий, когда в каком-то радиусе кому-то потребуется помощь?
  • Болезнь/погода - внешние обстоятельства, написанные просто так. Но смысл думаю понятен.
Причина статуса - это характеристика для каждого рабочего для того, чтобы он принял во внимание какое-то событие. Например, один рабочий впадет в стресс при 10% здоровья, а другой при 50%.
Раздражительность статуса - статусов может быть много, например может идти дождь и одновременно рабочий будет атакован. Она перемножается на абсолютно все % снизу по столбцу, чтобы получить ответ, что при таких условиях все же будет делать рабочий.
Так же отдельное внимание хочу обратить на поиск пути - это просто список алгоритмов для поиска пропитания. Например бежать к дальнему кусту, но если в радиусе 1000 метров есть другой, бежать к нему. Или стоять и ждать пока куст не респавнится рядом. Или бежать к ближнему кусту со всей толпой.
А теперь к конкретике - суть в том, чтобы добавляя случайные +-% к характеристикам родителя и выдавая их потомку, получить один или несколько видов поведения у рабочих. Возможно, это будут религиозные фанатики, которые будут ждать рандома от Бога рандома, что он пошлет куст звездолиста рядом с ними или отъявленные убийцы, питающиеся своими собратьями или помощники друг другу, предпочитающие умереть сами, но не дать погибнуть товарищу или рабочие, которые будут собирать ресурсы только во время дождя.
Если посмотреть в прогрессии, то когда мы исключим все возможные операции поведения с беготней к кустам, можно будет выйти на уровень выше - постройке поселений. Для этого нужно два фактора - дать возможность рабочим высаживать рассаду кустов самим и определение своего-чужого :)
Ах да. Основные проблемы:
  • отсутствие массивов в warcraft3.
  • без понятия, почему мой warcraft не переваривает выложенные карты адекватно, когда я их модифицирую.
  • не понятно, как на гуи (а здесь ничего сложного, все if-ами) сделать функции, чтобы не перегружать основной код.
ПС: многовероятен шанс, что победят те, кто будет нападать на других рабочих, чтобы их убить и одновременно звать на помощь :)
Загруженные файлы
2
26
6 лет назад
2
отсутствие массивов в warcraft3.
чяндт?
2
26
6 лет назад
2
Что за массивы отсутствуют в варике?
0
23
6 лет назад
0
видимо он хотел многомерный массив это изи делает но ему сложно!
2
20
6 лет назад
2
pro100master, там есть матрицы? Что? Или снова представление одномерного массива многомерным?
0
16
6 лет назад
0
Отвратительно.
Три мутатора есть, но как же мне сейчас лень искать утечки. Займусь этим после. А вы пока что можете немного поразвлекаться с этой штукой.
умные: бегут к предмету, если к нему не бежит никто, кто ближе них; не атакуют вообще
агрессивные: атакуют ближнего с 25% шансом
работник: тупо стадо, бегающеем по полю
Загруженные файлы
0
20
6 лет назад
Отредактирован DemonoiD
0
Naadir, мне почему-то кажется, что у тебя проблема в том, что есть цветок 1 и 10 работников. И у тебя получаются записи типа:
цветок 1 - работник 10.
цветок 1 - работник 8.
цветок 1 - работник 7.
В общем, массив не отчищается при удалении предмета с карты. А ещё может быть такое, что функция pick предметов на карте, каждый раз выдает разные id предметам.
Добавил БД-индификтор предметам в первую версию поиска.
Получить ID любого предмета можно стандартной гуи-фцией valueitem. Пока что в раздумьях, как сделать адекватную матрицу, адекватно расширяемую? Или возможно её чем-то заменить?
Можно ли как-то обыграть такую структуру в war3?
За неимением мысли о матрице, сделал пока что генерацию "родства" до 4х поколений. Теперь Вы вполне можете узнать, кто был отцом, дедом и прадедом отдельно взятого юнита. См. приложенный файл. по ссылке.
Загруженные файлы
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.