【发布时间】:2021-10-16 01:47:49
【问题描述】:
我目前正在开发一个国际象棋游戏,但在我的 Bishop 课程中遇到了代码冗余问题。我正在尝试创建一个函数,该函数将获得主教的所有可能动作。为此,我将创建一个 for 循环来评估主教的所有对角线,并在它碰到棋盘或棋子的末端时打破循环。这段代码的问题是它是多余的,因为要评估 Bishop 可以走的所有对角线,我必须有 4 个 for 循环。代码的简化版本如下所示
var list = [1,0,0,0,1,0,0,1]; // 1d list
var index = 5; // position of "bishop"
for (let i = index, j = list.length; i < j; i++) {
if (list[i] === 1) { // if true, return instance of 1 and break loop
console.log("first instance of 1 going right, found at " + i);
break;
}
}
for (let i = index; i >= 0; i--) {
if (list[i] === 1) { // if true, return instance of 1 and break loop
console.log("first instance of 1 going left, found at " + i);
break;
}
}
虽然此代码有效,但在处理可以向 4 个方向移动的主教时,这是相当重复的,并且可能会导致将来出现问题。有没有一种方法可以在不降低效率的情况下将 4 个 for 循环(或上例中的 2 个)减少到 1 个?因为答案需要正确的概念,所以没有太多可以展示我在这个问题上的尝试。
【问题讨论】:
-
因为两个循环有不同的退出条件,将它合并到一个循环中可能会很尴尬。我认为你已经拥有的其实很好
-
@AresStavropoulos,有关棋盘内部表示的另一种替代方案,请参阅stackoverflow.com/questions/68976802/…。
标签: javascript dry