2010-05-10 9 views
8

Im implementando un juego de billar en Java y todo funciona bien. Es un juego multijugador, pero, sin embargo, también debería ser posible jugarlo solo. Para este propósito, estoy tratando de implementar un KI simple. Por el momento, el KI elige al azar una dirección y una intensidad aleatoria del impulso (no se conoce la palabra correcta en inglés para eso). Por supuesto, esta IA es muy pobre y es poco probable que desafíe a un jugador.Pool Billiard AI

Así que pensé en mejorar el KI, pero hay varios problemas difíciles de resolver. Primero pensé en elegir la pelota más cercana y tratar de ponerla directamente en el hoyo más cercano. Esto no es tan malo, pero si hay otras bolas en la línea intermedia, en realidad ya no funciona. Además, esto no resolverá el problema de calcular la intensidad del impulso.

¿Hay algún consejo general? O alguna idea? ¿Mejores prácticas?

Respuesta

7

¿Cuánto tiempo de CPU y memoria se necesita para calcular los resultados de un "movimiento" del juego? ¿Puede permitirse analizar más de un movimiento? Si es relativamente barato hacerlo, simplemente elija N direcciones/impulsos aleatorios, calcule los resultados y elija el mejor. Puede eliminar algunos casos "complicados", cuando la pelota va al bolsillo después de demasiadas colisiones. Además, para simplificar, puede limitar el tiempo de simulación para cada movimiento (es decir, no espere hasta que se detengan todas las bolas, simplemente califique los primeros T segundos).

De esta forma, puede tener reproductores de computadora de diferente nivel, mientras que N (y T) más altos corresponden a un nivel de reproducción más alto.

+2

Hay 2 cosas que me gustan con esta solución. En primer lugar es paralelizable, ya que puede calcular fácilmente 3/4 opciones diferentes a la vez. En segundo lugar, en lugar de elegir N, puede elegir un momento y dejar de computar cuando se alcanza, lo que garantiza que nunca demorará demasiado (lo que es bueno). –

+0

-1 disparos aleatorios harán una IA muy pobre. Tampoco muestra ninguna idea de un juego que ya debería tener las matemáticas y la física incorporadas. – phkahler

+0

Gracias por la sugerencia, pero creo que no será posible más de un movimiento porque es un dispositivo realmente lento;) – RoflcoptrException

0

Creo que es casi aleatorio. Desea que physics engine modele las interacciones de cue, bolas, parachoques y bolsillos. Se siente menos como AI y más como física para mí.

+0

Tal vez no he entendido bien la palabra Inglés AI;) sólo quiero encontrar una mayor o menos simple manera/algoritmo de wathever para implementar un jugador jugado en la computadora que no es tan malo como uno al azar – RoflcoptrException

+2

AI es un acrónimo, ni una palabra. Y su juicio sobre la simplicidad del problema depende de su comprensión de la física y la fidelidad que desea incluir en el modelo. – duffymo

1

Puedo pensar en dos enfoques amplios.

  1. Haga una lista de todas las posibles posiciones de referencia en torno a los niveles de la bola de señal y de la fuerza, y luego buscar en la lista para encontrar el primero que le permite hundirse una pelota. Esa es una lista bastante grande, puede recortarla usando una pequeña cantidad de niveles de fuerza y ​​excluyendo cualquier tiro malo "obviamente".

  2. Trabaje hacia atrás: mire cada bola sobre la mesa y vea si la bola blanca puede ponerse en contacto. Luego calcula la posición de cue correcta y el nivel de fuerza para hacer que entre en el hoyo. Puede expandir esto para buscar un árbol para tiros de bolas múltiples.

Me gusta solution 1 the best; te permite encontrar situaciones en las que podrías hundir dos o más bolas a la vez.

1

