import java.util.Scanner; //五子棋的实现 public class game { public static void main(String[] args) { char[][] map = new char[11][11];//棋盘大小 Scanner scan = new Scanner(System.in); boolean isFlag = true; //*棋子的坐标 int x; int y; //o棋子的坐标 int l; int k; for (int i = 0; i < map.length; i++) {//棋盘 for (int j = 0; j < map[i].length; j++) { map[i][j] = '-'; } } while (isFlag) { //给棋盘坐标留空 map[0][0] = 0; for (int i = 1; i < map.length; i++) { char j = 0; map[0][i] = j; map[i][0] = j; } //空位 map[0][0] = ' '; //棋盘y坐标 map[0][1] = '0'; map[0][2] = '1'; map[0][3] = '2'; map[0][4] = '3'; map[0][5] = '4'; map[0][6] = '5'; map[0][7] = '6'; map[0][8] = '7'; map[0][9] = '8'; map[0][10] = '9'; //棋盘x坐标 map[1][0] = '0'; map[2][0] = '1'; map[3][0] = '2'; map[4][0] = '3'; map[5][0] = '4'; map[6][0] = '5'; map[7][0] = '6'; map[8][0] = '7'; map[9][0] = '8'; map[10][0] = '9'; //打印棋盘 for (int i = 0; i < map.length; i++) { for (int j = 0; j < map[i].length; j++) { System.out.print(" " + map[i][j]); } System.out.println(); } for (; ; ) {//棋子* System.out.print("请*输入棋子x坐标: "); x = scan.nextInt(); if (x < 0 || x > 9) { System.out.println("没有此坐标,重新输入"); continue; } x++; System.out.print("请*输入棋子y坐标: "); y = scan.nextInt(); if ( y < 0 || y>9) { System.out.println("没有此坐标,重新输入"); continue; } y++; if (map[x][y] == 'o'||map[x][y]=='*') { System.out.println("此位置有棋子 ?"); } else { map[x][y] = '*'; break; } } //打印棋盘 for (int i = 0; i < map.length; i++) { for (int j = 0; j < map[i].length; j++) { System.out.print(" " + map[i][j]); } System.out.println(); } char a = map[x][y]; //获胜条件横着连成5子 五种 if(a==map[x][y-1]&&a==map[x][y-2]&&a==map[x][y-3]&&a==map[x][y-4]){//第一种 右边四子 System.out.println("*棋子获胜!!!"); isFlag =false ; } else if(y<7&&a==map[x][y+1]&&a==map[x][y+2]&&a==map[x][y+3]&&a==map[x][y+4]){//第二种 左边四子 System.out.println("*棋子获胜!!!"); isFlag =false ; break; } else if(a==map[x][y-1]&&a==map[x][y-2]&&a==map[x][y+1]&&a==map[x][y+2]){//第三种左右个两子 System.out.println("*棋子获胜!!!"); isFlag =false ; break; } else if(a==map[x][y-1]&&a==map[x][y-2]&&a==map[x][y-3]&&a==map[x][y+1]){//第四种左三右一 System.out.println("*棋子获胜!!!"); isFlag =false ; break; } else if(a==map[x][y-1]&&a==map[x][y+1]&&a==map[x][y+2]&&a==map[x][y+3]){//第五种右三左一 System.out.println("*棋子获胜!!!"); isFlag =false ; break; } //获胜条件竖着连成5子 五种 if(a==map[x-1][y]&&a==map[x-2][y]&&a==map[x-3][y]&&a==map[x-4][y]){//第一种 右边四子 System.out.println("*棋子获胜!!!"); isFlag =false ; break; } if(x<7&&a==map[x+1][y]&&a==map[x+2][y]&&a==map[x+3][y]&&a==map[x+4][y]){//第二种 左边四子 System.out.println("*棋子获胜!!!"); isFlag =false ; break; } if(a==map[x-1][y]&&a==map[x-2][y]&&a==map[x+1][y]&&a==map[x+2][y]){//第三种左右个两子 System.out.println("*棋子获胜!!!"); isFlag =false ; break; } if(a==map[x-1][y]&&a==map[x-2][y]&&a==map[x-3][y]&&a==map[x+1][y]){//第四种左三右一 System.out.println("*棋子获胜!!!"); isFlag =false ; break; } if(a==map[x-1][y]&&a==map[x+1][y]&&a==map[x+2][y]&&a==map[x+3][y]){//第五种右三左一 System.out.println("*棋子获胜!!!"); isFlag =false ; } //获胜方法三 对角线5个棋子相等 if(a==map[x-1][y-1]&&a==map[x-2][y-2]&&a==map[x-3][y-3]&&a==map[x-4][y-4]){//第一种 右边四子 System.out.println("*棋子获胜!!!"); isFlag =false ; break; } if(x<7&&y<7&&a==map[x+1][y+1]&&a==map[x+2][y+2]&&a==map[x+3][y+3]&&a==map[x+4][y+4]){//第二种 左边四子 System.out.println("*棋子获胜!!!"); isFlag =false ; break; } if(a==map[x-1][y-1]&&a==map[x-2][y-2]&&a==map[x+1][y+1]&&a==map[x+2][y+2]){//第三种左右个两子 System.out.println("*棋子获胜!!!"); isFlag =false ; break; } if(a==map[x-1][y-1]&&a==map[x-2][y-2]&&a==map[x-3][y-3]&&a==map[x+1][y+1]){//第四种左三右一 System.out.println("*棋子获胜!!!"); isFlag =false ; break; } if(a==map[x-1][y-1]&&a==map[x+1][y+1]&&a==map[x+2][y+2]&&a==map[x+3][y+3]){//第五种右三左一 System.out.println("*棋子获胜!!!"); isFlag =false ; break; } //获胜方法三(2) 反对角线5个棋子相等 if(x<7&&a==map[x+1][y-1]&&a==map[x+2][y-2]&&a==map[x+3][y-3]&&a==map[x+4][y-4]){//对角线下 System.out.println("*棋子获胜!!!"); isFlag =false ; break; } if(x<7&&y<7&&a==map[x-1][y+1]&&a==map[x-2][y+2]&&a==map[x-3][y+3]&&a==map[x-4][y+4]){//对角线上 System.out.println("*棋子获胜!!!"); isFlag =false ; break; } if(x<7&&a==map[x+1][y-1]&&a==map[x+2][y-2]&&a==map[x-1][y+1]&&a==map[x-2][y+2]){//对角线中 上下 System.out.println("*棋子获胜!!!"); isFlag =false ; break; } if(y<7&&a==map[x-1][y+1]&&a==map[x-2][y+2]&&a==map[x-3][y+3]&&a==map[x+1][y-1]){//下一 上三 System.out.println("*棋子获胜!!!"); isFlag =false ; break; } if(x<7&&y<7&&a==map[x-1][y+1]&&a==map[x+1][y-1]&&a==map[x+2][y-2]&&a==map[x+3][y-3]){//下三 上一 System.out.println("*棋子获胜!!!"); isFlag =false ; break; } //棋子o for (; ; ) { System.out.print("请o输入棋子x坐标: "); l = scan.nextInt(); if (l < 0 || l > 9 ) { System.out.println("没有此坐标,重新输入"); continue; } l++; System.out.print("请o输入棋子y坐标: "); k = scan.nextInt(); if ( k < 0 || k > 9) { System.out.println("没有此坐标,重新输入"); continue; } k++; if (map[l][k] == '*'||map[l][k]=='o') { System.out.println("此位置有棋子 ?"); } else { map[l][k] = 'o'; break; } } //打印棋盘 for (int i = 0; i < map.length; i++) { for (int j = 0; j < map[i].length; j++) { System.out.print(" " + map[i][j]); } System.out.println(); } char b = map[l][k]; //获胜条件横着连成5子 五种 if(b==map[l][k-1]&&b==map[l][k-2]&&b==map[l][k-3]&&b==map[l][k-4]){//第一种 右边四子 System.out.println("o棋子获胜!!!"); isFlag =false ; break; } if(k<7&&b==map[l][k+1]&&b==map[l][k+2]&&b==map[l][k+3]&&b==map[l][k+4]){//第二种 左边四子 System.out.println("o棋子获胜!!!"); isFlag =false ; break; } if(b==map[l][k-1]&&b==map[l][k-2]&&b==map[l][k+1]&&b==map[l][k+2]){//第三种左右个两子 System.out.println("o棋子获胜!!!"); isFlag =false ; break; } if(b==map[l][k-1]&&b==map[l][k-2]&&b==map[l][k-3]&&b==map[l][k+1]){//第四种左三右一 System.out.println("o棋子获胜!!!"); isFlag =false ; break; } if(b==map[l][k-1]&&b==map[l][k+1]&&b==map[l][k+2]&&b==map[l][k+3]){//第五种右三左一 System.out.println("o棋子获胜!!!"); isFlag =false ; break; } //获胜条件竖着连成5子 五种 if(b==map[l-1][k]&&b==map[l-2][k]&&b==map[l-3][k]&&b==map[l-4][k]){//第一种 右边四子 System.out.println("o棋子获胜!!!"); isFlag =false ; break; } if(l<7&&b==map[l+1][k]&&b==map[l+2][k]&&b==map[l+3][k]&&b==map[l+4][k]){//第二种 左边四子 System.out.println("o棋子获胜!!!"); isFlag =false ; break; } if(b==map[l-1][k]&&b==map[l-2][k]&&b==map[l+1][k]&&b==map[l+2][k]){//第三种左右个两子 System.out.println("o棋子获胜!!!"); isFlag =false ; break; } if(b==map[l-1][k]&&b==map[l-2][k]&&b==map[l-3][k]&&b==map[l+1][k]){//第四种左三右一 System.out.println("o棋子获胜!!!"); isFlag =false ; break; } if(b==map[l-1][k]&&b==map[l+1][k]&&b==map[l+2][k]&&b==map[l+3][k]){//第五种右三左一 System.out.println("o棋子获胜!!!"); isFlag =false ; break; } //获胜方法三 对角线5个棋子相等 if(b==map[l-1][k-1]&&b==map[l-2][k-2]&&b==map[l-3][k-3]&&b==map[l-4][k-4]){//第一种 右边四子 System.out.println("o棋子获胜!!!"); isFlag =false ; break; } if(l<7&&k<7&&b==map[l+1][k+1]&&b==map[l+2][k+2]&&b==map[l+3][k+3]&&b==map[l+4][k+4]){//第二种 左边四子 System.out.println("o棋子获胜!!!"); isFlag =false ; break; } if(b==map[l-1][k-1]&&b==map[l-2][k-2]&&b==map[l+1][k+1]&&b==map[l+2][k+2]){//第三种左右个两子 System.out.println("o棋子获胜!!!"); isFlag =false ; break; } if(b==map[l-1][k-1]&&b==map[l-2][k-2]&&b==map[l-3][k-3]&&b==map[l+1][k+1]){//第四种左三右一 System.out.println("o棋子获胜!!!"); isFlag =false ; break; } if(b==map[l-1][k-1]&&b==map[l+1][k+1]&&b==map[l+2][k+2]&&b==map[l+3][k+3]){//第五种右三左一 System.out.println("o棋子获胜!!!"); isFlag =false ; break; } //获胜方法三(2) 反对角线5个棋子相等 if(l<7&&b==map[l+1][k-1]&&b==map[l+2][k-2]&&b==map[l+3][k-3]&&b==map[l+4][k-4]){//对角线下 System.out.println("o棋子获胜!!!"); isFlag =false ; break; } if(l<7&&k<7&&b==map[l-1][k+1]&&b==map[l-2][k+2]&&b==map[l-3][k+3]&&b==map[l-4][k+4]){//对角线上 System.out.println("o棋子获胜!!!"); isFlag =false ; break; } if(l<7&&b==map[l+1][k-1]&&b==map[l+2][k-2]&&b==map[l-1][k+1]&&b==map[l-2][k+2]){//对角线中 上下 System.out.println("o棋子获胜!!!"); isFlag =false ; break; } if(k<7&&b==map[l-1][k+1]&&b==map[l-2][k+2]&&b==map[l-3][k+3]&&b==map[l+1][k-1]){//下一 上三 System.out.println("o棋子获胜!!!"); isFlag =false ; break; } if(k<7&&l<7&&b==map[l-1][k+1]&&b==map[l+1][k-1]&&b==map[l+2][k-2]&&b==map[l+3][k-3]){//下三 上一 System.out.println("o棋子获胜!!!"); isFlag =false ; break; } } } }