五子棋总结

今天,五子棋人机对战终于完成了,不过机器人还是有点笨。
总共用了6个类:主类Wu 、监听器类FListener、算法类SuanFa 、遍历类Bianli、棋盘格子的类Lo、机器人类 Robot 。
主类负责显示界面,画棋盘和重绘。
// 绘制棋盘
for (int i = 0; i <= Lo.x2; i++) { // 画横线
g.drawLine(Lo.x1,Lo.d*i+Lo.y1,Lo.x2*Lo.d+Lo.x1,Lo.d*i+Lo.y1);
}
for (int j = 0; j <= Lo.y2; j++) { // 画竖线
g.drawLine(Lo.d*j+Lo.x1,Lo.y1,Lo.d*j +Lo.x1, Lo.x2 * Lo.d+ Lo.y1);
}
// 重绘制棋子
for (int i = 0; i < chess.length; i++) {
for (int j = 0; j < chess[i].length; j++) {
if (chess[i][j] != 0) {
// 得到每个交叉点的坐标
int x2 = Lo.x1 + Lo.d * j;
int y2 = Lo.y1 + Lo.d * i;
if (chess[i][j] == 1) {
g.setColor(java.awt.Color.BLACK);
} else if (chess[i][j] == -1) {
g.setColor(java.awt.Color.RED);
}
// 以当前的交叉点为圆心画圆
g.fillOval(x2-Lo.CHESS_SIZE/2,y2-Lo.CHESS_SIZE/2,Lo.CHESS_SIZE, Lo.CHESS_SIZE);
}
}
}
}
监听器负责获得鼠标的位置和人放棋子,已经判断输赢
SuanFa sf = new SuanFa(chess);
if(sf.checkRow(i,j)>=5||sf.checkColumn(i,j)>=5||sf.checkCol(i,j)>=5 ||sf.checkC(i, j)>= 5) {
if (chess[i][j] == 1)// 弹出框
javax.swing.JOptionPane.showMessageDialog(null, "黑赢了!!");
if (chess[i][j] == -1)
javax.swing.JOptionPane.showMessageDialog(null, "红赢了!!");
}

算法类负责计算连着的棋子个数
遍历类寻找空格周围相同棋子个数返回给机器人
机器人根据遍历类返回的个数赋给空格权值,由此确定机器人下子的位置。

机器人的智力目前还很低,在以后的学习中,还会不断的改进。

你可能感兴趣的:(算法,swing,J#)