Puede considerar como mostrar las bolas como un gráfico ponderado tal vez. Podrías poner los bolsillos como nodos especiales. A continuación, eliges qué bola poner o golpear, dependiendo del peso del camino desde la bola blanca, hasta la bola específica y el bolsillo. La intensidad del impulso también se puede establecer usando el valor de este peso. A continuación, puede utilizar un motor de física para determinar si la toma es posible. Nunca lo intenté, así que todo es teórico y no sé si es práctico. Además, dicho método no incluye tener la señal o las otras bolas rebotando, por lo que básicamente solo servirá para tomas directas.

4

Dependiendo del juego de los billares por lo general tienen dos tareas

evaluar la situación sobre la mesa (obtener disparos posibles)

  • En el escenario perfecto (puntería perfecta, tiro perfecto) todas las tomas posibles son igual de duras y si solo considera disparos directos a una bola, habrá solo un máximo de 6 agujeros xn situaciones de bolas que debe analizar (analizar cánones simples: golpear dos bolas requiere solamente n^2 bolas x 6 agujeros situaciones). Para cada una de estas situaciones, establecer si son posibles requiere un análisis simple (a menos que esté realizando simulaciones de colisión muy realistas). Entonces, en simulaciones muy simples, puede intentar construir todas las situaciones posibles y clasificarlas. Para analizar los tiros fuera del banco es posible que desee reflejar las bolas y los agujeros.

  • alternativa en la enumeración de las posibles situaciones que simplemente puede hacer una exploración línea de la tabla, marcando las áreas que son ilegales para los tiros y la enumeración y la construcción de vacunas potenciales como ...

angle1, ball1 , POCKET2
angle2, ball1, POCKET3
angle3, ball1, ball2, POCKET1
angle4, cushion2, ball2, POCKET1

  • Para una IA más agradable, quieres simular imperfecciones, por ejemplo, si la jugada se juega golpeando una pelota en algún punto x (quizás definido como un ángulo alejado del golpe directo), supongamos que habrá un error (debido a un mal objetivo , o mal golpe, o cualquier cosa) de dx - esto a su vez causará que la bola tenga un error en la dirección que aumentará con la distancia al bolsillo. Esto proporciona una forma de clasificar los disparos por dificultad: la sensibilidad del disparo en términos de error en el objetivo/disparo (algunos disparos son más fáciles que otros). Esto dependerá de la longitud del camino desde el blanco hasta la pelota y desde la pelota hasta el hoyo.

  • Una cosa más a tener en cuenta es el riesgo de bola blanca va en el agujero, o de otras tomas ilegales

Elegir el disparo (no sólo sobre la base de la dificultad, sino también en el aumento de potencial)

  • tendrá que mirar a la estrategia también (un tiro fácil que podría dejar sin nada en la siguiente ronda)
  • no sólo se lo fácil que es para hacer una fi primer disparo, pero también qué tan difícil será el segundo disparo (para esto podría ejecutar la evaluación de esa situación simulada de nuevo, y aquí podría hacer que el jugador sea más fuerte o más débil dependiendo de cuántos disparos pueda mirar hacia adelante; también puede darle personalidad al jugador - buscando primero la profundidad de las soluciones o la amplitud)
  • al elegir la estrategia debe buscar la combinación de disparos cuya suma de dificultad es mínima (es posible que necesite evaluar la importancia de las tomas posteriores teniendo en probabilidad de cuenta que perderá)
  • dependiendo del juego, puede considerar la introducción de golpes de seguridad que son puramente juego posicional y el objetivo no es meter la pelota inmediatamente, sino forzar al oponente a cometer un error o aliviar una situación para ti (hay otras situaciones en las que jugar esos tiros sería beneficioso, por ejemplo, cuando no puedes golpear nada, pero necesitarías dividir algunas pelotas o alejarlas del cojín). en este caso, deberá comenzar desde el final.
  • todo esto hace mucho más complicada con la física realista: giros, colisión realista, rebotes, cojines realistas, notas de referencia, etc ..