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