连接四个Win检查不起作用

时间:2013-12-09 01:42:42

标签: java fonts

所以我一直致力于我的最后一个项目,即Connect Four游戏。我遇到了这个问题,我相信我的CheckWin逻辑应该工作,put在我运行程序时没有输出。我在我的actionPerformed中调用了我的CheckWin(),我对这里要做什么感到困惑。作为旁注,有没有办法轻松增加JButton内部文本的大小?我想增加“X”和“O”的大小。我对编程比较陌生,如果这些都是简单的修复就很抱歉。我的代码如下:

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

2 个答案:

答案 0 :(得分: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方法结束之前,右括号不会出现。

这意味着检查获胜者的代码不会被执行,除非这两个条件都是真的,这不是你想要的,我很确定是不可能的......

答案 1 :(得分:0)

认同有帮助。

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")重复两次。这不是问题的原因,但我认为你可能想要删除其中一个陈述。