JSFiddle - React, Tailwind, and code Playground
JavaScript
var casillas = {
columnas : ['A','B','C','D','E','F','G','H'],
filas : [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ]
}
function ajedrez(reinas,rey){
var movimientosReinas = [],
movimientosRey = [],
enJaque = false,
movimientosLibres = [],
posicionRey = casillas.columnas[ rey[0] ] + casillas.filas[ rey[1] ];
reinas.forEach(function(reina){
obtenerMovimientos(reina, 8, movimientosReinas);
});
obtenerMovimientos(rey, 1, movimientosRey);
movimientosReinas = movimientosReinas.filter(function(elem, pos, self) {
return self.indexOf(elem) == pos;
});
movimientosRey = movimientosRey.filter(function(elem, pos, self) {
return self.indexOf(elem) == pos;
});
//opcional simplemente para observar el comportamiento de los movimientos (para consultar las posiciones en un tablero)
movimientosReinas.sort();
movimientosRey.sort();
//console.log(movimientosReinas);
//console.log(movimientosRey);
if( movimientosReinas.indexOf(posicionRey) != -1 ){
enJaque = true;
}
movimientosRey.forEach(function(mov){
if( movimientosReinas.indexOf(mov) == -1 ){
movimientosLibres.push(mov);
}
});
if( !enJaque && movimientosLibres.length == 0 ){
return "Ahogado";
} else if( enJaque && movimientosLibres.length == 0 ){
return "Jaque mate";
} else if( enJaque && movimientosLibres.length > 0 ){
return movimientosLibres;
} else {
return "Libre";
}
}
function obtenerMovimientos(pieza, limit, movimientos){
var columnaInicial = casillas.columnas[ pieza[0] ],
filaInicial = casillas.filas[ pieza[1] ],
posicionInicial = columnaInicial + filaInicial;
//console.log(posicionInicial);
for( i=1; i <= limit; i++ ) {
//Movimientos en la columna
if( pieza[1] - i >= 0 ){
movimientos.push( columnaInicial + casillas.filas[ pieza[1] - i ] );
}
if( pieza[1] + i < 8 ){
movimientos.push( columnaInicial + casillas.filas[ pieza[1] + i ] );
}
//Movimientos en la fila
if( pieza[0] - i >= 0 ){
movimientos.push( casillas.columnas[...