MailRuChamps / miniaicups

Правила, исходники и прочее для aicups.ru
GNU General Public License v3.0
157 stars 139 forks source link

Смерь агрессора и жертвы, оба на своей территории #295

Open boriszaitsev opened 5 years ago

boriszaitsev commented 5 years ago

https://aicups.ru/session_debug/496848/ Красный и желтый игроки умирают одновременно, каждый при этом находится на своей территории (в смежных узлах сетки). Это происходит на тике 920, следующем за тиком, в котором красный откусывает кусок территории зеленого. Оба игрока двигаются синхронно по узлам, бонусов скорости не было ни у кого.

Тик 918. Территории перед захватом, промежуточный тик между узлами: 918

Тик 919. Оба приехали в узлы, красный завершил захват территории, она закрасилась, очки ему добавились. Этот тик рабочий, игрокам пришло состояние. Куда пошел красный не знаю, желтый пошел налево (мой бот, команда видна в консоли me: 25-17 dir=left, cmd: left,) 919

Тик 920. Опять промежуточный тик, боты состояния не получают, в этот момент отрисовывается смерть обоих ботов. 920

boriszaitsev commented 5 years ago

не дебаг ссылка: https://aicups.ru/session/496848/

boriszaitsev commented 5 years ago

Сделал ПР https://github.com/MailRuChamps/miniaicups/pull/297

Pro100AlexHell commented 5 years ago

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

Вот конкретные предложения: 1) (или) считать "столкновением только когда оба идут лоб в лоб" и удалить размеры игроков из расчетов (ввести дискретность позиции, равную "ближе к ячейке N") это подварианты:

формально: центр 1го игрока пересек границу ячейки1 (которая 30 кратна) (т.е по X или по Y в зависимости от direction) (возможно проще это проверить так: какая ячейка к нему ближе) и центр 2го пересек границу ячейки2, and ячейка1 == ячейка2

формально: игрок1 двигается (в любой тик, в какой это условие начнет выполняется) в ячейку2 из ячейки1, а игрок2 двигается (тоже в любой тик, они могут в разные тики начать двигаться, но суть останется) в ячейку4 из ячейки3, как только определили куда каждый "начал двигаться", то условие: ячейка1 == ячейка4 И ячейка2 == ячкйка3

2) (или) уменьшить размер игроков, скажем до 10х10 px (не 1х1 px т.к с разной скоростью не попадут друг в друга вообще), тогда столкновение будет ближе к центру, в таких случаях


что до смерти на своей территории: не должно быть смерти, если ты ближе к своей ячейке, значит на скрине 0-поста будет


что касается захвата и столкновения: сначала будет отрабатывать столкновение (меря "ближе к N ячейке") и только если ктото не умер - он будет входить в центр и захватывать