リバーシゲームで有効な動きを確認する機能があります。空いているマスを見て、隣接する8方向のマスが反対側の駒かどうかを確認します。(私が黒なら白を探す) 隣接する駒を見つけたら、その方向に目を向け続け、自分の駒が最後にあるかどうかを確認し、true を返します。スペースまたはボード境界から外れている場合、false を返します。
間違った動きを出力したため、機能が正しく動作していないようです。
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 は、指定された場所で検索を続けるために各方向に 1 回追加する増分です。PositioninBounds は、検索がボードの境界内にあることを確認するために必要な関数です。deltarow と deltacol を同時に両方とも 0 にすることはできないので、どういうわけかそのステップをスキップする必要があります (おそらく間違っていました)。Oppositecolor は、自分の作品の反対の色を返す関数です。