四向等价
Four-way equivalence
如何检查四个变量之间的相等性?这是一个 3D 井字游戏。
if (b[0][0] == b[1][0] == b[2][0] == p) { line += 1; }
这不起作用,因为等效是从左到右的。我不想执行以下任一操作:
if (b[0][0] == p && b[1][0] == p && b[2][0] == p) { line += 1; }
if ((b[0][0] == b[1][0]) && (b[1][0] == b[2][0]) && (b[2][0] == p)) { line += 1; }
所有变量都是整数,正如我所知道的布尔值,我可以只使用 &&。有没有更好的办法?我考虑过:
if ((b[0][0] + b[1][0] + b[2][0]) == (3 * p)) { line += 1; }
由于 p
将是三个值之一(0 既不代表 X 也不代表 O,1 代表 X,2 代表 O),它只需要将 O 的值更改为 4 或无法实现的值三个 1、0 或它们的组合。但缺乏技巧。
由于问题中的 4 个变量中有 3 个属于一个对象,因此您可以创建一个方法将其全部包装起来。像 bool isValid(int *A, int val) {...}
这样的东西,然后在你的语句中使用它,比如 if (isValid(b, p)) {...}
。名称是任意的,因为没有给出更广泛的上下文。
既然您提到了井字游戏,情况就有些变化了。最终,您将检查每一列的相同值和每一行的相同值。这不需要很长的 if ... else if...
梯子。相反,编写一个函数来检查一行:
bool row_matches(board b, int row, int value) {
for (int col = 0; col < 3; ++col)
if (b[row][col] != value)
return false;
return true;
}
并为列编写类似的函数。对角线更简单。
如何检查四个变量之间的相等性?这是一个 3D 井字游戏。
if (b[0][0] == b[1][0] == b[2][0] == p) { line += 1; }
这不起作用,因为等效是从左到右的。我不想执行以下任一操作:
if (b[0][0] == p && b[1][0] == p && b[2][0] == p) { line += 1; }
if ((b[0][0] == b[1][0]) && (b[1][0] == b[2][0]) && (b[2][0] == p)) { line += 1; }
所有变量都是整数,正如我所知道的布尔值,我可以只使用 &&。有没有更好的办法?我考虑过:
if ((b[0][0] + b[1][0] + b[2][0]) == (3 * p)) { line += 1; }
由于 p
将是三个值之一(0 既不代表 X 也不代表 O,1 代表 X,2 代表 O),它只需要将 O 的值更改为 4 或无法实现的值三个 1、0 或它们的组合。但缺乏技巧。
由于问题中的 4 个变量中有 3 个属于一个对象,因此您可以创建一个方法将其全部包装起来。像 bool isValid(int *A, int val) {...}
这样的东西,然后在你的语句中使用它,比如 if (isValid(b, p)) {...}
。名称是任意的,因为没有给出更广泛的上下文。
既然您提到了井字游戏,情况就有些变化了。最终,您将检查每一列的相同值和每一行的相同值。这不需要很长的 if ... else if...
梯子。相反,编写一个函数来检查一行:
bool row_matches(board b, int row, int value) {
for (int col = 0; col < 3; ++col)
if (b[row][col] != value)
return false;
return true;
}
并为列编写类似的函数。对角线更简单。