gpt4 book ai didi

检查黑白棋所有 8 个方向的有效移动

转载 作者:行者123 更新时间:2023-11-30 17:08:53 25 4
gpt4 key购买 nike

我有一个函数可以检查我的黑白棋游戏中的有效 Action 。我查看未占据的空间,并检查任意 8 个方向上的相邻空间是否是相反的棋子。 (如果我是黑人,我会寻找白色)现在,如果我找到一个相邻的棋子,我应该继续朝那个方向看,看看我自己的棋子是否在最后,然后我返回 true,否则如果它是一个未被占用的棋子空间或板外边界,我返回 false。

我的功能似乎无法正常工作,因为我打印出了错误的 Action 。

bool checkLegalInDirection(char boardgame[26][26], int size, int row, int col, char color) {

int currentRow, currentCol;
for (int deltaRow = -1; deltaRow < 2; deltaRow++) {
for (int deltaCol = -1; deltaCol < 2; deltaCol++) {
if (deltaRow == 0 && deltaCol == 0) {
break;
} else {
row = row + deltaRow;
col = col + deltaCol;
if (positionInBounds(size, row, col)) {
while (boardgame[row][col] == OppositeColor(color)) {
currentRow = row + deltaRow;
currentCol = col + deltaCol;

if (positionInBounds(size, currentRow, currentCol)) {
if (boardgame[currentRow][currentCol] == color) {
return true;
} else {
return false;
}
}
}
}
}
}
}
}

deltaRow 和 deltaCol 是在每个方向上的增量,并添加一次以继续在指定位置搜索。 PositioninBounds 是一个我必须确保我的搜索位于棋盘边界内的函数。我的 deltarow 和 deltacol 不能同时为 0,因此我需要跳过该步骤(我可能做错了)。 Oppositecolor 是一个函数,它返回我自己的作品的相反颜色。

最佳答案

我认为您的代码有多个错误。

当您应该继续下一次迭代时,您的代码错误地中断了 for 循环(如 chux 所提到的)。

改变...

if (deltaRow == 0 && deltaCol == 0) {
break;
} else {
...
}

根据 chux 的建议...

if (deltaRow == 0 && deltaCol == 0) {
continue;
} else {
...
}

或者更简单的解决方案......

if (deltaRow != 0 || deltaCol != 0) {
...
}

在 deltaRow/deltaCol 循环内,您的代码错误地修改了您的代码在以后的循环迭代中需要的原始行/列值。

你可以改变...

row = row + deltaRow;
col = col + deltaRow;

到...

currentRow = row + deltaRow;
currentCol = col + deltaRow;

在 while 循环内,您的代码错误地返回 false。在完成所有 for 循环之前,您不能返回 false。

在进入while循环之前,需要检查相邻空间是否在边界内且颜色相反...

if (positionInBounds(size, currentRow, currentCol) && boardgame[currentRow][currentCol] == OppositeColor(color)) {

如果是这样,则跳过所有相邻的相反颜色...

while (positionInBounds(size, currentROw, currentColor) && boadgame[currentRow][currentCol] == OppositeColor(color)) {
{
currentRow = currentRow + deltaRow;
currentCol = currentCol + deltaCol;
}

跳过相反的颜色后,您需要检查相同的颜色。如果是,则返回 true。

    if (positionInBOunds(size, currentRow, currentCol) && boardgame[currentRow][currentCol] == color) {
return true;
}

您的代码应该仅在检查所有方向后返回 false...

for (int deltaRow = -1; deltaRow < 2; deltaRow++) {
for (int deltaCol = -1; deltaCol < 2; deltaCol++) {
....
}
}
return false;

关于检查黑白棋所有 8 个方向的有效移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33489949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com