Skip to content
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

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

Open
boriszaitsev opened this issue Jul 26, 2019 · 3 comments
Labels
bug Something isn't working

Comments

@boriszaitsev
Copy link
Contributor

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

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

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

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

@boriszaitsev
Copy link
Contributor Author

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

@boriszaitsev
Copy link
Contributor Author

Сделал ПР
#297

@Pro100AlexHell
Copy link

Pro100AlexHell commented Jul 26, 2019

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

Вот конкретные предложения:

  1. (или) считать "столкновением только когда оба идут лоб в лоб" и удалить размеры игроков из расчетов (ввести дискретность позиции, равную "ближе к ячейке N")
    это подварианты:
  • оба идут в центр одной ячейки, находясь не в центрах, но сталкиваясь в центре
    http://prntscr.com/okg8oq

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

  • оба идут из центров - на пересечение (один вверх, другой вниз, как на скрине), сталкиваясь не в центре, но на пол-пути
    http://prntscr.com/okg7y1

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

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

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

  • смерть только зеленого - если тот шел на территорию красного (если сработает условие столкновения - выше), а красный на свою территорию шел
  • смерть только красного - если тот шел на территорию зеленого, а зеленый на свою территорию шел
  • смерть обоих - если оба шли на чужую территорию и столкнулись лбами

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants