1 /* 2 (1)绘制棋盘 - 写一个成员方法实现 3 4 (2)提示黑方和白方分别下棋并重新绘制棋盘 - 写一个成员方法实现。 5 6 (3)每当一方下棋后判断是否获胜 - 写一个成员方法实现。 7 8 (4)提示: 采用二维数组来模拟并描述棋盘,棋盘如下: 9 */ 10 11 package stage1_module2.homework; 12 13 import java.util.Scanner; 14 import java.util.Arrays; 15 16 public class FiveInARowGame { 17 18 // 1. 绘制一个五子棋棋盘 19 public String[][] drawChessBoard(){ 20 21 String[][] chessBoard = new String[17][17]; 22 23 for(int i = 0; i < chessBoard.length; i++) { 24 for(int j = 0; j < chessBoard.length; j++) { 25 if(i == 0){ 26 chessBoard[i][j] = " " + Long.toHexString(j-1) + " "; 27 } else if(j == 0){ 28 chessBoard[i][j] = Long.toHexString(i-1); 29 } 30 else { 31 chessBoard[i][j] = " + "; 32 } 33 chessBoard[0][0] = " "; 34 System.out.print(chessBoard[i][j] + " "); 35 } 36 System.out.println(); 37 } 38 return chessBoard; 39 40 } 41 42 // 2. 提示黑方白方下棋 43 public void playChess(){ 44 45 boolean flag = true; 46 String side = "black"; 47 48 String[][] chessBoard = drawChessBoard(); 49 50 while ( flag ){ 51 52 System.out.println("请" + side + "落子(按照 行数 列数 的格式), eg: 7 8"); 53 System.out.println("PS:1 <= 行数 <= 16 / 1 <= 列数 <= 16 "); 54 Scanner sc = new Scanner(System.in); 55 56 int row = sc.nextInt(); 57 int column = sc.nextInt(); 58 59 if (chessBoard[row][column].equals(" + ")) { 60 chessBoard[row][column] = side; 61 for (int i = 0; i < chessBoard.length; i++){ 62 for (int j = 0; j < chessBoard[i].length; j++){ 63 System.out.print 64 (chessBoard[i][j]); 65 } 66 System.out.println(); 67 } 68 69 if (judge(chessBoard, side).equals(side + " Winning")){ 70 System.out.println("恭喜" + side + "方赢得胜利"); 71 flag = false; 72 }else{ 73 if (side.equals("black")){ 74 side = " red "; 75 }else{ 76 side = "black"; 77 } 78 } 79 } else{ 80 System.out.println("请重新输入!"); 81 } 82 83 } 84 } 85 86 // 3. 判断输赢 87 public String judge(String[][] chessBoard, String side){ 88 89 // 1.判断横向是否连成五子 90 for (int i = 1; i < chessBoard.length; i++) { 91 int count = 0; 92 for (int j = 1; j < chessBoard.length-1 ; j++) { 93 boolean horizontal = chessBoard[i][j].equals(chessBoard[i][j + 1]) 94 && chessBoard[i][j].equals(side); 95 if ( horizontal ) { 96 count++; 97 if (count == 4) { 98 System.out.println(side + " Winning"); 99 return side + " Winning"; 100 } 101 } else { 102 count = 0; 103 } 104 } 105 } 106 107 // 2.判断纵向是否连成五子 108 for (int j = 1; j < chessBoard.length; j++) { 109 int count = 0; 110 for (int i = 1; i < chessBoard.length-1 ; i++) { 111 // 2.判断纵向是否连成五子 112 boolean vertical = chessBoard[i][j].equals(chessBoard[i + 1][j]) 113 && chessBoard[i][j].equals(side); 114 if ( vertical ) { 115 count++; 116 if (count == 4) { 117 System.out.println(side + " Winning"); 118 return side + " Winning"; 119 } 120 } else { 121 count = 0; 122 } 123 } 124 } 125 126 // 3.判断对角线是否连成五子(左上↖️️到右下↘️️) 127 int cnt_1 = 2*(chessBoard.length-1)-9; 128 for (int k = 0; k < cnt_1; k++){ 129 int count = 0; 130 for ( int i = ((k <= (cnt_1/2)) ? 1 : (k-10)) ; 131 i < ( (k <= cnt_1/2) ? k-(cnt_1/2)+chessBoard.length : (cnt_1/2)-k+chessBoard.length) - 1 ; 132 i++){ 133 boolean diagLeftToRight = 134 chessBoard[i][chessBoard.length-k-6+i].equals(chessBoard[i+1][chessBoard.length-k-6+i+1]) 135 && chessBoard[i][chessBoard.length-k-6+i].equals(side); 136 if ( diagLeftToRight ) { 137 count++; 138 if (count == 4) { 139 System.out.println(side + " Winning"); 140 return side + " Winning"; 141 } 142 } else { 143 count = 0; 144 } 145 146 } 147 } 148 149 // 4.判断对角线是否连成五子(右上↗️到左下↙️) 150 int cnt_2 = 2*(chessBoard.length-1)-9; 151 for (int k = 0; k < cnt_2; k++){ 152 int count = 0; 153 for ( int i = ((k <= (cnt_2/2)) ? 1 : (k-10)) ; 154 i < ( (k <= cnt_2/2) ? k-(cnt_2/2)+chessBoard.length : (cnt_2/2)-k+chessBoard.length) - 1; 155 i++){ 156 boolean diagRightToLeft = 157 chessBoard[i][chessBoard.length+k-11-i].equals(chessBoard[i+1][chessBoard.length+k-11-i-1]) 158 && chessBoard[i][chessBoard.length+k-11-i].equals(side); 159 if ( diagRightToLeft ) { 160 count++; 161 // System.out.print("inner count :" + count + " "); 162 if (count == 4) { 163 System.out.println(side + " Winning"); 164 return side + " Winning"; 165 } 166 } else { 167 count = 0; 168 // System.out.print("count:" + count + " "); 169 } 170 } 171 } 172 173 return "go on"; 174 } 175 }
1 package stage1_module2.homework; 2 3 public class FiveARowGameTest { 4 5 public static void main(String[] args){ 6 7 FiveInARowGame f1 = new FiveInARowGame(); 8 f1.drawChessBoard(); 9 f1.playChess(); 10 } 11 }