本帖最后由 shaoguangminghan 于 2009-11-21 16:44:20 编辑

解决方案 »

  1.   

    我做好的 给你看看吧
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.util.*;public class Test extends JFrame implements ActionListener {
        Container cp;
        JLabel lbl;
        JButton [] btn = new JButton[9];
        JButton btn_start;
        JPanel jp1,jp2;
        int count = 0;
        ImageIcon icon1,icon2;
        JMenuBar mBar;
        JMenu JMenu1,JMenu2,JMenu3;
        JMenuItem mItem1,mItem2,mItem3,mItem4;    
        
        public Test() {
            setSize(300,400);
            setLocation(312,234);
            setVisible(true);
            cp = getContentPane();
            cp.setLayout(new BorderLayout());
            
            mItem1 = new JMenuItem("开始");
            mItem2 = new JMenuItem("退出");
            JMenu3 = new JMenu("帮助");
            mItem3 = new JMenuItem("游戏介绍");
            mItem4 = new JMenuItem("作者介绍");
            mItem3.addActionListener(this);
            mItem4.addActionListener(this);
            JMenu1 = new JMenu("游戏");
            JMenu2 = new JMenu("帮助");
            mBar = new JMenuBar();
            JMenu1.add(mItem1);
            JMenu1.addSeparator();     //分隔线
            JMenu1.add(mItem2);
            JMenu2.add(JMenu3);
            JMenu3.add(mItem3);
            JMenu3.add(mItem4);
            mBar.add(JMenu1);
            mBar.add(JMenu2);
            setJMenuBar(mBar);
            
            mItem1.addActionListener(this);
            mItem2.addActionListener(this);        lbl = new JLabel("红方先手");
            cp.add(lbl,BorderLayout.NORTH);
            jp1 = new JPanel();
            jp1.setLayout(new GridLayout(3,3));
            for (int i = 0; i<9; i++) {
                btn[i] = new JButton();
                jp1.add(btn[i]);
                btn[i].addActionListener(this);
            }
            cp.add(jp1,BorderLayout.CENTER);
            btn_start = new JButton("重新开始");
            jp2 = new JPanel();
            cp.add(jp2,BorderLayout.SOUTH);
            jp2.add(btn_start);
            this.setResizable(false);
            icon1 = new ImageIcon("001.jpg");
            icon2 = new ImageIcon("002.jpg");
            
            btn_start.addActionListener(this);
        }
        
        public void actionPerformed(ActionEvent e) {
            if (e.getSource() == mItem1) {
                    this.dispose();
                    new Test();
            }
            
            if (e.getSource() == mItem2) {
                this.dispose();
                System.exit(0);
            }
            else if (e.getSource() == mItem3) 
                JOptionPane.showMessageDialog(null,"游戏规则:"+"\n"
                        +"在三子棋游戏中,两个游戏者在3*3网格的有效单元格中轮流作标记(一个人用X,另一个人用O)。如果一个游戏者在网格的水平、垂直或对角线方向上作了三个连续标记,游戏就以这个游戏者得胜而告终。当网络的所有单元格都标满了标记而没有产生优胜者,就出现了平局。");
            else if (e.getSource() == mItem4)
                JOptionPane.showMessageDialog(null,"作者:信息工程学院LZY");
            
            else if (e.getSource() == btn_start) {
                this.dispose();     //销毁当前对象
                new Test();
            }
            else {
            count++;
            if (count%2 == 1) {
                lbl.setText("绿方下");
                for (int i = 0; i<9; i++) {
                    if (e.getSource() == btn[i]) {
                    btn[i].setIcon(icon1);
                    btn[i].removeActionListener(this);
            //    btn[i].setEnabled(false);    //这样会使按钮图片变灰;
                    this.win();
                    }
                }
            }
            else if (count%2 == 0) {
                lbl.setText("红方下");
                for (int i = 0; i<9; i++) {
                    if (e.getSource() == btn[i]) {
                    btn[i].setIcon(icon2);
                    btn[i].removeActionListener(this);
            //    btn[i].setEnabled(false);    //这样会使按钮图片变灰;
                    this.win();
                    }
                }
            }
        }
        }
        
        public void win() {
            
            for (int j = 0; j<9; j=j+3)    {
                if (btn[j].getIcon()==btn[j+1].getIcon() && btn[j+1].getIcon()==btn[j+2].getIcon()) 
                {
                if (btn[j].getIcon() == icon1)             this.bbb();
                else if (btn[j].getIcon() == icon2)         this.ccc();    
                }
            }
            
            for (int j = 0; j<3; j++) {
                if (btn[j].getIcon()==btn[j+3].getIcon() && btn[j+3].getIcon()==btn[j+6].getIcon()) 
                {
                if (btn[j].getIcon() == icon1)            this.bbb();
                else if (btn[j].getIcon() == icon2)         this.ccc();
                }
            }        if (btn[0].getIcon()==btn[4].getIcon() && btn[4].getIcon()==btn[8].getIcon()) 
                {
                if (btn[0].getIcon() == icon1)              this.bbb();
                else if (btn[0].getIcon() == icon2)      this.ccc();
                }
            if (btn[2].getIcon()==btn[4].getIcon() && btn[4].getIcon()==btn[6].getIcon()) 
                {
                if (btn[2].getIcon() == icon1)               this.bbb();    
                else if (btn[2].getIcon() == icon2)      this.ccc();
                }
        }
        
        public void bbb() {
            lbl.setText("游戏结束了!!!");
            JOptionPane.showMessageDialog(null,"红方胜利,绿方要加油哦!");
                for (int i = 0; i<9; i++) btn[i].removeActionListener(this);
        }
        
        public void ccc() {
            lbl.setText("game is over!");
            JOptionPane.showMessageDialog(null,"绿方胜利,红方要加油哦!");
                for (int i = 0; i<9; i++) btn[i].removeActionListener(this);
        }
        
        public static void main(String[]args) {
            Test game2 = new Test();
        }
    }
      

  2.   

    请问LS:
    .getIcon()是什么意思?
      

  3.   

    就是两张图片不同颜色的图片 你命名成001.jpg 和002.jpg 放在你的工程目录下  或者和.class一个文件夹下即可
      

  4.   

    getIcon()是获得按钮的背景图片
    你可以不用图片来区分颜色按钮
    你可以setBackColor(Color.颜色)来区分颜色 这样更容易
      

  5.   

    那我的那个有什么地方错了?if(game[1][1]==game[0][0]&&game[1][1]==game[2][2])
              output+="you win";
    但当我第一次输入game[0][0]的值后就直接打印了“you win”