软件运行要求如下:
1.输入要生成的棋盘的行列数 m和n。
2.显示五子棋盘,每一个位置默认都是0。
3.提示黑方下棋:输入行列数 将该位置改为1。
===》 代码进行逻辑检 : 横, 竖 , 斜。
4.提示白方下棋:输入行列数 将该位置改为2。
5.如果哪一方胜出,则打印,程序退出。
public class DeepArrayTestUnit{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
System.out.print("输入五子棋盘的行列数");
int row = in.nextInt();
int col = in.nextInt();
//生成棋盘
int[][] chess = new int[row+1][col+1];
//给第一行填数字
for(int i = 0; i< chess[0].length; i++){
chess[0][i] = i;
}
//给第一列填数字
for(int i = 0;i < chess.length;i++){
chess[i][0] = i;
}
//无限循环
int m,n;
boolean flag =true; //true表示黑方下 false表示白方下
// 0 显示棋盘
for (int i = 0; i < chess.length; i++) {
for (int j = 0; j < chess[i].length; j++) {
System.out.print(chess[i][j] + " ");
}
System.out.println();
}
for(;;) {
// 1.先提示下棋
if(flag){
System.out.print("黑方下棋:");
m = in.nextInt();
n = in.nextInt();
chess[m][n] = 1;
} else {
System.out.print("白方下棋:");
m = in.nextInt();
n = in.nextInt();
chess[m][n] = 2;
}
// 2.显示棋盘 i j i-1 j-1 i-2
for (int i = 0; i < chess.length; i++) {
for (int j = 0; j < chess[i].length; j++) {
System.out.print(chess[i][j] + " ");
}
System.out.println();
}
// 3.五子棋下棋以后的逻辑判断 胜出 继续提示白方下棋:
if(flag){
// 表示黑方(1)下的棋
// 黑方是否胜利的逻辑判断代码
// judge返回true,就表示赢了;返回false就表示没赢
if(judge(chess, m, n, 1)){
System.out.println("黑方胜利!");
return;
}
// 该白方下棋了
flag = false;
} else {
// 表示白方(2)下的棋
// 白方是否胜利的逻辑判断代码
if(judge(chess, m, n, 2)){
System.out.println("白方胜利!");
return;
}
// 该黑方下棋了
flag = true;
}
}
}
/**
* 判断下棋的逻辑
* @param chess 存储所有棋子的二维数组
* @param m 下棋的行
* @param n 下棋的列
* @param data 黑棋1或者白棋2
* @return 返回true,表示data胜利了,返回false,表示没有胜利
*/
private static boolean judge(int[][] chess, int m, int n, int data) {
int count = 1;
int j = 0;
// 先判断横向的左边
// ... [m,n-1] [m,n] [m,n+1]
for(j=n-1; j>0; --j){
if(chess[m][j] == data){
count++;
} else {
break;
}
}
// 再判断横向的右边
for(j=n+1; j<chess[0].length; ++j){
if(chess[m][j] == data){
count++;
} else {
break;
}
}
// 判断count
if(count == 5){
return true;
}
// 给count要重置一下
count = 1;
// 判断竖方向
int i=0;
// 判断当前棋子的上方向
for(i=m-1; i>0; --i){
if(chess[i][n] == data){
count++;
} else {
break;
}
}
// 判断当前棋子的下方向
for(i=m+1; i<chess.length; ++i){
if(chess[i][n] == data){
count++;
} else {
break;
}
}
// 判断count
if(count == 5){
return true;
}
// count需要重置一下
count = 1;
// 判断左斜上方向
for(i=m-1, j=n+1; i>0 && j<chess[0].length; --i, ++j){
if(chess[i][j] == data){
count++;
} else {
break;
}
}
// 判断左斜下方向
for(i=m+1, j=n-1; i<chess.length && j>0; ++i, --j){
if(chess[i][j] == data){
count++;
} else {
break;
}
}
// 判断count
if(count == 5){
return true;
}
// count需要重置一下
count = 1;
// 判断右斜上方向
for(i=m-1, j=n-1; i>0 && j>0; --i, --j){
if(chess[i][j] == data){
count++;
} else {
break;
}
}
// 判断右斜下方向
for(i=m+1, j=n+1; i<chess.length && j<chess[0].length; ++i, ++j){
if(chess[i][j] == data){
count++;
} else {
break;
}
}
// 判断count
if(count == 5){
return true;
}
// 上面检查了各个方向,都没有胜利,直接返回false,表示还又有赢棋
return false;
}
}