java基本入门之后,迎来第一个挑战——五子棋设计
寒假的时候,靠着看java手册,实现了双人对战并判断输赢的功能。但是一直卡在了人机对战上面。
寒假提前一周来到学校,每天下午去蓝杰请教,自己一步一步摸索,终于花了4天时间完成了。
以下详细的叙述一下整体的设计过程:
首先是五子棋窗口界面的设计,画窗体,加按钮,这些都比较基础,主要是要重写重绘的方法,否则每次改变窗体都会使其变化。
package wuziqi;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class FiveChessUI extends JPanel implements Config {
/**
*五子棋界面
*/
private static final long serialVersionUID = 1L;
private static int[][] chesses=new int[ROWS][COLUMNS];
public static void main(String[] args) {
FiveChessUI fcUI = new FiveChessUI();
fcUI.initUI();
}
public void initUI () {
JFrame jf = new JFrame();
jf.setTitle("五子棋v0.5 by xzw");
jf.setSize(700,650);
jf.setLocationRelativeTo(null);
jf.add(this,BorderLayout.CENTER);
this.setBackground(Color.ORANGE);
jf.setDefaultCloseOperation(3);
this.setLayout(new FlowLayout());
JPanel jp2 = new JPanel();
jp2.setPreferredSize(new Dimension(100, 0));
jp2.setBackground(Color.CYAN);
// JButton jbuStart = new JButton("开始");
// jbuStart.setPreferredSize(new Dimension(70, 70));
JButton jbuReg = new JButton("悔棋");
jbuReg.setPreferredSize(new Dimension(70, 50));
JButton jbuR = new JButton("重来");
jbuR.setPreferredSize(new Dimension(70, 50));
JButton jbup2p = new JButton("双人");
jbup2p.setPreferredSize(new Dimension(70, 70));
JButton jbup2c = new JButton("人机");
jbup2c.setPreferredSize(new Dimension(70, 70));
JLabel la2 = new JLabel("当前执子:black");
jp2.add(jbup2p);
jp2.add(jbup2c);
jp2.add(jbuReg);
jp2.add(jbuR);
jp2.add(la2);
jf.add(jp2,BorderLayout.EAST);
jf.setVisible(true);
Graphics g = this.getGraphics();
ChessListener e = new ChessListener(g,chesses,this);
jbup2p.addActionListener(e);
jbup2c.addActionListener(e);
jbuReg.addActionListener(e);
jbuR.addActionListener(e);
}
/**
* 重写重绘方法
*/
public void paint(Graphics g){
//调用父类的重绘窗体
super.paint(g);
//重绘窗体的同时绘制棋盘和棋子
drawChessTable(g);
drawChesses(g);
}
//画棋盘
public void drawChessTable (Graphics g){
g.setColor(Color.BLACK);
for (