Есть ли способ l oop через эти числа: -1 0, 1 0, 0 -1, 0 1 - PullRequest
2 голосов
/ 21 февраля 2020

Я сейчас пишу шахматную программу и пытаюсь пройти все ходы ладьи. Для этого мне нужно получить такой набор чисел: 1 0 (справа), -1 0 (слева), 0 1 (вверх), 0 -1 (вниз). Я придумал следующую строчку кода:

if (this.piece == "rook" || this.piece == "queen") {
        for (var dir = -3; dir <= 3; dir += 2) {
            let checkChar = pposChar, checkNum = pposNum, m1, m2;
            for (var i = 0; i < this.step; i++) {
                if (dir == 1 || dir == -1) {
                    m1 = 0, m2 = dir;
                } else {
                    m1 = dir/Math.abs(dir), m2 = 0;
                }
                if (isLegal(checkChar, checkNum, m1, m2)) {
                    this.moves.push(isLegal(checkChar, checkNum, m1, m2));
                    checkChar += m1;
                    checkNum += m2;
                } else 
                    break;
            }
        }
 }

Работает просто отлично, но выглядит уродливо и сложно для чтения. Есть ли способ сделать это чище или лучше?

1 Ответ

3 голосов
/ 21 февраля 2020

Просто возьмите массив смещений и добавьте эти значения в индексы.

var adjacent = [[1, 0], [-1, 0], [0, 1], [0 -1]];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...