四向等价

时间:2016-11-18 16:54:28

标签: c++ operators equality

如何检查四个变量之间的相等性?这是一个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; }

所有变量都是整数,正如我所知道的bools我可以使用&&amp ;.有没有更好的办法?我考虑过:

if ((b[0][0] + b[1][0] + b[2][0]) == (3 * p)) { line += 1; }

由于p将是三个值之一(对于X或O都不为0,对于X为1,对于O为2),因此只需要将O的值更改为4或三个值无法实现的值1s,0s或其组合。但它缺乏技巧。

2 个答案:

答案 0 :(得分:3)

由于问题中4个变量中的3个属于一个对象,因此您可以创建一个方法来包装它。像bool isValid(int *A, int val) {...}之类的东西,然后在你的语句if (isValid(b, p)) {...}中使用它。这个名字是任意的,因为没有给出更广泛的背景。

答案 1 :(得分:2)

既然你已经提到过tic-tac-toe,事情会有所改变。最终,您将检查每列的相同值,每行检查相同的值。这不需要很长的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;
}

并为列编写类似的函数。对角线甚至更简单。