1

我一直在更新我在网上找到的有点过时的井字游戏代码(就像它现在实际工作一样:P)我几乎完成了,但我一直遇到同样的问题。tic tac toe board 内的 3x3 按钮工作完美,除了一件事,点击后的颜色始终是背景,我已尝试纠正此问题,但它所做的只是使按钮根本不改变颜色。这两种颜色是红色和绿色,我想要这样当每个玩家点击一个按钮时,它会变成他们的颜色。

主要游戏代码:

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

public class TicTacToeGame extends JFrame implements ActionListener 
{
JLabel l1;
JLabel p1namel;
JLabel p2namel;
JLabel l3;
JButton b1;
JButton b2;
JButton b3;
JButton b4;
JButton b5;
JButton b6;
JButton b7;
JButton b8;
JButton b9;
int  b1ctr = 1 ,b2ctr = 2 ,b3ctr = 3 ,b4ctr = 4, b5ctr = 5, b6ctr = 6, b7ctr = 7, b8ctr = 8, b9ctr = 9; 
Font textfont = new Font( "Serif", Font.PLAIN,70 );
int ctr = 1;
String p1name,p2name;

public TicTacToeGame(String p1,String p2) 
{
    TicTacToeGameLayout customLayout = new TicTacToeGameLayout();

    getContentPane().setFont(new Font("Helvetica", Font.PLAIN, 12));
    getContentPane().setLayout(customLayout);
    getContentPane().setBackground(Color.CYAN);

    l1 = new JLabel("");
    getContentPane().add(l1);

    p1name = p1;
    p2name = p2; 

    p1namel = new JLabel("");
    p1namel.setText(p1);
    p1namel.setFont(textfont);
    p1namel.setForeground(Color.RED);
    getContentPane().add(p1namel);

    p2namel = new JLabel("");
    p2namel.setText(p2);
    p2namel.setForeground(Color.GREEN);
     p2namel.setFont(textfont);
    getContentPane().add(p2namel);

    l3 = new JLabel("<->");
     l3.setFont(textfont);
    getContentPane().add(l3);

    b1 = new JButton("");
    getContentPane().add(b1);

    b2 = new JButton("");
    getContentPane().add(b2);

    b3 = new JButton("");
    getContentPane().add(b3);

    b4 = new JButton("");
    getContentPane().add(b4);

    b5 = new JButton("");
    getContentPane().add(b5);

    b6 = new JButton("");
    getContentPane().add(b6);

    b7 = new JButton("");
    getContentPane().add(b7);

    b8 = new JButton("");
    getContentPane().add(b8);

    b9 = new JButton("");
    getContentPane().add(b9);


    l3.setForeground(Color.WHITE); 

     b1.setFont(textfont);
     b2.setFont(textfont);
     b3.setFont(textfont);
     b4.setFont(textfont);
     b5.setFont(textfont);
     b6.setFont(textfont);
     b7.setFont(textfont);
     b8.setFont(textfont);
     b9.setFont(textfont);

     b1.addActionListener(this);
     b2.addActionListener(this);
     b3.addActionListener(this);
     b4.addActionListener(this);
     b5.addActionListener(this);
     b6.addActionListener(this);
     b7.addActionListener(this);
     b8.addActionListener(this);
     b9.addActionListener(this);

    setSize(getPreferredSize());

    addWindowListener(new WindowAdapter() 
    {
        public void windowClosing(WindowEvent e) 
        {
            System.exit(0);
        }
    });
}


public void actionPerformed(ActionEvent ae)

