Я новичок в этом стеке gamedev, но уже использовал сайты math и cs.
Итак, я участвую в конкурсе на создание ИИ для змеи, которая будет соревноваться с четырьмя другими змеями в 5-минутных раундах, где правила очень похожи на традиционную игру змеи Nokia, за исключением того, что есть пять змей, доска 30х30 и есть ряд небольших препятствий на поле.
Как и в игре Nokia, ваша змея растет, когда вы добираетесь до фруктов, и если вы врезаетесь в себя, другую змею или стену, вы умираете. Игра запускается с задержкой в 30 мс между ходами, и каждые 50 мс сервер отправляет новое игровое состояние, которое должен анализировать код, а что нет, и выводить следующий ход.
Победителем является змея, у которой была самая длинная длина в любой точке игры. Прерыватели связи решаются убийствами.
До сих пор я реализовал поиск по графику A * для каждой змеи, чтобы определить, находится ли моя змея ближе всего к яблоку, и если это так, то она подходит для яблока. В противном случае, я сделал аккуратный маленький алгоритм, чтобы определить самую пустую область доски, на которую идет моя змея, чтобы предвидеть следующее яблоко.
Кроме этого, у меня есть несколько небольших проверок на живучесть, чтобы убедиться, что моя змея не попадет в ловушку, из которой она не может выйти, и если она застрянет, у меня есть кое-что, чтобы дать ей больше шансов выбраться.
...
Во всяком случае, я проверил свою змею на тестовом сервере, и это довольно хорошо. Как правило, моя стратегия состоит в том, чтобы идти только за яблоком, когда он уверен, и находить место, когда оно не заставляет его расти быстрее, чем любые другие змеи (некоторые змеи делают подобное, но часто просто уходят в середину или в угол), иногда он побеждает эти пробные игры, но чаще всего их побеждает одна и та же змея, которая, кажется, имеет преимущество в выживаемости (моя змея растет быстрее, но потом как-то умирает, а другая змея просто медленно плетется вперед и выигрывает в последовательности.
Поэтому мне было интересно, есть ли у кого-нибудь идеи, чтобы попытаться улучшить мою змею. Или, может быть, идеи нового подхода. Мои функции и классы хороши, поэтому изменения, которые могут показаться резкими, не должны быть слишком плохими. Я поддерживаю все идеи.
Какие-нибудь мысли?