开发一个n子棋游戏,支持两个游戏者玩游戏。在游戏中,游戏者先在输入框中输入n值,n代表棋盘的行数和列数。然后游戏开始,两个游戏者在n*n网格的有效单元格中轮流作标记(一个人用X,另一个人用O)。如果一个游戏者在网格的水平、垂直或对角线方向上作了三个连续标记,游戏就以这个游戏者得胜而告终。当网络的所有单元格都标满了标记而没有产生优胜者,就出现了平局。

解决方案 »

  1.   


    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.util.*;public class Client 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 Game6() {
    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 Game6();
    }

    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,"作者:07计本055苏小凯");

    else if (e.getSource() == btn_start) {
    this.dispose();     //销毁当前对象
    new Game6();
    }
    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) {
    Game6 game2 = new Game6();
    }
    }
    这是个三子棋的,我们老师让做一个网络版三子棋,呵呵