MailRuChamps / miniaicups

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

Смерть от удара на своей территории #321

Open ud1 opened 5 years ago

ud1 commented 5 years ago

Насколько помню, в оригинальном paper.io если игрок находится на своей территории, то смерть ему не грозит (кроме как случая, когда тебя съедают окружением). Но здесь же, согласно правилам, при столкновении головами умирает тот, у кого шлейф длиннее, или оба, если шлейфы одинаковой длины. Может возникнуть ситуация, когда шлейфы у обоих игроков равны 0, когда две вражеские территории соприкасаются, первый игрок идет вдоль края своей территории НЕ покидая ее, а перемещаясь из одной своей клетки в другую свою клетку, при этом второй игрок, находясь на краю своей территории уже Покидая ее движется на территорию первого игрока и сталкиваясь с ним, помирают оба.

Предлагаю изменить правила, чтоб первый игрок не умирал, т.е., если два игрока сталкиваются головами, при этом у них у обоих длина шлейфа 0, то если начальная и конечная точка игрока при движении лежат на его территории, то он остается жив, другой игрок, у которого только начальная точка на своей территории, а конечная на территории врага, тот умирает.

boriszaitsev commented 5 years ago

Я хотел предложить фикс в котором обрабатывать отдельно случай, если если шлейф игрока =0. Его чекать на интерсект только с игроками с такими же нулевыми хвостами. И там проверять - если игроки идут навстречу друг другу и пересекаются, то оба мрут, в остальных случаях оба выживают. Как сделать так, чтобы тот который идет по своей территории выживал, а тот который заходит со своей на вражескую, что возможно выглядит чуть правдоподобнее я не представляю. Ну то есть сделать то конечно можно, но надо вводить какие-то костыли - хвост дробной длины или чекать владельца пункт назначения (а он вообще говоря может поменяться), короче сложно, новые баги только кликать.

boriszaitsev commented 5 years ago

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

mmamaev commented 5 years ago

Наблюдал сегодня описанный случай https://aicups.ru/session/624788/ тик 1249. Синий бот получил команду up и начал движение вдоль своей территории из (11, 5) в (11, 6). Зеленый бот, я предполагаю, получил команду left и начал движение из (12, 6) в (11 ,6), покидая свою территорию. Как только боты сдвинулись, они взаимно уничтожились.

Я полагаю, что так быть не должно. Если на тике 1250, то есть, едва покинув центры ячеек (11, 5) и (12 ,6) соответственно, боты считаются уже прибывшими в ячейку (11, 6) и там столкнувшимися, то зеленый бот по прибытию в (11, 6) должен иметь шлейф длиной 1, а синий - длиной 0, соответственно выигрывает синий. Если же на тике 1250 боты еще не прибыли в (11, 6) и, следовательно, зеленый еще не заработал шлейф, то тогда боты и не столкнулись.