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;
}
}
}
}