Выберите максимальный путь захвата для турецких шашек в JS - PullRequest
0 голосов
/ 16 сентября 2018

Я изменил код 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;
}
...