Я изменил код chess.js (https://github.com/jhlywa/chess.js) для преобразования в турецкие шашки.
Если в следующем квадрате есть противник, либо вперед налево, но рядом с противником должно быть пусто.
Если да, то он должен захватить. Я написал функцию, которая возвращает допустимые ходы, что означает, что кусок не может быть перемещен в другую позицию
Вот мой код для захвата.
function MaximumCaptures(moves) {
var legalMoves = [];
var index = 0;
for (var i = 0; i < moves.length; i++) {
if (moves[i].flags & BITS.CAPTURE) {
legalMoves.push(moves[i]);
index++;
}
}
if (index > 0) {
return legalMoves;
}
return moves;
}
Но мне также нужно написать код, который может добавлять только ходы наибольшего пути к массиву допустимых ходов.
Я также написал код для этого, но он не 'т работы.
function MaximumCaptures(moves) {
var legalMoves = [];
var index = 0;
for (var i = 0; i < moves.length; i++) {
if (moves[i].flags & BITS.CAPTURE) {
legalMoves.push(moves[i]);
index++;
}
}
if (index > 0) {
var length = legalMoves.length;
for (var i = 0; i < length; i++) {
var move = legalMoves[i];
for (var j = 3; j < 6; j++) {
var oppOffset = PAWN_OFFSETS[move.color][j - 3];
var opponentSq = move.to + oppOffset;
var jumpOffset = PAWN_OFFSETS[move.color][j];
var jumpSq = move.to + jumpOffset;
while (true) {
if (board[opponentSq] != null && board[jumpSq] == null) {
if (board[opponentSq].color !== move.color) {
var m = clone(move);
m.from = opponentSq - oppOffset;
m.to = opponentSq + oppOffset;
m.captureLoc = opponentSq;
m.captured = board[opponentSq].type;
if (move.to & 0x88) break;
legalMoves.push(m);
}
}
else if (board[jumpSq] != null) {
break;
}
opponentSq += oppOffset;
jumpSq += jumpOffset;
if (opponentSq & 0x88 || jumpSq & 0x88) break;
}
}
}
return legalMoves;
}
return moves;
}