package gomoku; import java.util.Scanner; public class Gomoku { static String white = "☆"; static String black = "★"; static String[][] qp = new String[15][15]; static String[] num = {"⒈", "⒉", "⒊", "⒋", "⒌", "⒍", "⒎", "⒏", "⒐", "⒑", "⒒", "⒓", "⒔", "⒕", "⒖"}; static String line = "十"; static boolean flag = true; //启动五子棋游戏 public static void start() { init(); print(); playChess(); } //初始化棋盘 public static void init() { for (int i = 0; i < qp.length - 1; i++) { for (int j = 0; j < qp[i].length - 1; j++) { qp[i][j] = line; } } for (int i = 0; i < qp.length; i++) { qp[i][qp.length - 1] = num[i]; } for (int i = 0; i < qp.length; i++) { qp[qp.length - 1][i] = num[i]; } } //打印棋盘 public static void print() { for (int i = 0; i < qp.length; i++) { for (int j = 0; j < qp[i].length; j++) { System.out.print(qp[i][j]); } System.out.println(); } } //下棋 public static void playChess() { boolean stamp = true; while (flag) { if (stamp) { dropBlack(); stamp = false; } else { dropWhite(); stamp = true; } } } //落子黑 public static void dropBlack() { Scanner scanner = new Scanner(System.in); System.out.println("请下黑子"); System.out.println("请输入行:"); int line = scanner.nextInt();//行 System.out.println("请输入列:"); int row = scanner.nextInt();//列 //判断棋子是否越界和是否重复 if (slopOver(line, row)) { dropBlack(); } else { qp[line - 1][row - 1] = black; print(); //判断输赢 if (bunko(line - 1, row - 1, black)) { System.out.println("黑棋获胜"); flag = false; } } } //落子白 public static void dropWhite() { Scanner scanner = new Scanner(System.in); System.out.println("请下白子"); System.out.println("请输入行:"); int line = scanner.nextInt();//行 System.out.println("请输入列:"); int row = scanner.nextInt();//列 //判断棋子是否越界和是否重复 if (slopOver(line, row)) { dropWhite(); } else { qp[line - 1][row - 1] = white; print(); //判断输赢 if (bunko(line - 1, row - 1, white)) { System.out.println("白棋获胜"); flag=false; } } } //判断棋子是否越界,是否重复 public static boolean slopOver(int line, int row) { boolean back = false; //判断棋子是否越界 if (line > qp.length - 1 || row > qp.length - 1) { System.out.println("输入错误"); System.out.println("请重新输入!"); back = true; } else { //判断棋子是否重复 if (qp[line - 1][row - 1] == white || qp[line - 1][row - 1] == black) { System.out.println("该位置以有棋子,请重新输入"); back = true; } else { back = false; } } return back; } //判断输赢 public static boolean bunko(int line, int row, String chess) { //左右判断输赢 int sum = 1; //向左判断 for (int j = row - 1; j >= 0; j--) { if (qp[line ][j].equals(chess)) { sum++; } else { break; } } if (sum >= 5) { return true; } //向右判断 for (int j = row + 1; j < qp.length; j++) { if (qp[line][j].equals(chess)) { sum++; } else { break; } } if (sum >= 5) { return true; } //上下判断输赢 sum = 1; //向上判断输赢 for (int i = line - 1; i >= 0; i--) { if (qp[i][row].equals(chess)) { sum++; } else { break; } } if (sum >= 5) { return true; } //向下判断输赢 for (int i = line + 1; i < qp.length; i++) { if (qp[i][row].equals(chess)) { sum++; } else { break; } } if (sum >= 5) { return true; } //左上右下判断输赢 sum = 1; //左上判断输赢 for (int i = line - 1, j = row - 1; i >= 0 && j >= 0; i--, j--) { if (qp[i][j].equals(chess)) { sum++; } else { break; } } if (sum >= 5) { return true; } //右下判断输赢 for (int i = line + 1, j = row + 1; i < qp.length && j < qp.length; i++, j++) { if (qp[i][j].equals(chess)) { sum++; } else { break; } } if (sum >= 5) { return true; } //右上左下判断输赢 sum = 1; //右上判断输赢 for (int i = line - 1, j = row + 1; i >= 0 && j < qp.length; i--, j++) { if (qp[i][j].equals(chess)) { sum++; } else { break; } } if (sum >= 5) { return true; } //左下判断输赢 for (int i = line + 1, j = row - 1; i < qp.length && j >=0; i++, j--) { if (qp[i][j].equals(chess)) { sum++; } else { break; } } if (sum >= 5) { return true; } return false; } }
五子棋!!!
最新推荐文章于 2024-10-10 15:47:02 发布