2016-11-18 50 views
0

如何檢查四個變量之間的相等性?這是一個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; } 

所有變量都是整數,因爲我知道跟我的bool可以只使用& &。有沒有更好的辦法?我考慮:

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或其組合來實現。但它缺乏技巧。

+0

我只是學生,所以我不確定我的推薦是否是好的。但是你有沒有想過一個'switch()'語句?你可以嵌套案例來彌補ifs。 – Callat

+1

你爲什麼不想要它? –

+0

@KazRodgers我可以,但是有幾十行具有相似的結構(它是3D Tic-Tac-Toe)。 – gator

回答

2

既然你已經提到井字遊戲,事情會改變一點。最終你會檢查每一列的相同的​​值和每行的相同的值。這並不需要長時間的梯子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; 
} 

併爲列寫入類似的函數。對角線更簡單。

+0

嗯,它是3D Tic-Tac-Toe,使用8列而不是9(所以38條件檢查)。我已經完成了懶惰的事情,並且爲每條可能的行寫了條件。 – gator

3

由於問題中的4個變量中有3個屬於一個對象,因此可以創建一個方法來包裝它。像bool isValid(int *A, int val) {...}之類的東西,然後在if (isValid(b, p)) {...}之類的語句中使用它。這個名字是任意的,因爲沒有給出更廣泛的上下文。