-
Notifications
You must be signed in to change notification settings - Fork 139
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Update helpers.py is_intersect: manhattan dist #297
base: master
Are you sure you want to change the base?
Update helpers.py is_intersect: manhattan dist #297
Conversation
Now is_intersect returns True if difference in any axis (x or y) between players less than width. Thiat results to issue with double death in case when they pathes are perpendicular and both players start and end points (elementar cells, grid crosses) are valid. Replacing condition to comparing width with manhattan dist makes this issue fixed.
В правилах везде говорится, что игрок -- это квадрат. Этот PR превращает его в ромб (это конечно тоже квадрат, но не тот, что имелось в виду). В описаной ситуации я лично не вижу противоречия правилам. Игроки столкнулись, у обоих шлейф одинаковый (нулевой), следовательно оба умирают. Может быть стоит задуматься над тем чтобы откорректировать правила в этом случае и переопределить длину шлейфа. (Но не переопределять форму игрока!). Либо, если так и надо, то желательно разъяснить этот момент в правилах. Интересно что думают орги на этот счёт. Ещё, если не ошибаюсь, этот PR ненамеренно меняет механику пилы. |
Ну пусть при учете коллизий будет ромб, все остальные "настоящие" коллизии обработаются нормально, когда действительно траектории пересекаются, просто на пару тиков позже. Зато не будет контринтуитивной ситуации, когда находясь на своей территории, бот не может избежать смерти, куда бы он не пошел. |
249 строка: miniaicups/paperio/local_runner/game_objects/game.py Lines 244 to 256 in d1b3b3e
|
Да, пропустил это место. |
Однозначно игрок находящийся на своей территории должен быть в безопасности. Игрок на территории противника должен проигрывать при столкновении. Иначе какой смысл в своей территории? |
Согласен с @demin-dmitriy. Если в этой ситуации посчитать, что у игрока-агрессора длина шлейфа больше нуля (он ведь на 1/6 уже заехал на территорию противника), тогда он бы от этого столкновения погиб. |
@voidmain02 про длину шлейфа нет вопросов, она у обоих игроков в issue нулевая. Если ПР принять, то на тике 1 столкновения не будет, и через 5 тиков игрок 1 будет в Б ( на своей территории, шлейфа нет), игрок 2 будет в А( на вражеской территории, шлейф == 1). При этом все прочие ситуации, когда квадраты 30х30 игроков сталкиваются (в лоб или под прямым углом) так же останутся коллизиями, просто будут происходить иногда ( в случае прямого угла ) на пару тиков позже. |
Now is_intersect returns True if difference in both axises between players less than width.
Thiat results to issue with double death in case when they pathes are perpendicular and both players start and end points (elementar cells, grid crosses) are valid.
Replacing condition to comparing width with manhattan dist makes this issue fixed.
Сейчас считается что есть столкновение, если разница по обоим координатам меньше 30.
В таком случае получаются ложные столкновения, когда оба игрока находятся в соседних узлах сетки (aka элементарных ячейках, кратных 30 -15), оба на своей территории. Затем первый игрок начинает двигаться ко второму, со своей территории на территорию второго, а второй уходит от столкновения в сторону. со своей территории на свою же.
Получается что второй игрок умирает двигаясь полностью по своей территории, это явно противоречит правилам.
#295
Если заменить условие столкновения на (манхеттенская дистанция < width), то такой случай обработается ожидаемым образом, столкновения не будет, первый игрок начинает захват чужой территории, второй игрок находится на своей территории, в безопасности.