1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
| import java.util.Scanner;
public class Gobang{ public static int BOARD_SIZE = 15; public static String[][] board = new String[BOARD_SIZE][BOARD_SIZE]; String black = "●"; String white = "○";
public void initBoard(){ for(int i = 0;i < BOARD_SIZE;i++){ for(int j = 0;j < BOARD_SIZE;j++){ board[i][j] = "╋"; } } }
public void printBoard(){ for(int i = 0;i < BOARD_SIZE;i++){ for(int j = 0;j < BOARD_SIZE;j++){ System.out.println(board[i][j]); } System.out.print("\n"); } }
public static boolean isWin(int x,int y,String color){ if(color.equals("black")){ color = "●"; } if(color.equals("white")){ color = "○"; } for(int i = 0;i < board.length - 5;i++){ if(board[x][i].equals(color) && board[x][i + 1].equals(color) && board[x][i + 2].equals(color) && noard[x][i + 3].equals(color) && board[x][i + 4].equals(color)){ return true; } } for(int i = 0;i < board.length - 5;i++){ if(board[i][y].equals(color) && board[i + 1][y].equals(color) && board[i + 2][y].equals(color) && board[i + 3][y].equals(color) && board[i + 4][y].equals(color)){ return true; } } return false; }
public static boolean isOk(int x,int y){ return board[x - 1][y - 1].equals("╋"); }
public static String computer(String color){ int x = (int)(Math.random() * 14) + 1; int y = (int)(Math.random() * 14) + 1; if(isOk(x,y)){ if(color.equal("black")){ board[x][y] = "●"; }else if (color.equals("white")){ board[x][y] = "○"; } }else{ computer(color); } return "x,y"; } public static void main(String[] args) throws Exception{ Gobang gb = new Gobang(); gb.initBoard(); gb.printBoard(); Scanner input = new Scanner(System.in); System.out.println("你想要选择什么颜色的棋,black或white,请输入:"); String peopleColor = input.next(); if(peopleColor.equals("white")){ System.out.println("您的选择是白棋"); computer("black"); gb.printBoard(); } String inputStr; do{ System.out.println("输入您下棋的坐标,应以x,y的格式:"); inputStr = input.next(); String[] posStrArr = inputStr.split(","); int x = Integer.parseInt(posStrArr[0]); int y = Integer.parseInt(posStrArr[1]); if(!isOk(x,y)){ System.out.println("此处已有棋子,请换位置!"); continue; } int xPos = x; int yPos = y; String comColor = null; if(peopleColor.equals("black")){ gb.board[xPos - 1][yPos - 1] = "●"; comColor = "white"; }else if(peopleColor.equals("white")){ gb.board[xPos - 1][yPos - 1] = "○"; comColor = "black"; } computer(comColor); gb.printBoard(); if(isWin(xPos - 1,yPos -1,peopleColor)){ System.out.println(peopleColor + "获胜!"); break; } if(isWin(xPos - 1,yPos - 1,comColor)){ System.out.println(comColor + "获胜!"); break; } }while(inputStr != null); } }
|
运行以上程序,最终代码如下图所示
跟据图可知,黑点是棋手下的棋,白棋是电脑下的。本次实战我用的是随机生成的两个坐标值来控制电脑下棋,当然也可以添加人工智能来控制下棋。
如果你仔细阅读代码,会发现程序只对横竖是否有五个棋连在一起,进行输赢判断。并且在判断输赢时,既不可以及时地显示某一方玩家赢了(可能导致双方都赢局面的出现),也无法正确的对电脑玩家的输赢判定,因为xPos和yPos中存放的是用户当前的棋子坐标,而不是电脑当前的棋子坐标。完整代码待我日后来改进。