GoBangDemo.java package cn.fyx;public class GoBangDemo {public static void main(String[] args) {// 创建棋盘对象,并初次打印棋盘Board b = new Board();System.out.println("初始化棋盘如下:");b.printBoard();Player p1 = new P
package cn.fyx;
public class GoBangDemo {
public static void main(String[] args) {
// 创建棋盘对象,并初次打印棋盘
Board b = new Board();
System.out.println("初始化棋盘如下:");
b.printBoard();
Player p1 = new Player("X ");
Player p2 = new Player("O ");
// 开始下棋
while (true) {
System.out.println("选手1下棋:");
p1.put();
b.printBoard();
if (b.win(p1.qizi)) {
System.out.println("选手1赢了");
break;
}
System.out.println("选手2下棋:");
p2.put();
b.printBoard();
if (b.win(p2.qizi)) {
System.out.println("选手2赢了");
break;
}
}
}
}
Board.java
package cn.fyx;
public class Board {
public static final int boardSize = 13;
static String[][] arr = new String[boardSize][boardSize];
// 构造棋盘
Board() {
for (int i = 0; i < boardSize; i++) {
for (int j = 0; j < boardSize; j++) {
arr[i][j] = "+ ";
}
}
}
// 打印一次棋盘的方法
public void printBoard() {
for (int i = 0; i < boardSize; i++) {
for (int j = 0; j < boardSize; j++) {
System.out.print(arr[i][j]);
}
System.out.println();
}
}
// 判断是否重复落子的方法
public static boolean againPut(int x, int y) {
if (arr[x][y].equals("+ ")) {
return true;
} else {
return false;
}
}
// 判断一次是否有选手赢得了比赛
public boolean win(String qizi) {
boolean flag = false;
// 右向扫描,是否连成五个
for (int i = 0; i < boardSize; i++) {
for (int j = 0; j <= boardSize - 5; j++) {
if (arr[i][j].equals(qizi) && arr[i][j + 1].equals(qizi) && arr[i][j + 2].equals(qizi)
&& arr[i][j + 3].equals(qizi) && arr[i][j + 4].equals(qizi)) {
flag = true;
}
}
}
// 下侧扫描,是否连成五个
for (int i = 0; i <= boardSize - 5; i++) {
for (int j = 0; j < boardSize; j++) {
if (arr[i][j].equals(qizi) && arr[i + 1][j].equals(qizi) && arr[i + 2][j].equals(qizi)
&& arr[i + 3][j].equals(qizi) && arr[i + 4][j].equals(qizi)) {
flag = true;
}
}
}
// 左下侧扫描,是否连成五个
for (int i = 0; i <= boardSize - 5; i++) {
for (int j = 4; j < boardSize; j++) {
if (arr[i][j].equals(qizi) && arr[i + 1][j - 1].equals(qizi) && arr[i + 2][j - 2].equals(qizi)
&& arr[i + 3][j - 3].equals(qizi) && arr[i + 4][j - 4].equals(qizi)) {
flag = true;
}
}
}
// 右下侧扫描,是否连成五个
for (int i = 0; i <= boardSize - 5; i++) {
for (int j = 0; j <= boardSize - 5; j++) {
if (arr[i][j].equals(qizi) && arr[i + 1][j + 1].equals(qizi) && arr[i + 2][j + 2].equals(qizi)
&& arr[i + 3][j + 3].equals(qizi) && arr[i + 4][j + 4].equals(qizi)) {
flag = true;
}
}
}
return flag;
}
}
Player.java
package cn.fyx;
import java.util.Scanner;
public class Player {
// 不同的选手,选择不同的棋子*或O
String qizi;
// 选手输入的棋子的坐标
private int x;
private int y;
Player() {
};
Player(String qizi) {
this.qizi = qizi;
}
Scanner sc = new Scanner(System.in);
// 选手下棋方法
public void put() {
System.out.println("请落子(x,y)(0-12):");
while (true) {
// 接收选手所下的棋子的坐标
x = sc.nextInt();
y = sc.nextInt();
// 判断是否重复落子,然后下到棋盘上
if (Board.againPut(x, y)) {
Board.arr[x][y] = qizi;
break;
} else {
System.out.println("您输入的落子坐标已落了棋子,请重下(x,y)(0-12):");
continue;
}
}
}
}
