Está en la página 1de 19

AJEDREZ

LOS ELEMENTOS
 Dos jugadores.
 Tablero color intercalado(8x8).
 Piezas:

- Rey - Caballos
:: 1 :: 2

- Reina - Torres ::
:: 1 2

- Alfiles - Peón :: 8
:: 2
MOVIMIENTO DE LAS PIEZAS
 REY
◦ El Rey se mueve en cualquier dirección, una casilla cada vez.
◦ Es decir, que puede moverse a cualquiera de las casillas
contiguas a la que ocupe, siempre que no haya en ella una pieza
propia.
MOVIMIENTO DE LAS PIEZAS
 REINA
◦ La Reina, que también se denomina corrientemente "Dama",
puede moverse, lo mismo que el Rey, en las columnas, filas o
diagonales, es decir, vertical, horizontal o diagonalmente.

La Reina tiene la
mayor potencia
en comparación
al resto de las
demás piezas.
MOVIMIENTO DE LAS PIEZAS
 ALFIL
◦ Lo mismo que la Reina, el Alfil puede moverse y capturar
diagonalmente.
◦ A diferencia de la Reina y la Torre, no puede moverse ni en filas
ni en columnas.
En sus movimientos, el Alfil
tiene las mismas
limitaciones que la Reina y
la Torre, es decir, puede
ser bloqueado por piezas
propias o enemigas,
pudiendo capturar estas
últimas.
MOVIMIENTO DE LAS PIEZAS
 CABALLO
◦ Cada Caballo se mueve con la combinación de una y dos casillas:
 a) Una casilla hacia arriba o hacia abajo, y después dos a la derecha o a la
izquierda.
 b) Una casilla hacia la derecha o hacia la izquierda, y dos para arriba o para
abajo.

El Caballo puede ser


descrito como el clown, el
mal muchacho o el arma
secreta del ajedrez.
MOVIMIENTO DE LAS PIEZAS
 TORRE
◦ La Torre puede moverse horizontalmente (en fila) o
verticalmente (en columna).
La Torre no puede
moverse en
diagonal, no
siendo, por tanto,
tan fuerte como la
Reina.
MOVIMIENTO DE LAS PIEZAS
 PEON
◦ El Peón tiene un número considerable de diferencias con
relación a las otras piezas.
◦ El Peón sólo puede moverse en una dirección: Adelante.
COMO GANAR
 Se gana mediante el ataque al Rey enemigo, de tal manera que el
adversario sea incapaz de evitar la captura de su Rey.
 Cuando un Rey está amenazado de captura, se dice que está en
"jaque".
 Cuando el jaque es de tal naturaleza que no existe defensa, se dice
entonces que se ha dado "jaque mate", y el juego está terminado.

JAQUE MATE
JAQUE (Sin movimiento)
SOFTWARE
 Lenguaje:
◦ C++ 6 Builder
 Algoritmo:
◦ Minimax (añadiendo poda ALFA y BETA)

 Estructura de Datos:
◦ Árboles, Bitwase y Listas
SOFTWARE
 Representación del Tablero:
 Cada casilla toma el
valor de la pieza que
ocupa.
 0 = vacío
 1 = peón
 2 = caballo
 3 = alfil
 4 = torre
 5 = reina
 6 = rey
SOFTWARE
 La matriz ocupa mucha memoria.
 1 movimiento = 1 matriz (64 byte)

Este es solamente
el primer nivel del árbol
.......

16

16 matriz x 64 byte = 1024 byte


SOFTWARE
 Bitwase

8 4 2 1 8 4 2 1

X X X X X X X X

4 bits = 1 casilla 4 bits = 1 casilla

8 bits = 1 byte

v 2 casillas ....... 2 casillas

1 Matriz = 32 byte = 64 casillas


SOFTWARE
 ALGORITMO
◦ MINIMAX (añadiendo poda ALFA y BETA)
 Ventaja
 Esta optimiza la búsqueda en el árbol.
 No gasta procesamiento (Rápido).
 Desventaja
 No recorre el árbol completo (No busca el mejor movimiento).

MALA DECISIÓN !!!


...

...

180 160 260 280 250 300 200 180 160


SOFTWARE
MinMax(GamePosition game) { DepthLimitReached() .- Es el limite
return MaxMove(game); del nivel en el que va recorrer la
} profundidad.
GenerateMoves(Game g).- Se manda
MaxMove(GamePosition game) { el ultimo movimiento o tablero
if(GameEnded(game) || DepthLimitReached()) { para que me de otro
return EvalGameState(game,MAX); movimiento.
} else {
best_move = {};
moves = GenerateMoves(game);
ForEach moves {
move = MinMove(ApplyMove(game) , alpha, beta );
if(Value(move) > Value(best_move)) {
best_move = move;
alpha = Value(move); Value(Move m) .-Le devuelve el
} valor de ese movimiento o el
costo del movimiento.
//Ignore remaining moves
if(beta > alpha)
return best_move;
}
return best_move;

}
}
SOFTWARE
 MinMove(GamePosition game) {
 if(GameEnded(game) || DepthLimitReached()) {
 return EvalGameState(game,MIN);
 } else {
 best_move = {};
 moves = GenerateMoves(game);
 ForEach moves {
 move = MaxMove(ApplyMove(game) , alpha, beta );
 if(Value(move) > Value(best_move)) {
 best_move = move;
 beta = Value(move);
 }

 //Ignore remaining moves
 if(beta < alpha)
 return best_move;

 }
 return best_move;
 }
 }
SOFTWARE
SOFTWARE

El turno del jugador

Son todos los


movimientos que
se hicieron
en el juego
(todas las jugadas)

Son todas las


piezas comidas
en el partido
GRACIAS POR SU ATENCION !!!

También podría gustarte