    {

     if (ctr % 2 == 1)

        {

         if(ae.getSource() == b1)   
            {


                b1ctr = 0;
                b1.setEnabled(false);
                b1.setBackground(Color.GREEN);
                winnerfind();
                ctr++;      

            }
            else if (ae.getSource() == b2)

                {

                b2ctr = 0;
                b2.setEnabled(false);
                b2.setBackground(Color.GREEN);  
                winnerfind();
                ctr++;

                }
                else if (ae.getSource() == b3)

                {

                b3ctr = 0;
                b3.setEnabled(false);
                b3.setBackground(Color.GREEN);  
                winnerfind();
                ctr++;

                }
                else if (ae.getSource() == b4)

                {

                b4ctr = 0;
                b4.setEnabled(false);
                b4.setBackground(Color.GREEN);  
                winnerfind();
                ctr++;

                }
                else if (ae.getSource() == b5)

                {

                b5ctr = 0;
                b5.setEnabled(false);
                b5.setBackground(Color.GREEN);  
                winnerfind();
                ctr++;

                }
                else if (ae.getSource() == b6)

                {

                b6ctr = 0;
                b6.setEnabled(false);
                b6.setBackground(Color.GREEN);  
                winnerfind();
                ctr++;

                }
                else if (ae.getSource() == b7)

                {

                b7ctr = 0;
                b7.setEnabled(false);
                b7.setBackground(Color.GREEN);  
                winnerfind();
                ctr++;

                }
                else if (ae.getSource() == b8)

                {

                b8ctr = 0;
                b8.setEnabled(false);
                b8.setBackground(Color.GREEN);  
                winnerfind();
                ctr++;

                }
                else if (ae.getSource() == b9)

                {

                b9ctr = 0;
                b9.setEnabled(false);
                b9.setBackground(Color.GREEN);  
                winnerfind();
                ctr++;

                }

        }
        else if (ctr % 2 != 1)

                {

                if(ae.getSource() == b1)    
                    {


                        b1ctr = 1;
                        b1.setEnabled(false);
                        b1.setBackground(Color.YELLOW);
                        winnerfind1();
                        ctr++;      

                    }
                    else if (ae.getSource() == b2)

                        {

                        b2ctr = 1;  
                        b2.setEnabled(false);
                        b2.setBackground(Color.YELLOW);
                        winnerfind1();
                        ctr++;

                        }
                        else if (ae.getSource() == b3)

                        {

                        b3ctr = 1;
                        b3.setEnabled(false);
                        b3.setBackground(Color.YELLOW); 
                        winnerfind1();
                        ctr++;

                        }
                        else if (ae.getSource() == b4)

                        {

                        b4ctr = 1;
                        b4.setEnabled(false);   
                        b4.setBackground(Color.YELLOW);
                        winnerfind1();
                        ctr++;

                        }
                        else if (ae.getSource() == b5)

                        {

                        b5ctr = 1;
                        b5.setEnabled(false);   
                        b5.setBackground(Color.YELLOW);
                        winnerfind1();
                        ctr++;

                        }
                        else if (ae.getSource() == b6)

                        {

                        b6ctr = 1;
                        b6.setEnabled(false);   
                        b6.setBackground(Color.YELLOW);
                        winnerfind1();
                        ctr++;

                        }
                        else if (ae.getSource() == b7)

                        {

                        b7ctr = 1;
                        b7.setEnabled(false);   
                        b7.setBackground(Color.YELLOW);
                        winnerfind1();
                        ctr++;

                        }
                        else if (ae.getSource() == b8)

                        {

                        b8ctr = 1;
                        b8.setEnabled(false);   
                        b8.setBackground(Color.YELLOW);
                        winnerfind1();
                        ctr++;

                        }
                        else if (ae.getSource() == b9)

                        {

                        b9ctr = 1;
                        b9.setEnabled(false);   
                        b9.setBackground(Color.YELLOW);
                        winnerfind1();
                        ctr++;

                        }




            }



    }

    public void winnerfind()

        {

        if ((b1ctr == 0 && b2ctr == 0 && b3ctr == 0) || (b1ctr == 0 && b4ctr == 0 && b7ctr == 0) || (b2ctr == 0 && b5ctr == 0 && b8ctr == 0) || (b3ctr == 0 && b6ctr == 0 && b9ctr == 0) || (b4ctr == 0 && b5ctr == 0 && b6ctr == 0) || (b7ctr == 0 && b8ctr == 0 && b9ctr == 0) || (b1ctr == 0 && b5ctr == 0 && b9ctr == 0) || (b3ctr == 0 && b5ctr == 0 && b7ctr == 0))

            {

            JOptionPane.showMessageDialog(null,""+p1name+" is the winner!");

            }   



        }


    public void winnerfind1()

