五子棋的分析解题思路
引言
本系列是我自己关于遇到过的编程题目进行的分析思路总结,希望能够帮助到需要帮助的那些需要帮助的编程小白,同时也欢迎各位前辈予以指正和批评指导,谢谢。
题目:
五子棋是全国智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类 游戏。通常双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上, 先形成五子连线者获胜。
个人初步分析
- 构建一个16*16的二维数组 一维从0到15排列,二维数组的第一行和第一列从0到15排列,其余列用0排列
- 采用循环来进行下棋
- 定义两个用户输入变量 第一个人输入一个两个从1到15的下标值,来改变指定数组下标数据的值
- 第二个人同第一个人一样
- 胜负判定同行或同列或斜线连续五个数据经过改变数值且相同(5个1或5个2)时,判胜利
- 胜负采用条件结构
个人解题思路
第一步
构建一个15X15的棋盘(实际数组长度应为16),,并打印初始棋盘
int[][] checkerboard = new int[16][16];
for(int i=0;i<checkerboard.length;i++) {
for(int j=0;j<checkerboard.length;j++) {
checkerboard[i][j] = 0;
}
}
for(int i=0;i<checkerboard.length;i++) {
checkerboard[i][0] = i;
checkerboard[0][i] = i;
}
for(int i=0;i<checkerboard.length;i++) {
for(int j=0;j<checkerboard.length;j++) {
if(i<10 && i>0 ) {
System.out.print(checkerboard[i][j]+" ");
}else if(i<16 && i>=10 && j==0) {
System.out.print(checkerboard[i][j]+" ");
}else if(i<16 && i>=10 && j>0){
System.out.print(checkerboard[i][j]+" ");
}else if(i==0 && j>=10) {
System.out.print(checkerboard[i][j]+" ");
}else if(i==0 && j<10) {
System.out.print(checkerboard[i][j]+" ");
}
}
System.out.print("\n");
}
第二步
定义各种需要的变量
boolean bool = true;
int time = 0 ;
// 定义回合数
int zero = 225;
int countPlay1 = 0;
int countPlay2 = 0;
// 玩家的落子数
Scanner inputLineplay11 = new Scanner(System.in);
Scanner inputRowplay12 = new Scanner(System.in);
Scanner inputLineplay21 = new Scanner(System.in);
Scanner inputRowplay22 = new Scanner(System.in);
// 定义用户输入变量
第三步
使用while循环结构,开始下棋,一开始由玩家1(player1)开始下子,下子时要判定落子位置是否已经有棋子,成功落子后打印棋盘
while(bool) {
time+