JSFiddle - React, Tailwind, and code Playground

by marlanga

JavaScript

function addReina(tablero,reina){
    var xd1=reina[1]-reina[0], yd1=0, xd2=reina[1]+reina[0], yd2=0;
    tablero[reina[0]][reina[1]]+=3;
    for (var i=0;i<8;i++)
    {
        if (i!=reina[0]) tablero[i][reina[1]]++; //Horizontal
        if (i!=reina[1]) tablero[reina[0]][i]++; //Vertical
        if (xd1+i<8 && yd1+i<8 && yd1+i!=reina[0] && xd1+i!=reina[1]) tablero[yd1+i][xd1+i]++; //Diagonal 1
        if (xd2-i>=0 && xd2-i<8 && yd2+i<8 && yd2+i!=reina[0] && xd2+i!=reina[1]) tablero[yd2+i][xd2-i]++; //Diagonal 2
    }
}
function compruebaRey(tablero,rey){
    var libres=0;
    tablero[rey[0]][rey[1]]++;
    for (var x=Math.max(0,rey[1]-1);x<=Math.min(7,rey[1]+1);x++)
    {
        for (var y=Math.max(0,rey[0]-1);y<=Math.min(7,rey[0]+1);y++)
        {
            if (x==rey[1] && y==rey[0]) continue;
            if (!tablero[y][x] || tablero[y][x]==3) libres++;
        }
    }
    if (libres==0)
    {
        if (tablero[rey[0]][rey[1]]==1) return "ahogado";
        return "jaque mate";
    }
    if (tablero[rey[0]][rey[1]]==1) return "libre";
    return libres;
}

function ajedrez(reinas,rey) {
  var tablero=[];
  for (var i=0;i<8;i++) tablero.push([0,0,0,0,0,0,0,0]);
  addReina(tablero,reinas[0]);
  addReina(tablero,reinas[1]);
  dibuja(tablero);
  return compruebaRey(tablero,rey);
}

function dibuja(tablero){
    for (var i=0;i<8;i++) console.log(tablero[i].join(" "));
}

var reinas =[[0,0],[3,2]], rey=[2,1];
console.log(ajedrez(reinas,rey));