fuente - desarrollo de juegos con javascript
Juego de ajedrez en JavaScript (3)
¿Hay alguna API de juego de ajedrez, simplemente escrita en JavaScript? ¡No flash! ¿Alguien sabe el algoritmo (en general) utilizado en los juegos de ajedrez?
¿Cómo funciona un algoritmo de ajedrez ?:
Lo que una computadora de ajedrez trata de hacer es generar el árbol de posición del tablero cinco o 10 o 20 movimientos hacia el futuro. Suponiendo que hay alrededor de 20 movimientos posibles para cualquier posición del tablero, un árbol de cinco niveles contiene 3,200,000 posiciones del tablero. Un árbol de 10 niveles contiene cerca de 10,000,000,000,000 (10 trillones) de posiciones. La profundidad del árbol que una computadora puede calcular está controlada por la velocidad de la computadora que juega el juego. Las computadoras de ajedrez más rápidas pueden generar y evaluar millones de posiciones de tablero por segundo.
Una vez que genera el árbol, la computadora necesita "evaluar las posiciones de la junta". Es decir, la computadora tiene que mirar las piezas en el tablero y decidir si la disposición de las piezas es "buena" o "mala". La forma en que lo hace es mediante el uso de una función de evaluación. La función más simple posible podría contar la cantidad de piezas que tiene cada lado. Si la computadora está jugando en blanco y una determinada posición del tablero tiene 11 piezas blancas y nueve piezas negras, la función de evaluación más simple podría ser:
11 - 9 = 2
Obviamente, para el ajedrez esa fórmula es demasiado simple, porque algunas piezas son más valiosas que otras. Entonces la fórmula podría aplicar un peso a cada tipo de pieza. A medida que el programador lo piensa, él o ella hace que la función de evaluación se complique más y más agregando cosas como la posición del tablero, el control del centro, la vulnerabilidad del rey para verificar, la vulnerabilidad de la reina del oponente y muchos otros parámetros. Sin embargo, no importa cuán complicada sea la función, se condensa a un solo número que representa la "bondad" de esa posición de la tabla.
Para crear su propio ''motor'' de javascript que sea capaz de jugar al ajedrez a un nivel básico. Paso a paso Ajedrez de Javascript con oppo de CPU
Si se desplaza hacia abajo, contiene el código fuente de este motor de ajedrez, debe decir muy limitado, basado puramente en javascript. También tiene una versión funcional del juego para probar y todos los recursos necesarios para construir el tuyo.
Algunos recursos útiles:
- Primera implementación de un motor de ajedrez en Javascript
- The Anatomy of Chess Programs , de Tony Marsland, es una buena introducción sobre cómo funcionan los programas de ajedrez actuales.
- Espacio de ajedrez
- Paul Verhelst - Preguntas y respuestas
- Bibliografía sobre los algoritmos Minimax ( versión más reciente ).
- Crafty es un programa sólido cuyo código fuente está disponible de manera gratuita y, para un programa de ajedrez, bastante legible.
- Trabajo sin terminar y desafíos para los programadores de ajedrez
- ¿Hay un algoritmo perfecto para el ajedrez? Discusión aquí sobre así
- Cómo las computadoras juegan al ajedrez El mejor libro que he encontrado que describe la teoría detrás de los algoritmos de ajedrez AI
El Blog de Computer Chess documenta la creación de un motor de ajedrez C #. No es JavaScript, pero la sintaxis es lo suficientemente similar como para que pueda obtener una buena comprensión de los diferentes componentes del motor de ajedrez.
Además, si desea que su motor de ajedrez esté habilitado para la Web, es posible que desee considerar usar C # con una GUI de Silverlight. Obtendrá un mejor rendimiento de .NET que con JavaScript. Como aprenderá, esto se traducirá en un programa de ajedrez más fuerte (de búsqueda más profunda). Un buen ejemplo de Silverlight Chess se puede encontrar en GeeksWithChess.com
Para una discusión algorítmica, prueba la Wiki de Programación de Ajedrez .
Las técnicas adecuadas para los motores de ajedrez serios no son necesariamente correctas para los juegos basados en la web. Los verdaderos motores de ajedrez ejecutan órdenes de magnitud más rápido, usan libros de apertura de varios megabytes y gastan minutos u horas en cada turno. Un verdadero motor de ajedrez buscará más de 12 capas, mientras que JavaScript no pasará de las 6 capas en un tiempo razonable. Por lo tanto, algo así como un oráculo de pieza cuadrada , que tiene rendimientos decrecientes y posiblemente negativos a medida que la búsqueda se profundiza y, por lo tanto, está fuera de moda en los círculos de programación de ajedrez, es posiblemente adecuado para un motor javascript. Si haces lo que la gente estaba haciendo en los años 80, terminarás con un motor ágil y manejable que vencerá a la mayoría de los visitantes.
Y, por supuesto, realmente no desea buscar lo que otras personas están haciendo. Solo asegúrese de tener alguna variación de una búsqueda alfa-beta , luego ajuste la función de evaluación y todo lo que considere oportuno.
En 2002 y 2012 escribí luego reescribí p4wn , un pequeño motor de javascript de dominio público. Utiliza alfa-beta y un oráculo de pieza cuadrada. Probablemente sea más débil que Garbochess-JS , pero luego Garbochess tiene un libro de apertura que es más grande que todo el motor p4wn.