0

本质上,我正在尝试创建游戏黑白棋。如果你不知道它是什么,为了缩短它,我有一个 8x8 的方格板。有 2 个坐标,我需要确定这两个坐标之间的所有正方形并填充它们。这两个坐标要么在同一个 y 上,要么在同一个 x 上,要么在彼此对角线上。

有人可以解释我将如何做这样的事情背后的逻辑吗?如何确定 2 个坐标之间所有元素的坐标。

4

1 回答 1

0

您需要一个简单的 for 循环,从一个坐标开始,然后向另一个坐标移动。

let connect = (c1, c2) => {
  // Determine the distance between c1 & c2
  let delta = c1.map((v, i) => c2[i] - v);
  let distance = Math.max(...delta.map(v => Math.abs(v)));
  
  // Determine the unit vector (e.g. [1, -1]) to move each iteration
  let direction = delta.map(v => v / distance);
  
  // Starting at `c1`, iterate for `distance` iterations, moving in `direction` each iteration.
  return [...Array(distance + 1)].map((_, i) => c1.map((v, j) => v + direction[j] * i));
  
  // Same as above, but exclude `c1` and `c2` from the return array.
  // return [...Array(distance - 1)].map((_, i) => c1.map((v, j) => v + direction[j] * (i + 1)));
};

let c1 = [3, 6];
let c2 = [8, 1];
console.log(connect(c1, c2));

于 2021-04-30T15:27:52.953 回答