1、五子棋需要三个类:
Chessman,Chessboard,GobangGame
2、准备知识
1>其中Chessman使用的是枚举类
enum 枚举类跟class,interface是等级一样的。适用于一个类的对象有限而且固定,比如季节类只有春夏秋冬四个对象。
用法:所有实例必须在枚举类的第一行显示列出,否则这个枚举类永远都不能产生实例,列出的实例自动添加public static final修饰。一旦为枚举类显示定义了带参数的构造器,列出枚举值时就必须对应地传入参数。在枚举类中列出枚举值时,实际上就是调用构造器创建枚举类对象 。并且枚举类的构造方法是private修饰的, 保证只有本类才能创建其对象,为了安全性
2>Math.random(),产生的随机数是在[0,1)之间,而且使用强制转化为int类型的时候,是将整数部分直接截断。比如4.9就是4.因为这个问题,所以原书附送光盘的代码中有这个错误。
3、系统分析:
下棋,需要一个棋子类,需要一个棋盘类,还需要一个游戏类。棋盘和棋子都准备好后,真正难的是游戏类。
1>要获得输入的字符串,使用BufferedReader(new InputStreamReader(System.in))包装。
2>判断获得的字符串是否合法,增加异常处理,增加程序的健壮性。
3>用户开始动棋子。每动一步都要用以棋子为中心进行左右,上下,斜线的扫描,这样避免每次都遍历棋盘,减少程序的性能开销
4>决定是否重新玩。
以下是代码:
public enum Chessman {
BLACK("●"),WHITE("○");
private String chessman;
//私有构造器,枚举类只能使用private访问控制符
private Chessman(String chessman){
this.chessman=chessman;
}
public String getChessman(){
return this.chessman;
}
}
package aaa;
//棋盘类
public class Chessboard {
//定义一个二位数组来充当棋盘
private String[][] board;
//定义棋盘的大小
public static final int BOARD_SIZE=5;
//初始化棋盘
public void initBoard(){
//初始化棋盘数组
board=new String[BOARD_SIZE][BOARD_SIZE];
//把每个元素赋值为“十”,用于控制台输出棋盘
for(int i=0;i<BOARD_SIZE;i++){
for(int j=0;j<BOARD_SIZE;j++){
board[i][j]="十";
}
}
}
public void test(){
Object[][] array=new Object[10][10];
for(int i=0;i<array.length;i++){
for(int j=0;j<array[i].length;j++){
array[i][j]=new Object();
}
}
}
//在控制台输出棋盘的方法
public void printBoard(){
//打印每个数组元素
for(int i=