2013-12-09 4 views
0

Итак, я работаю над своим окончательным проектом, который является игрой Connect Four. Я столкнулся с этой проблемой, когда, по-моему, моя логика CheckWin должна работать, поэтому я не могу получить результат при запуске программы. У меня есть мой CheckWin(), который вызывается в моем actionPerformed, и я застрял в том, что делать здесь. Как примечание, есть ли способ легко увеличить размер текста внутри JButton? Я хотел бы увеличить размер «X» и «O». Я относительно новичок в программировании, так что извините, если это простые исправления. Мой код ниже:Connect Four Win Check Not Working

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); 
      }  
     } 
    } 

Вы не закрыли скобку в одном из ваших операторов if в методе actionPerformed. В результате ваша программа будет проверять только выигрыш после заполнения последнего столбца.

Это также кажется, что состояние 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.

Это означает, что код для проверки победитель не получает, если выполняются оба эти условия не привели к так, что не то, что вы хотите, и я уверен, что это невозможно ...