Soy nuevo en este intercambio de gamedev pero he usado los sitios de matemáticas y cs antes.
Entonces, estoy en una competencia para crear IA para una serpiente que competirá con otras cuatro serpientes en rondas de 5 minutos donde las reglas son muy parecidas al juego tradicional de serpientes de Nokia, excepto que hay cinco serpientes, el tablero es 30x30 y hay Una serie de pequeños obstáculos en el campo.
Al igual que el juego de Nokia, tu serpiente crece cuando llegas a la fruta y si chocas contra ti mismo, otra serpiente o la pared mueren. El juego se ejecuta con un retraso de 30 ms entre movimientos y el servidor envía el nuevo estado del juego cada 50 ms que el código debe analizar y qué no, y generar el siguiente movimiento.
El ganador es la serpiente que tuvo la mayor longitud en cualquier momento del juego. Los desempates se deciden por asesinatos.
Hasta ahora, lo que he hecho es implementar una búsqueda de gráfico A * de cada serpiente para determinar si mi serpiente es la más cercana a la manzana y si lo es, va por la manzana. De lo contrario, hice un pequeño algoritmo para determinar el área más vacía del tablero, a la que va mi serpiente, para anticipar la próxima manzana.
Aparte de esto, tengo algunas pequeñas comprobaciones de supervivencia para asegurarme de que mi serpiente no esté entrando en una trampa que no puede salir y si se atasca, tengo algo para darle una mejor oportunidad de salir.
...
De todos modos, he probado mi serpiente en un servidor de prueba y funciona bastante bien. En general, mi estrategia de ir solo por la manzana cuando es algo seguro y encontrar espacio cuando no lo hace, crece más rápido que cualquier otra serpiente (algunas serpientes hacen algo similar pero a menudo solo van al medio o una esquina) a veces gana estos juegos de prueba, pero la mayoría de las veces es vencida por la misma serpiente que parece tener ventaja en la supervivencia (mi serpiente crece más rápido pero luego muere de alguna manera y esta otra serpiente avanza lentamente y gana en consistencia.
Así que me preguntaba sobre cualquier idea que alguien tenga para probar y mejorar mi serpiente. O tal vez ideas para adoptar un nuevo enfoque. Mis funciones y clases son buenas, por lo que los cambios que pueden parecer drásticos no deberían ser tan malos. Animo todas las ideas.
¿Alguna idea?
La serpiente debe adaptar su estrategia a su longitud actual.
Una serpiente muy larga puede usar su cuerpo para cercar a los oponentes. Esto significa que debe hacer un sello con una pared.
Si la serpiente viaja hacia el este, con una manzana al noreste, debe viajar hasta la pared antes de girar hacia el norte, por lo que las posibles rutas para otras serpientes están muy limitadas.
Esta serpiente con cabeza C, debe girar hacia el norte en e9, no en e8, para que cualquier oponente debajo de él quede atrapado y no pueda comer ninguna manzana que se genere por encima de la línea 'e'.
Cuanto más grande sea el área que pueda cortar y cuanto más tiempo pueda sostenerla, mejor.
fuente