В двумерном массиве как проверить, имеют ли два элемента общую вертикальную / диагональную линию? - PullRequest
0 голосов
/ 12 мая 2018
 [[ 0, 0, 0, 0, 0, 0, 0, 0 ],
  [ 0, 0, 0, 0, 0, 0, 0, 0 ],
  [ 0, 0, 0, 0, 0, %, 0, 0 ],
  [ 0, 0, 0, 0, 0, 0, 0, 0 ],
  [ 0, 0, 0, 0, 0, 0, 0, 0 ],
  [ %, 0, 0, 0, 0, 0, 0, 0 ],
  [ 0, 0, 0, 0, 0, 0, 0, 0 ],
  [ 0, 0, 0, 0, 0, 0, 0, 0 ]]

У меня есть доска 8x8, и я хочу проверить, находятся ли знаки% на одной вертикальной линии. Я знаю, как проверить, находятся ли они на одной горизонтальной линии (в том же массиве), но я не могу понять, как проверить диагонали и вертикали.

Вот мой полный код:

var whiteQueen = [2, 5];
var blackQueen = [5, 0];
var danger = false;

var board =
[
  [0, 1, 2, 3, 4, 5, 6, 7],
  [1, 1, 2, 3, 4, 5, 6, 7],
  [2, 1, 2, 3, 4, 5, 6, 7],
  [3, 1, 2, 3, 4, 5, 6, 7],
  [4, 1, 2, 3, 4, 5, 6, 7],
  [5, 1, 2, 3, 4, 5, 6, 7],
  [6, 1, 2, 3, 4, 5, 6, 7],
  [7, 1, 2, 3, 4, 5, 6, 7]
];


for (i = 0; i < 8; i++) { //plot white queen
  if (whiteQueen[0] === i) {
    for (j = 0; j < 8; j ++) {
      if (whiteQueen[1] === j) {
        board[i][j] = 'x';
      }
    } 
  }
}

for (i = 0; i < 8; i++) { //plot black queen
  if (blackQueen[0] === i) {
    for (j = 0; j < 8; j ++) {
      if (blackQueen[1] === j) {
        board[i][j] = 'x';
      }
    }
  } 
}

for (i = 0; i < 8; i++) { //reset board number guide
  for (j = 0; j < 8; j++) {
    if (typeof board[i][j] == 'number') {
     board[i][j] = 0;
    }
  }
} 

for (i = 0; i < 8; i++) { //re-plot queens
  for (j = 0; j < 8; j++) {
    if (board[i][j] === 'x') {
      board[i][j] = 1;
    }
  }
}

for (i = 0; i < 8; i++) {
  var sameLineCount = 0;
  for (x = 0; x < 8; x++) {
    if (board[i][x] == 'x') { 
      if () // no idea how to register a matching line/diagonal
      sameLineCount += 1;
    } 
  }
}

/*[ [ 0, 0, 0, 0, 0, 0, 0, 0 ],
    [ 0, 0, 0, 0, 0, 0, 0, 0 ],
    [ 0, 0, 0, 0, 0, 1, 0, 0 ],
    [ 0, 0, 0, 0, 0, 0, 0, 0 ],
    [ 0, 0, 0, 0, 0, 0, 0, 0 ],
    [ 1, 0, 0, 0, 0, 0, 0, 0 ],
    [ 0, 0, 0, 0, 0, 0, 0, 0 ],
    [ 0, 0, 0, 0, 0, 0, 0, 0 ] ]*/

Так что, в основном, это шахматная доска, и я беру массив координат и проверяю, находится ли какая-либо из королев в опасности. Я путаюсь со всеми циклами for, и я не совсем уверен, правильно ли я поступаю по этому поводу.

1 Ответ

0 голосов
/ 12 мая 2018

Вы можете получить положения двух знаков, которые вы ищете, и проверить:

если (x1 == x2), то они находятся на одной горизонтальной линии

если (y1 == y2), то они находятся на одной и той же вертикальной линии

, если (| x1 - x2 | == | y1 - y2 |), то они на одной диагонали

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...