package com.qq.gb;
import java.util.Scanner;
public class GoBang {
Scanner sc = new Scanner(System.in);
String [][] num= new String[15][15];//創建二維數組
int userId = 0;//判斷當前用戶
int x = 0;//橫座標
int y = 0;//縱座標
static boolean win = false;//用於判斷輸贏的變量
//初始化二維數組
public void board() {
for (x = 0; x < num.length; x++) {
for (y = 0; y < num.length; y++) {
num[x][y]="+";
}
}
}
//打印棋盤方法
public void printBoard() {
for (int x = 0; x < num.length; x++) {
for (int y = 0; y < num.length; y++) {
System.out.print(num[x][y]+" ");
}
System.out.println();
}
}
//用戶下棋的方法
public void userXY() {
System.out.println("請輸入所放棋子的橫座標:");
x = sc.nextInt();
System.out.println("請輸入所放棋子的縱座標:");
y = sc.nextInt();
//判斷當前用戶如果userId是0則是第一個用戶
if (userId==0) {
if (!num[x-1][y-1].equals("+")) {
System.out.println("該棋子已經存在,請重新輸入!");
userXY();
}else {
num[x-1][y-1] = "X";
userId = 1;
printBoard();
}
} else {
if (!num[x-1][y-1].equals("+")) {
System.out.println("該棋子已經存在,請重新輸入!");
userXY();
}else {
num[x-1][y-1] = "O";
userId = 0;
printBoard();
}
}
}
//判斷輸贏的方法
public void winOrLose() {
//創建Boolean類型的變量判斷結果
boolean a1,a2,a3,a4,b1,b2,b3,b4;//a和b分別代表一個玩家,1,2,3,4分別代表能贏的4種情況
for (int x = 0; x < num.length-4; x++) {
for (int y = 4; y < num.length; y++) {
//當五顆棋子呈右上左下連着的時候遊戲結束
a4 = num[x][y].equals("X")&&num[x+1][y-1].equals("X")&&num[x+2][y-2].equals("X")&&num[x+3][y-3].equals("X")&&num[x+4][y-4].equals("X");
b4 = num[x][y].equals("X")&&num[x+1][y-1].equals("X")&&num[x+2][y-2].equals("X")&&num[x+3][y-3].equals("X")&&num[x+4][y-4].equals("X");
if (a4==true){
win = true;
System.out.println("遊戲結束!");
System.out.printf("玩家%d贏了",userId);
break;
}else if (b4==true){
win = true;
System.out.println("遊戲結束!");
System.out.printf("玩家%d贏了",userId);
break;
}
}
}
for (int x = 0; x < num.length-4; x++) {
for (int y = 0; y < num.length-4; y++) {
//當五個棋子橫排或者豎排連着的時候遊戲結束
a1 = num[x][y].equals("X")&&num[x][y+1].equals("X")&&num[x][y+2].equals("X")&&num[x][y+3].equals("X")&&num[x][y+4].equals("X");
b1 = num[x][y].equals("O")&&num[x][y+1].equals("O")&&num[x][y+2].equals("O")&&num[x][y+3].equals("O")&&num[x][y+4].equals("O");
a2 = num[x][y].equals("X")&&num[x+1][y].equals("X")&&num[x+2][y].equals("X")&&num[x+3][y].equals("X")&&num[x+4][y].equals("X");
b2 = num[x][y].equals("O")&&num[x+1][y].equals("O")&&num[x+2][y].equals("O")&&num[x+3][y].equals("O")&&num[x+4][y].equals("O");
//當五顆棋子呈左上右下連着的時候遊戲結束
a3 = num[x][y].equals("X")&&num[x+1][y+1].equals("X")&&num[x+2][y+2].equals("X")&&num[x+3][y+3].equals("X")&&num[x+4][y+4].equals("X");
b3 = num[x][y].equals("O")&&num[x+1][y+1].equals("O")&&num[x+2][y+2].equals("O")&&num[x+3][y+3].equals("O")&&num[x+4][y+4].equals("O");
if ((a1==true)||(a2==true)||(a3==true)){
win = true;
System.out.println("遊戲結束!");
System.out.printf("玩家%d贏了",userId);
break;
}else if ((b1==true)||(b2==true)||(b3==true)){
win = true;
System.out.println("遊戲結束!");
System.out.printf("玩家%d贏了",userId);
break;
}
}
}
}
public static void main(String[] args) {
GoBang gb = new GoBang();
gb.board();//初始化二維數組
gb.printBoard();//打印棋盤
do {
gb.userXY();//循環下棋
gb.winOrLose();//判斷輸贏
} while (win==false);//當win變量變爲ture時停止循環
}
}