2013-10-27 50 views
0

因此,我正在編寫一個C程序,該程序將針對用戶播放TicTacTo。但是,我遇到了檢查是否有贏家的功能問題。它似乎根本不起作用。當連續有3個時,遊戲纔會繼續。這是相關的代碼。工作TicTacTo CheckWin功能?

這是在我的主要功能:

do { 
    humanChoice(); // let the user make a play 
    computerChoice(); // does nothing at the moment 
    gameStatus = checkWin(); // returns 1 if it finds a winner 
} while(gameStatus==0); 

的humanChoice在用戶選擇的位置起在陣列中的「X」。這已經過徹底測試,並且完美運行。然後checkWin()函數:

int checkWin() { 

if (
    matrix[0][0] == matrix[0][1] == matrix[0][2] || // 1st row 
    matrix[1][0] == matrix[1][1] == matrix[1][2] || // 2nd row 
    matrix[2][0] == matrix[2][1] == matrix[2][2] || // 3rd row 

    matrix[0][0] == matrix[1][0] == matrix[2][0] || // 1st column 
    matrix[0][1] == matrix[1][1] == matrix[2][1] || // 2nd column 
    matrix[0][2] == matrix[1][2] == matrix[2][2] || // 3rd column 

    matrix[0][0] == matrix[1][1] == matrix[2][2] || // left to right diagonal 
    matrix[0][2] == matrix[1][1] == matrix[2][0] // right to left diagonal 
) { 
    printf("Win! Game Over!"); 
    return(1); 
} 

return(0); 
} 

我使用下面的2維陣列,用於我的「矩陣」:

char matrix[3][3]; 

我意識到,現在的程序不能在區分電腦贏了,用戶贏了。現在這是無關緊要的。我只需要它來檢查一般的勝利。

您注意到了什麼?

+0

如果您的問題已被回答,您應該接受其中一個答案。 – nhgrif

回答

3

如果左手和右手操作數相等,==操作符返回true

a == b當它們相等時將返回trueb == c當它們相等時將返回true

a == b == c但是,當a == b的計算結果與c的值相同時,將返回true。

您將希望使用(a == b) && (b == c)來實現您想要實現的目標。

+0

有趣!我和C一起工作了大約一年,從未遇到過這種情況。你一直都在學習新的東西。 :D謝謝! – codedude

1

類似a == b == c的表達式與a == b && b == c不一樣。這就是爲什麼你的功能無法按預期工作。

+0

它有什麼不同?原諒我缺乏專業知識...... – codedude

+0

'a == b'是一個布爾表達式,如果a = b則爲'1',否則爲'0'。當你寫'a == b == c'時,你比較第一個比較結果(0或1)和'c'。 – Inspired

1
if (matrix[0][0] == matrix[0][1] == matrix[0][2]) ... 

不同於:

if (matrix[0][0] == matrix[0][1] && matrix[0][1] == matrix[0][2]) ... 

在第一種情況中,第一比較是在第一評價,使得它等同於類似:

int b = matrix[0][0] == matrix[0][1]; 
if (b == matrix[0][2]) ... 

比較返回01,而不是正在比較的值(與賦值運算符不同,它返回已經分配的值)。

+0

區別是什麼? – codedude

+0

@codedude:看我的編輯。 – LihO