1
0
forked from sent/waves
waves/public/assets/g/chess/other-implementations/example3/js/io.js
2025-04-09 17:11:14 -05:00

134 lines
1.9 KiB
JavaScript

function PrSq(sq) {
return (FileChar[FilesBrd[sq]] + RankChar[RanksBrd[sq]]);
}
function PrMove(move) {
var MvStr;
var ff = FilesBrd[FROMSQ(move)];
var rf = RanksBrd[FROMSQ(move)];
var ft = FilesBrd[TOSQ(move)];
var rt = RanksBrd[TOSQ(move)];
MvStr = FileChar[ff] + RankChar[rf] + FileChar[ft] + RankChar[rt];
var promoted = PROMOTED(move);
if(promoted != PIECES.EMPTY) {
var pchar = 'q';
if(PieceKnight[promoted] == BOOL.TRUE) {
pchar = 'n';
} else if(PieceRookQueen[promoted] == BOOL.TRUE && PieceBishopQueen[promoted] == BOOL.FALSE) {
pchar = 'r';
} else if(PieceRookQueen[promoted] == BOOL.FALSE && PieceBishopQueen[promoted] == BOOL.TRUE) {
pchar = 'b';
}
MvStr += pchar;
}
return MvStr;
}
function PrintMoveList() {
var index;
var move;
var num = 1;
console.log('MoveList:');
for(index = GameBoard.moveListStart[GameBoard.ply]; index < GameBoard.moveListStart[GameBoard.ply+1]; ++index) {
move = GameBoard.moveList[index];
console.log('IMove:' + num + ':(' + index + '):' + PrMove(move) + ' Score:' + GameBoard.moveScores[index]);
num++;
}
console.log('End MoveList');
}
function ParseMove(from, to) {
GenerateMoves();
var Move = NOMOVE;
var PromPce = PIECES.EMPTY;
var found = BOOL.FALSE;
for(index = GameBoard.moveListStart[GameBoard.ply];
index < GameBoard.moveListStart[GameBoard.ply + 1]; ++index) {
Move = GameBoard.moveList[index];
if(FROMSQ(Move) == from && TOSQ(Move) == to) {
PromPce = PROMOTED(Move);
if(PromPce != PIECES.EMPTY) {
if( (PromPce == PIECES.wQ && GameBoard.side == COLOURS.WHITE) ||
(PromPce == PIECES.bQ && GameBoard.side == COLOURS.BLACK) ) {
found = BOOL.TRUE;
break;
}
continue;
}
found = BOOL.TRUE;
break;
}
}
if(found != BOOL.FALSE) {
if(MakeMove(Move) == BOOL.FALSE) {
return NOMOVE;
}
TakeMove();
return Move;
}
return NOMOVE;
}