import java.util.Scanner;
public class Game {
static boolean arr[] = new boolean[10];// 总体被占用的位置
static boolean arr1[] = new boolean[10];// 先手被占用的位置
static boolean arr2[] = new boolean[10];// 后手被占用的位置
public static void main(String[] args) {
Game game = new Game();
game.view();
int j = 1;
while (true) {
if ((j % 2) == 1) {// 玩家1的回合
game.play(1);
game.view();
if (game.success(arr1)) {
System.out.println("玩家1胜利");
return;
}
} else {// 2
game.play(2);
game.view();
if (game.success(arr2)) {
System.out.println("玩家2胜利");
return;
}
}
j++;
}
}
// 下棋的方法
void play(int player) {
System.out.println("玩家" + player + "请输入你要下棋的位置:");
Scanner scanner = new Scanner(System.in);
int n,j=0;
// 判断输入是否合法
do {if(j>0)
System.out.println("非法输入请重新输入:");
n = scanner.nextInt();j++;
} while (arr[n] || n < 1 || n > 9);
arr[n] = true;
if (player == 1) {// 玩家一的回合
arr1[n] = true;
} else {// 玩家二的回合
arr2[n] = true;
}
}
// 生成界面的方法
void view() {
Game g = new Game();
for (int i = 1; i <= 9; i++) {
g.view1(i);
if (i % 3 == 0) {
System.out.println();
} else {
System.out.print("|");
}
}
}
void view1(int x) {
if (arr1[x] || arr2[x]) {
if (arr1[x]) {
System.out.print("o");
} else {
System.out.print("x");
}
} else {
System.out.print(x);
}
}
// 判断数组是否构成成功条件的方法
boolean success(boolean[] a) {
// 12347有其一是成功的先决条件
for (int i : new int[] { 1, 2, 3, 4, 7 }) {
if (a[i]) {
switch (i) {
case 1:
if ((a[4] && a[7]) || (a[5] && a[9]) || (a[2] && a[3])) {
return true;
}
break;
case 2:
if ((a[1] && a[3]) || (a[5] && a[8])) {
return true;
}
break;
case 3:
if ((a[5] && a[7]) || (a[1] && a[2]) || (a[6] && a[9])) {
return true;
}
break;
case 4:
if ((a[5] && a[6]) || (a[1] && a[7])) {
return true;
}
break;
case 7:
if ((a[1] && a[4]) || (a[3] && a[5]) || (a[8] && a[9])) {
return true;
}
break;
}
}
}
return false;
}
}
|