        {

        if ((b1ctr == 1 && b2ctr == 1 && b3ctr == 1) || (b1ctr == 1 && b4ctr == 1 && b7ctr == 1) || (b2ctr == 1 && b5ctr == 1 && b8ctr == 1) || (b3ctr == 1 && b6ctr == 1 && b9ctr == 1) || (b4ctr == 1 && b5ctr == 1 && b6ctr == 1) || (b7ctr == 1 && b8ctr == 1 && b9ctr == 1) || (b1ctr == 1 && b5ctr == 1 && b9ctr == 1) || (b3ctr == 1 && b5ctr == 1 && b7ctr == 1))

            {

            JOptionPane.showMessageDialog(null,""+p2name+" is victorious!");    

            }   



        }


}

class TicTacToeGameLayout implements LayoutManager 
{

public TicTacToeGameLayout() 
{
}

public void addLayoutComponent(String name, Component comp) 
{
}

public void removeLayoutComponent(Component comp) 
{
}

public Dimension preferredLayoutSize(Container parent) 
{
    Dimension dim = new Dimension(0, 0);

    Insets insets = parent.getInsets();
    dim.width = 719 + insets.left + insets.right;
    dim.height = 455 + insets.top + insets.bottom;

    return dim;
}

public Dimension minimumLayoutSize(Container parent) 
{
    Dimension dim = new Dimension(0, 0);
    return dim;
}

public void layoutContainer(Container parent) 
{
    Insets insets = parent.getInsets();

    Component c;
    c = parent.getComponent(0);
    if (c.isVisible()) {c.setBounds(insets.left+0,insets.top+64,720,8);}
    c = parent.getComponent(1);
    if (c.isVisible()) {c.setBounds(insets.left+16,insets.top+8,428,80);}
    c = parent.getComponent(2);
    if (c.isVisible()) {c.setBounds(insets.left+472,insets.top+8,528,80);}
    c = parent.getComponent(3);
    if (c.isVisible()) {c.setBounds(insets.left+300,insets.top+8,150,80);}
    c = parent.getComponent(4);
    if (c.isVisible()) {c.setBounds(insets.left+176,insets.top+112,120,104);}
    c = parent.getComponent(5);
    if (c.isVisible()) {c.setBounds(insets.left+296,insets.top+112,112,104);}
    c = parent.getComponent(6);
    if (c.isVisible()) {c.setBounds(insets.left+408,insets.top+112,120,104);}
    c = parent.getComponent(7);
    if (c.isVisible()) {c.setBounds(insets.left+176,insets.top+216,120,96);}
    c = parent.getComponent(8);
    if (c.isVisible()) {c.setBounds(insets.left+296,insets.top+216,112,96);}
    c = parent.getComponent(9);
    if (c.isVisible()) {c.setBounds(insets.left+408,insets.top+216,120,96);}
    c = parent.getComponent(10);
    if (c.isVisible()) {c.setBounds(insets.left+176,insets.top+312,120,104);}
    c = parent.getComponent(11);
    if (c.isVisible()) {c.setBounds(insets.left+296,insets.top+312,112,104);}
    c = parent.getComponent(12);
    if (c.isVisible()) {c.setBounds(insets.left+408,insets.top+312,120,104);}
   }
}
4

1 回答 1

4

除了您使用黄色而不是红色这一事实之外,该代码并没有什么真正的问题 - 如果您想更改它,只需更改所有出现的Color.YELLOWto Color.RED,并为两个玩家交换颜色以保持一致性:

p1namel = new JLabel("");
p1namel.setText(p1);
p1namel.setFont(textfont);
p1namel.setForeground(Color.GREEN); // << HERE
getContentPane().add(p1namel);

p2namel = new JLabel("");
p2namel.setText(p2);
p2namel.setForeground(Color.RED); // << AND HERE
p2namel.setFont(textfont);
getContentPane().add(p2namel);

当我在它的底部添加一些支持代码以使框架运行时:

public static void main(String[] args) {
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            TicTacToeGame frame = new TicTacToeGame("pax","diablo");
            frame.setVisible(true);
        }
    });
}

它似乎工作正常(除了不匹配的颜色):

在此处输入图像描述

通过如上所示进行更改,您最终得到:

在此处输入图像描述

于 2013-07-17T02:11:04.610 回答