2010-01-13 112 views
30

¿Hay alguna API de juego de ajedrez, puramente escrita en JavaScript? ¡No flash! ¿Alguien conoce el algoritmo (en general) usado en los juegos de ajedrez?Juego de ajedrez en JavaScript

+1

podría ser una buena pregunta Código de golf (por un corto aplicación) –

+0

http://javascript.internet.com/games/javascript-chess-with-cpu-oppo.html –

+0

Un increíblemente pequeña aplicación (1 kb): http://js1k.com/2010-first/demo/435 – Christophe

Respuesta

55

¿Cómo funciona un algoritmo de ajedrez de trabajo ?:

lo que un ordenador de ajedrez intenta hacer es generar el árbol tablero de posiciones cinco o 10 o 20 se mueve en el futuro. Suponiendo que hay alrededor de 20 posibles movimientos para cualquier posición de la placa, un árbol de cinco niveles contiene 3,200,000 posiciones de la placa. Un árbol de 10 niveles contiene aproximadamente 10,000,000,000,000 (10 billones) de puestos. La profundidad del árbol que una computadora puede calcular es 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 la placa por segundo.

Una vez que genera el árbol, entonces la computadora necesita "evaluar las posiciones de la placa ". Es decir, la computadora tiene para mirar las piezas en el tablero y decidir si la disposición de las piezas es "buena" o "mala". La forma en que hace esto es mediante el uso de una función de evaluación . La función más simple posible podría simplemente contar el número de las piezas que tiene cada lado. Si el ordenador está jugando blanco y una cierta posición tablero tiene 11 blancos piezas y nueve piezas negras, la función de evaluación más simple podría ser:

11 - 9 = 2 

Obviamente, para el ajedrez que la fórmula es demasiado simple, porque algunas piezas son más valiosas que otras. Por lo tanto, la fórmula podría aplicar un peso a cada tipo de pieza . A medida que el programador piensa en ello, él o ella hace la función evaluación más y más complicada por la adición de cosas como posición en el tablero, el control del centro, vulnerabilidad del rey para comprobar, vulnerabilidad de la reina del oponente, y toneladas de otros parámetros. No importa cuán complicada sea la función , sin embargo, se condensa hasta un único número que representa el "bondad" de esa posición de la placa.

Source.

Para la construcción de su propia 'motor' javascript que es capaz de jugar al ajedrez a un control de nivel básico Step by Step Javascript Chess with CPU oppo

Si se desplaza hacia abajo que contiene el código fuente de esta, hay que decir muy limitado, motor de ajedrez puramente basado 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:

1

El Computer Chess Blog 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 el uso de 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 (búsqueda más profunda). Un buen ejemplo de Silverlight Chess se puede encontrar en GeeksWithChess.com

5

Para la discusión algorítmica, pruebe Chess Programming Wiki.

Las técnicas adecuadas para los motores de ajedrez serios no son necesariamente adecuadas 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 6 capas en un tiempo web razonable. Por lo tanto, algo como un piece-square oracle, que tiene rendimientos decrecientes y posiblemente negativos a medida que se profundiza la búsqueda y, por lo tanto, está muy pasado de moda en los círculos de programación de ajedrez, es posiblemente adecuado para un motor de JavaScript. Si haces lo que la gente hace en los 80, terminarás con un motor ágil y manejable que superará 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 alpha-beta search, luego modifique su función de evaluación y todo lo demás como mejor le parezca.

En 2002 y 2012 escribí y 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.

Cuestiones relacionadas