2013-12-09 48 views
0

因此,我一直在研究我的最終期限項目,即Connect Four遊戲。我遇到了這個問題,我相信我的CheckWin邏輯應該可以工作,當我運行該程序時,我沒有提供任何輸出。我在我的actionPerformed中調用了我的CheckWin(),並且我堅持要在這裏做什麼。作爲一個方面說明,有沒有什麼方法可以輕鬆增加JButton內部文本的大小?我想增加「X's」和「O's」的大小。如果這些都是簡單的修復,我在編程方面相對較新,所以很抱歉。我的代碼如下:連接Four Win Check不工作

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class Connect implements ActionListener { 





private JFrame window = new JFrame();  
private JPanel myPanel = new JPanel(); 
private JPanel myPanelB = new JPanel(); 
private JButton[][] myButtons = new JButton[6][7]; 
private JButton[] buttons = new JButton[7]; 
private boolean win = false; 

private int count = 5; 
private int count2 = 5; 
private int count3 = 5; 
private int count4 = 5; 
private int count5 = 5; 
private int count6 = 5; 
private int count7 = 5; 
private int countA = 0; 
private String letter = ""; 

public boolean checkHorizontalWin(String letter) { 
for (int y = 0; y < myButtons.length; y++) { 
    // going to length-3 to avoid IndexOutOfBounds exception 
    for (int x = 0; x < myButtons[y].length - 3; x++) { 
     if (myButtons[y][x].getText().equals(letter) 
      && myButtons[y][x + 1].getText().equals(letter) 
      && myButtons[y][x + 2].getText().equals(letter) 
      && myButtons[y][x + 3].getText().equals(letter) 
     ) { 
      return true; 
     } 
    } 
} 
return false; 
} 


public boolean checkVerticalWin(String letter) { 
    for (int y = 0; y < myButtons.length - 3; y++) { 
     for (int x = 0; x < myButtons[y].length; x++) { 
      if (myButtons[y][x].getText().equals(letter) 
       && myButtons[y + 1][x].getText().equals(letter) 
       && myButtons[y + 2][x].getText().equals(letter) 
       && myButtons[y + 3][x].getText().equals(letter) 
      ) { 
       return true; 
      } 
     } 
    } 
    return false; 
} 


public boolean checkDiagonalToTheLeftWin(String letter) { 
    for (int y = 0; y < myButtons.length - 3; y++) { 
     for (int x = 0; x < myButtons[y].length - 3; x++) { 
      if (myButtons[y][x].getText().equals(letter) 
       && myButtons[y + 1][x + 1].getText().equals(letter) 
       && myButtons[y + 2][x + 2].getText().equals(letter) 
       && myButtons[y + 3][x + 3].getText().equals(letter) 
      ) { 
       return true; 
      } 
     } 
    } 
    return false; 
} 


public boolean checkDiagonalToTheRightWin(String letter) { 
    for (int y = 0; y < myButtons.length - 3; y++) { 
     for (int x = 3; x < myButtons[y].length; x++) { 
      if (myButtons[y][x].getText().equals(letter) 
       && myButtons[y + 1][x - 1].getText().equals(letter) 
       && myButtons[y + 2][x - 2].getText().equals(letter) 
       && myButtons[y + 3][x - 3].getText().equals(letter) 
      ) { 
       return true; 
      } 
     } 
    } 
    return false; 
} 



public Connect(){ 
    window.setSize(800,700); 
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    myPanel.setLayout(new GridLayout(1,7)); 
    myPanelB.setLayout(new GridLayout(6,7)); 
    for (int i = 0; i < buttons.length; i ++){ 
     buttons[i] = new JButton(); 
     myPanel.add(buttons[i]); 
     buttons[i].addActionListener(this); 
    } 
    for (int i = 0; i < 6; i ++){ 
     for (int j = 0; j < 7; j ++){ 
      myButtons[i][j] = new JButton(); 
      myPanelB.add(myButtons[i][j]); 
     } 
    } 
    window.add(myPanel, BorderLayout.NORTH); 
    window.add(myPanelB, BorderLayout.CENTER); 
    window.setVisible(true); 
} 

public void actionPerformed(ActionEvent e){ 
    countA++; 
    if (countA % 2 == 0) 
     letter = "X"; 
    else 
     letter = "O"; 



    if (e.getSource() == buttons[0]){ 
     myButtons[count][0].setText(letter); 
     count --; 
    } 
    if (e.getSource() == buttons[1]){ 
     myButtons[count2][1].setText(letter); 
     count2 --; 
    } 
    if (e.getSource() == buttons[2]){ 
     myButtons[count3][2].setText(letter); 
     count3--; 
    } 
    if (e.getSource() == buttons[3]){ 
     myButtons[count4][3].setText(letter); 
     count4--; 
    } 
    if (e.getSource() == buttons[4]){ 
     myButtons[count5][4].setText(letter); 
     count5--; 
    } 
    if (e.getSource() == buttons[5]){ 
     myButtons[count6][5].setText(letter); 
     count6--; 
    } 
    if (e.getSource() == buttons[6]){ 
     myButtons[count7][6].setText(letter); 
     count7--; 
    } 
    if (myButtons[0][0].getText().equals("O") || myButtons[0][0].getText().equals("X")){ 
     buttons[0].setEnabled(false); 
    } 
    if (myButtons[0][1].getText().equals("O") || myButtons[0][1].getText().equals("X")){ 
     buttons[1].setEnabled(false); 
    } 
    if (myButtons[0][2].getText().equals("O") || myButtons[0][2].getText().equals("X")){ 
     buttons[2].setEnabled(false); 
    } 
    if (myButtons[0][3].getText().equals("O") || myButtons[0][3].getText().equals("X")){ 
     buttons[3].setEnabled(false); 
    } 
    if (myButtons[0][4].getText().equals("O") || myButtons[0][4].getText().equals("X")){ 
     buttons[4].setEnabled(false); 
    } 
    if (myButtons[0][5].getText().equals("O") || myButtons[0][5].getText().equals("X")){ 
     buttons[5].setEnabled(false); 
    } 
    if (myButtons[0][6].getText().equals("O") || myButtons[0][6].getText().equals("X")){ 
     buttons[6].setEnabled(false); 


    if (myButtons[0][6].getText().equals("O") || myButtons[0][6].getText().equals("X")){ 
     buttons[6].setEnabled(false); 

    if (checkHorizontalWin(letter) 
     || checkVerticalWin(letter) 
     || checkDiagonalToTheLeftWin(letter) 
     || checkDiagonalToTheRightWin(letter) 
    ) { 
     win = true; 

    if (win == true) { 
     JOptionPane.showMessageDialog(null, letter + " has won!"); 
     System.exit(0); 
    }  
    } 





    } 




    if(win == true){ 
     JOptionPane.showMessageDialog(null, letter + " has won!"); 
     System.exit(0); 
    } else if(count == 42 && win == false){ 
     JOptionPane.showMessageDialog(null, "tie game"); 
     System.exit(0); 
    }    


    } 

} 



public static void main(String[] args){ 
    new Connect(); 
} 
} 

