2015-07-03 65 views
1
public void WinnerCheck() 
{ 
    if (m_allButtons[0][0].getText() == m_allButtons[0][1].getText() && m_allButtons[0][1].getText() == m_allButtons[0][2].getText()) 
    { 
     DisableAllButtons(); 
    } 
    else if (m_allButtons[1][0].getText() == m_allButtons[1][1].getText() && m_allButtons[1][1].getText() == m_allButtons[1][2].getText()) 
    { 
     DisableAllButtons(); 
    } 

} 

private void AddAllEventHandlers() 
{ 
    if (m_allButtons != null) 
    { 
     for (int i = 0; i < 3; i++) 
     { 
      for (int j = 0; j < 3; j++) 
      { 
       JButton currentButton = m_allButtons[i][j]; 
       currentButton.addActionListener(new ActionListener() 
       { 
        public void actionPerformed(ActionEvent arg0) 
        { 
         ChangeButtonText(currentButton); 
         WinnerCheck(); 
        } 
       }); 
      } 
     } 
    } 
} 

當我在ActionEvent中調用WinnerCheck()方法時,它實際上禁用了所有按鈕。我試圖將邏輯寫到所有按鈕被禁用的地方,一旦有人贏得了tic tac toe遊戲;我的意思是擁有任何具有相同值(X或O)的行或列,但沒有任何玩家值或任何分配的值。它只是從X開始,每次點擊都會有相反的值。謝謝!如何在Java的井字遊戲中寫出勝利者的邏輯?

+1

如果要比較字符串,請使用'.equals'而不是'=='。而一個空字符串相當於另一個空字符串,所以當你檢查時,你必須確保它們是「X」或「O」,而不僅僅是一個空字符串。 – Gosu

+0

「我怎麼寫這個?」對SO來說可能太寬泛了,它不是一個代碼寫入服務。 – immibis

回答

0

我猜這是一個學校作業。

您需要一種算法來檢查勝利條件。你不需要檢查整個棋盤就可以看到上一場比賽中可能的勝利路線上的方格。

通用算法:

  1. 集總爲1
  2. 如果位置(x-1)%3,(Y-1)%3是不一樣的令牌(X或Y),繼續從步驟6開始。
  3. 如果位置(x-1)%3,(y-1)%3是相同的標記,則添加到總計。
  4. 如果位置(x + 1)%3,(y + 1)%3不是同一標記,請從步驟6繼續。
  5. 如果位置(x + 1)%3,(y + 1) 3是同樣的道理,加總。如果總數是3,遊戲贏了。
  6. 對這些座標((x-1,y),(x + 1,y)),((x,y-1),(x,y + 1))和((x ((x-1,y-1),(x + 1,y + 1))中,