用java编写五子棋游戏

本人java菜鸟,最近编了一个五子棋游戏。有一些不足之处还望各位大神多多指教。

首先创建一个board(棋盘)的类,让他继承父类JPanel。
当然,在写代码之前,我们还要import一些类库。

import java.awt.Color;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Set;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class board extends JPanel{

接下来我们要定义几个变量

private static final long serialVersionUID=1l;(为了确保版本兼容性)

//设置行数和列数,这里就按照围棋棋盘设置成19*19
private final int rows=19,cols=19;
要说明一下,这里的rows指的是列数,cols指的是行数(java里面行数和列数很容易弄混,故在这里做一下说明)。

//设置每一个格子的宽度和高度
private final int BLOCKWIDTH=20,BLOCKHEIGHT=20;
其实五子棋的棋子应该放在格子的交叉点上而不是格子里面,但我由于技术不到位,只能用格子代替。

//设置一个计数器,目的是用来判断该哪一方走棋
private int clickcount;

//设置一个颜色的array,其中包括红色和黄色,代表对阵双方(顺序不能错!)
private Color[] colors= {Color.RED,Color.YELLOW};

//设置一个JLabel和JButton的二维array,棋盘的每一个格子就对应着一个JLabel和JButton
private JLabel[][] labels=new JLabel[rows][cols];
private JButton[][] buttons=new JButton[rows][cols];

接下来是class constructor
public board() {
this.labels=new JLabel[rows][cols];
this.buttons = new grid[rows][cols];

(这里grid是JButton的一个子类,它有两个变量,即它所在的行与列。grid类呈上:
import javax.swing.JButton;

public class grid extends JButton{
private static final long serialVersionUID = 1L;
int row;
int col;
)}

this.clickcount=0;(把计数器起始设为0)
this.setLayout(null);
}

接下来是给每一个格子设置JLabel
private void initlabels() {
for(int i=0;i for(int j=0;j JLabel jl=new JLabel("",JLabel.CENTER);(这里我们不需要写什么字,所以就是一个empty string)
jl.setBounds(iBLOCKWIDTH, jBLOCKHEIGHT, BLOCKWIDTH, BLOCKHEIGHT);
jl.setBorder(BorderFactory.createLineBorder(Color.BLACK));(设置间隔线为黑色)
jl.setOpaque(true);
jl.setBackground(Color.GRAY);(填充背景为灰色)
this.add(jl);(把jl加到board里)
this.labels[i][j]=jl;(归位)
}
}
}
写完initlabels之后不要忘记把它加到class constructor最后一行中!!

接下来是给每一个格子设置JButton
private void initButtons() {
for(int i=0;i for(int j=0;j grid jb=new grid();
jb.row=i;
jb.col=j;
jb.setBounds(iBLOCKWIDTH, jBLOCKHEIGHT, BLOCKWIDTH, BLOCKHEIGHT);
this.add(jb);
buttons[i][j]=jb;

(与JLabel不同的是,我们要给JButton加上监听器,这样才能发挥按钮的作用)
jb.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//这里的内容一会儿会添加
}
});
}
}
}
写完initButtons也是要把他加到constructor里面,注意要把initButtons()放在initlabels()之前!!!

接下来我们再写一个计算JFrame大小的方法,以便于日后设置JFrame
public int[] Returnsize() {
int[] a = {cols * BLOCKWIDTH + 40, rows * BLOCKHEIGHT + 20};
return a;
}

接下来就是开始下棋了,我们这里的设定是黄色执先手,红色执后手。每点开一个按钮就相当于下了一步棋。我们可以把JLabel的背景色改成红色/黄色来表示哪一方走的棋。

private void open(grid a) {
clickcount++;(首先计数器+1,代表走了一步棋)
a.setVisible(false);(把按钮设为不可见,这样就露出了下面的JLabel)
if(clickcount%2==0) {
labels[a.row][a.col].setBackground(Color.RED);
}(偶数代表红色走的棋)
else {
labels[a.row][a.col].setBackground(Color.YELLOW);
} (奇数代表黄色走的棋)
}

写完open后在监听器的actionPerformed里面加上这两行:
grid m=(grid) e.getSource();
open(m);

今天就先写到这里,之后在写如何判断输赢。

你可能感兴趣的:(用java编写五子棋游戏)