此例子为电脑随机测试,用的是全盘扫描,写法简单,效率不高。
import java.util.Scanner;
public class 五子棋 {
static char zi[] = { '●', '○' }; // 黑子玩家 9679; 白字玩家 9675
public static void main(String[] args) {
int arr[][] = new int[11][11];
printf(arr);
Scanner input = new Scanner(System.in);
int x, y;
int flag = 1; // 下次改哪个玩家下
int player; // 当前玩家是谁
do {
player = flag;
switch (flag) {
case 1:
System.out.println("请 1 玩家(黑子)输入x , y坐标,从1开始:");
flag = 2;
break;
case 2:
System.out.println("请 2 玩家(白子)输入x , y坐标,从1开始:");
flag = 1;
break;
}
// x = input.nextInt();
// y = input.nextInt();
x = (int) (Math.random() * 11 + 1);
y = (int) (Math.random() * 11 + 1);
if (x < 1 || y < 1 || x > 11 || y > 11) {
System.out.println("坐标超出区域,请重新确认!");
flag = player;
continue;
} else if (arr[x - 1][y - 1] != 0) {
System.out.println("此位置已有棋子,请重新确认!");
flag = player;
continue;
} else if (arr[x - 1][y - 1] == 0)
arr[x - 1][y - 1] = player;
printf(arr);
} while (!judge(arr, x, y, player));
System.out.println("玩家" + zi[player - 1] + "赢了");
input.close();
return;
}
// 打印棋谱
public static void printf(int a[][]) {
for (int i = 0; i < a[0].length; i++) {
for (int j = 0; j < a[0].length; j++) {
if (a[i][j] != 0)
System.out.print(zi[a[i][j] - 1] + " ");
else
System.out.print("= ");
}
System.out.println();
}
}
// 判断
static boolean judge(int a[][], int x, int y, int player) {
int row = 0, col = 0, left = 0, right = 0;
if (x < 1 || y < 1 || x > 11 || y > 11) // 出界
return false;
for (int i = 0; i < a.length; i++) {
// 判断所在行
if (a[x - 1][i] == player) {
row++;
if (row == 5)
return true;
} else
row = 0;
// 判断列
if (a[i][y - 1] == player) {
col++;
if (col == 5)
return true;
} else
col = 0;
}
// 判断斜线
int sum1 = x - y; // 左斜 (x-1)-(y-1) 差一样
int sum2 = x + y - 2; // 右斜 (x-1)+(y-1) 和一样
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
// 左斜
if ((i - j) == sum1 && a[i][j] == player) {
left++;
if (left == 5)
return true;
} else if ((i - j) == sum1 && a[i][j] != player)
left = 0;
// 右斜
if ((i + j) == sum2 && a[i][j] == player) {
right++;
if (right == 5)
return true;
} else if ((i + j) == sum2 && a[i][j] != player)
right = 0;
}
}
return false;
}
}