2014-02-13 99 views
0

相關的其它信息: 項目=井字(控制檯應用程序)C#邏輯衝突

我的問題是這樣的: 我最初充滿0的這必須保持爲0的,除非數組用戶採取的舉動(然後它會成爲1)或計算機使得一動然後就變成了2。 示例代碼:

else if (posStatus[2] != 0 && posStatus[5] != 0 && posStatus[8] != 0 && (posStatus[2] + posStatus[5] + posStatus[8] % 2 == 0)) 
{ 
    if (posStatus[2] == 0) 
    { 
     posStatus[2] = 2; 
     return; 
    } 
    else if (posStatus[5] == 0) 
    { 
     posStatus[5] = 2; 
     return; 
    } 
    else if (posStatus[8] == 0) 
    { 
     posStatus[8] = 2; 
     return; 
    } 

問題: 有一個網格9長其中三個行,3列和兩個對角線。最初,所有值都設置爲0,這用於確定空間是否空閒,以便更改爲其他類型會導致問題。如果值1被玩家1在那裏玩過。如果數值2被保持,則計算機在那裏玩過。

所以原本我已經把在

posStatus[0] + posStatus[1] + posStatus[2] % 2 == 0) 

這決定,其中計算機將在這種情況下發揮它的將是第一行,如果敵方玩家已經把2個值有其邏輯上應該很好地工作和它除了我的問題,如下所示:

當連續播放任何內容時,值爲:0,0,0如果您做0 + 0 + 0%2,您會發現等於0,這是參數針對上述情況。這意味着它會嘗試確保每行/列/對角線有一個值,這當然是不好的,因爲這意味着玩家可以贏得3回合。

所以爲了解決這個問題,我添加了(I 「M意識到我可以重構它)我說:

posStatus[0] != 0 && posStatus[1] != 0 && posStatus[2] != 0 

這意味着如果一個行/列/對角線爲空不玩有這意味着它在空行/列/對角線這是一個問題,從來不玩。

對此提出建議?

回答

0

你必須檢查每次的幾個條件,不需要考慮順序。對於任何球員贏的可能的情況將是: 0,1,2

0,3,6

0,4,8

1,4,7

2,4 ,6

2,5,8

3,4,5-

AND 6,7,8

我假設編號是排明智和從0

現在,你必須根據用戶的輸入來告訴計算機開始。

例如:

用戶選擇2,讓你擁有posStatus[2] = 1現在你必須檢查的唯一單元0,1,4,5和6,因爲這些都是取勝的唯一可能的細胞。

要處理的遊戲局面的開始,你有兩個選擇:

  1. 讓用戶隨時啓動。
  2. 從0,2,6和8開始任何人,因爲這些是最大解決方案的一部分。

另一種方法:

有成功的3種可能性:

A.行明智:1添加或替代號碼,檢查狀態,

B.逐列:添加或替換數字3並檢查狀態,

C.對角線:添加或替換數字2和4然後檢查狀態

例如,如果用戶選擇了i單元格。你的檢查應該是:

A.見(i-2),(i-1),(i+1) AND (i+2)的狀態 - 顯然,這應該是在0-8

B.範圍見(i-6),(i-3),(i+3) AND (i+6)

C的狀態見(i-8),(i-4),(i-2),(i+2),(i+4) AND (i+8)

狀態
+0

你是對的,編號從0開始。如果需要的話,我可以把它變成二維數組。抱歉,我沒有按照你的建議。我已經完成了所有工作。我的問題是計算機如何計算在哪裏玩。我發現min max讓我感到困惑,所以我決定以數學方式。用戶總是啓動並且當前計算機動作總是基於用戶,除非沒有好的移動是可能的,那麼它將執行隨機可能的移動。 – Zain

+0

我已經添加了另一種方法,看看這可以幫助你 –

+0

現在閱讀,友好的碰撞,而我試圖弄清楚,因爲你唯一提供幫助。 – Zain