回答

0

Identation幫助。

if (myButtons[0][6].getText().equals("O") || myButtons[0][6].getText().equals("X")) 
{ 
    buttons[6].setEnabled(false); 

    // Missing brace on previous if 
    // checkXWin methods only invoked inside the above if-statement. 
    if (checkHorizontalWin(letter) 
     || checkVerticalWin(letter) 
     || checkDiagonalToTheLeftWin(letter) 
     || checkDiagonalToTheRightWin(letter) 
     ) { 
      win = true; 

      if (win == true) { 
       JOptionPane.showMessageDialog(null, letter + " has won!"); 
       ystem.exit(0); 
      }  
     } 
    } 

您沒有在actionPerformed方法中正確關閉if語句中的某個括號。因此,您的計劃只會在最後一列填滿後纔會贏得勝利。

這似乎也是條件if (myButtons[0][6].getText().equals("O") || myButtons[0][6].getText().equals("X")重複兩次。這不會是你的問題的原因,但我想你可能想要刪除其中的一個陳述。

+0

謝謝!我在毆打自己這麼簡單的事情,對不起,我以前沒有意識到這一點。作爲一個便箋,你知道我可以如何增加我的X和O的字體大小嗎?我不知道如何去增加JButton中的字體大小。 – Smn21

0

if語句的括號不正確。

if (myButtons[0][6].getText().equals("O") || myButtons[0][6].getText().equals("X")){ 
    buttons[6].setEnabled(false); 


if (myButtons[0][6].getText().equals("O") || myButtons[0][6].getText().equals("X")){ 
    buttons[6].setEnabled(false); 

在這兩個論斷的if報表已打開支架,但收盤括號不來,直到actionPerformed方法結束。

這意味着代碼檢查贏家沒有得到執行,除非這兩個條件導致真實的,這是不是你想要的,我敢肯定是不可能的...