Code viewer for World: Chess
AB.runReady       = false;


let s = document.createElement("script");
s.src = "https://cdnjs.cloudflare.com/ajax/libs/chess.js/0.10.2/chess.js";                           // local or remote URL
s.onload = function() { 
    console.log("chess loaded");
    
    AB.runReady = true;
};        // function to be called when JS is loaded
document.head.appendChild(s);  

function World() 
{ 
	this.newRun = function()
	{
	    threeworld.init (  "white"  ); 
	};
}








let chess;
let scl = 40;
let xoff = 250;
let yoff = 300;
let speed = 1;

let bk, bq, bn, br, bb, bp, wk, wq, wn, wr, wb, wp;



function preload()
{
    bk = loadImage("/uploads/mathias/bk.png");
    bq = loadImage("/uploads/mathias/bq.png");
    bn = loadImage("/uploads/mathias/bn.png");
    br = loadImage("/uploads/mathias/br.png");
    bb = loadImage("/uploads/mathias/bb.png");
    bp = loadImage("/uploads/mathias/bp.png");
    wk = loadImage("/uploads/mathias/wk.png");
    wq = loadImage("/uploads/mathias/wq.png");
    wr = loadImage("/uploads/mathias/wr.png");
    wn = loadImage("/uploads/mathias/wn.png");
    wb = loadImage("/uploads/mathias/wb.png");
    wp = loadImage("/uploads/mathias/wp.png");
}

function aftersetup()       
{
	chess = new Chess();
	frameRate(speed);
	drawGrid();
	drawBoard(chess.fen());
}

function drawBoard(board)
{
    let square = 0;
    
    for(let cur of board)
    {
        switch(cur)
        {
            case "r":
                image(br, xoff + scl*(square%8), yoff + scl*(floor(square/8)));
                square++;
                break;
            case "n":
                image(bn, xoff + scl*(square%8), yoff + scl*(floor(square/8)));
                square++;
                break;
            case "b":
                image(bb, xoff + scl*(square%8), yoff + scl*(floor(square/8)));
                square++;
                break;
            case "q":
                image(bq, xoff + scl*(square%8), yoff + scl*(floor(square/8)));
                square++;
                break;
            case "k":
                image(bk, xoff + scl*(square%8), yoff + scl*(floor(square/8)));
                square++;
                break;
            case "p":
                image(bp, xoff + scl*(square%8), yoff + scl*(floor(square/8)));
                square++;
                break;
            case "R":
                image(wr, xoff + scl*(square%8), yoff + scl*(floor(square/8)));
                square++;
                break;
            case "N":
                image(wn, xoff + scl*(square%8), yoff + scl*(floor(square/8)));
                square++;
                break;
            case "B":
                image(wb, xoff + scl*(square%8), yoff + scl*(floor(square/8)));
                square++;
                break;
            case "Q":
                image(wq, xoff + scl*(square%8), yoff + scl*(floor(square/8)));
                square++;
                break;
            case "K":
                image(wk, xoff + scl*(square%8), yoff + scl*(floor(square/8)));
                square++;
                break;
            case "P":
                image(wp, xoff + scl*(square%8), yoff + scl*(floor(square/8)));
                // text(cur, xoff + scl*(square%8), yoff + scl*(floor(square/8)));
                square++;
                break;
                
            
            case "/":
                break;
                
                
            case " ":
                return;
                
            
            case "1":
            case "2":
            case "3":
            case "4":
            case "5":
            case "6":
            case "7":
            case "8":
                square += +cur;
                break;
                
            
            default:
                console.log("Error in drawBoard");
        }
    }
}

function drawGrid()
{
    for (let i = 0; i<9; i++) //horizontal limes
    {
        line(xoff, yoff + i*scl,xoff + 8*scl, yoff + i*scl);
    }
    
    for (let i = 0; i<9; i++) //vertical lnes
    {
        line(xoff + i*scl, yoff, xoff + i*scl, yoff + 8*scl);
    }
}

function draw()            
{
     if (!chess.game_over())
        {
            background(255);
           
           
            let moves = chess.moves();
            let move = moves[Math.floor(Math.random() * moves.length)];
            chess.move(move);
            

            drawGrid();
            drawBoard(chess.fen());
            console.log(chess.ascii());
        }
        else 
        {
            console.log("Game Over");
        }
}