2012-02-07 10 views
5

He escrito un juego de serpientes en Java. Lo que también quiero hacer es crear una demostración para eso (por lo que la serpiente jugaría sola). He escrito una demostración simple, pero la serpiente muere bastante rápido. Entonces, ¿hay algún algoritmo o algo para ese tipo de problema? Creo que es un poco similar al problema del juego de ajedrez? Quiero que la serpiente esté viva el mayor tiempo posible. Gracias.Escribiendo un demo para el juego de serpientes

+0

solución fácil = Slow la serpiente hacia abajo! – Mikhail

Respuesta

9

Google auspiciado por AI Challenge ejecutó un juego "Tron" en 2010. Puede obtener algunas buenas ideas de la búsqueda de soluciones a ese desafío.

Si lo que desea es una estrategia muy simple que hace una demostración razonable, entonces puede intentar algo como lo siguiente:

  • Nunca hacer un movimiento que hace que se bloquee menos que no tienen otra opción
  • Si su próximo movimiento lo obliga a elegir entre dos o más espacios distintos (desconectados), muévase siempre al espacio más grande. Esto evitará que tu serpiente quede atrapada con demasiada facilidad.
  • Si se está moviendo a lo largo de una pared, continúe moviéndose a lo largo de la pared el 98% del tiempo, siguiéndolo a la izquierda o derecha según sea necesario. Esto ayudará a que su serpiente se vea razonablemente inteligente y también ahorrará espacio en el campo de juego.
  • De lo contrario, avance 90% del tiempo, gire a la izquierda y derecha al azar 5% del tiempo cada uno (esto hará que su demo sea menos aburrida).

Aparte de eso, no creo que un enfoque AI de estilo Chess (con un árbol de búsqueda de movimientos) funcionaría muy bien. No podrías buscar fácilmente suficientes movimientos por adelantado.

1

Sin hacer el trabajo por usted, puedo decirle que la mejor manera de empezar a abordar un problema como este es pensar en lo que la serpiente debería hacer para sobrevivir el mayor tiempo posible. ¿Qué 'reglas generales' debe seguir la serpiente para mantenerse con vida? Para empezar, la serpiente debería girar antes de chocar contra una obstrucción, y hacia una dirección donde no estará encerrada. Entonces, puedes programar la serpiente para que gire cuando está dentro de un espacio de su cola (o pared) y hacia una dirección con la mayor distancia entre ella y otras obstrucciones. Además, creo que Snake es un juego en el que la computadora puede jugar perfectamente y, en tu demostración, es posible que no quieras eso, así que siempre puedes poner algo de aleatoriedad solo para darle vida a las cosas si las cosas se ponen demasiado bien.

2

Esta no es la respuesta que busca, pero lo pongo porque me genuinamente gustaría ver a explorar este algoritmo más, modificándolo hasta que se encuentre con una IA bastante razonable:

El algoritmo más simple para resolver este problema es el enfoque "ir por el borde, y luego garabato hacia abajo". Básicamente, comienzas con una serpiente, la levantas para que se mueva hacia el oeste, luego abrazas la pared oeste, luego el techo. Luego atraviesas todos los cuadrados posibles como un slinky hasta que llegues al fondo, ve al oeste y comiences de nuevo.

Si lo intenta, puede convertir esto en un muy excelente AI: D

Cuestiones relacionadas