Тактика в игре

Разговоры об игре War of Colors. Техническая поддержка. Запросы на улучшения, предложения, пожелания.
Post Reply
PLAYER_CHAR
Posts: 35
Joined: 19 Mar 2016, 11:32

Тактика в игре

Post by PLAYER_CHAR »

Самая хорошая тактика в игре - не делать тупых ошибок. Вообще говоря, тактика делится на 2 части: 1) атака 2) расстановка армий.
При атаке или при захвате территорий - нужно стараться не перекрывать путь другим своим клеткам, а то они останутся взаперти. При расстановке - если есть узкий проход, то прокачивать только те клетки, которые там пройдут, а также не ставить лишних армий, когда захватываешь тупик. Вот наглядные ошибки расстановки армий у ботов с простым интеллектом:
Hidden text.
fail1.png
fail1.png (31.06 KiB) Viewed 4398 times
fail2.png
fail2.png (42.42 KiB) Viewed 4398 times
Оранжевым указан более оптимальный вариант
Оранжевым указан более оптимальный вариант
fail3.png (32.6 KiB) Viewed 4398 times
В HTML-версии, как я сказал, у меня 3 типа ботов. 2 первых - средние, третий - продвинутый. До этого я тестировал лёгких ботов, которые расставляют армии по всем территориям, в том числе и внутри. Но они не смогли даже обыграть друг друга! :D
В придачу к этому они создавали столько частиц (анимированных эффектов), что всё дико тормозило. Поэтому я их переписал.
Теперь расскажу про то, как работает каждый бот.

1. Атакует рандомно выбранной клеткой рандомно выбранную соседнюю, и так делает до тех пор, пока на границах у него не будут везде единицы. После этого выбирает рандомно одну из пограничных клеток и накидывает ей 1 армию, и так до тех пор, пока все армии не будут раскиданы.

2. У второго тактика атаки точно такая же, а вот расставляет он немного иначе. Сначала, пока число пограничных клеток меньше числа нерасставленных армий, он накидывает каждой из пограничных клеток 1 армию. После этого остаток армий раскидывается рандомно. Неудевительно, что уровень его интеллекта примерно такой же, как и у первого.

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

Но это не всё - надо ещё грамотно расставить армии. На это у нас две задачи: оборонка и наступленка (звучит смешно, но понятно :D ).
Сначала выделяем как максимум 75% всех новых армий на оборонку.
Эти армии расставим так: берём все пограничные клетки, у которых рядом сумма армий в клетках противника больше, чем число армий в этой нашей клетке. Выбираем рандомно одну из них и кидаем ей 1 армию. И так либо пока оборонка не закончится, либо пока все клетки не будут укреплены достаточно.
Оставшиеся клетки выделяем на наступленку. А вот тут вообще сложно рассказать словами. Но попробую.
Создаём 2-мерный массив с false в каждой ячейке, который соответствует игровому полю (на самом деле там не false, а undefined, но плевать). Он нужен для того, чтобы помечать "мысленно захваченные" клетки.
Берём все пограничные клетки. Каждой приписываем "мысленную координату", которая изначально равна реальной. А потом берём рандомную клетку из пограничных и мысленно ей захватываем рандомную клетку с врагом. Передвигаем мысленную координату и помечаем в массиве, что клетка типа захвачена, а клетке, которая захватила, мысленно кидаем 1 армию (или 2 армии + 1 очко, если съели врага, и не важно, сколько у него там было армий). Наши клетки, которые в результате этого оказались взаперти или в тупике, из конкурса выбывают.
Если все мысленные клетки упёрлись в тупик, а у нас остались нерасставленные армии, то делаем следующее. Если мы начисляли ранее очки, то раскидываем рандомно армии так, что чем больше у клетки очков, тем больше шанс, что армию мы накинем именно ей. А если очков мы не выдавали, то рандомно раскидываем по всем пограничным клеткам обычным способом. Такая расстановка обеспечивает избежание вышеописанных ошибок, которые показаны на скринах.

Ничего себе, сколько текста получилось.. :shock:
PLAYER_CHAR
Posts: 35
Joined: 19 Mar 2016, 11:32

Re: Тактика в игре

Post by PLAYER_CHAR »

Думаю, алгоритм третьего бота можно реализовать на андроид-версии. Тем более, как я замечал, в ней самый сильный бот (точнее, бот на самой сложной сложности) допускает вышеописанные ошибки при расстановке армий. Ещё, думаю, этот алгоритм можно улучшить, так как у этого бота есть свои недочёты в части атаки:
1) он довольно предсказуемо себя ведёт при атаке.
2) иногда он загоняет свою самую мощную армию в тупик в узких коридорах, когда можно вместо этого пройтись по всей территории врага и съесть там гораздо больше.
Впрочем, и это можно исправить.
Post Reply