Java程序验证五子棋先手必胜_五子棋的判断输赢规则 -- java编程(简单优化完整版)...
五子棋的判斷輸贏規則代碼 —— 完整優化版
一、前言
之前瀏覽過很多網上的方法,但總找不到比較完整,也get不到其他大神的思路,就直接畫圖分析,分析了之后就有了如下的代碼,當然還想到更加優化的一種,只不過,還在完善中,后續再發上來分享。
二、分析
1、分析圖水平方向,以傳入的 X 坐標作為分割線,Y 坐標為偏移點左右遍歷。
2、分析圖垂直方向,以傳入的 Y 坐標作為分割線,X 坐標為偏移點上下遍歷。
3、分析圖左上右下方向,以傳入的 坐標點上的與對角線平行的線作為分割線,按箭頭方向左右遍歷。
4、分析圖右下左上方向,以傳入的 坐標點上的與對角線平行的線作為分割線,按箭頭方向左右遍歷。
請理解分析圖在看代碼-------------------------------------------------------------------------------------------------------------------------------
三、代碼
1、方法說明:判斷是否五子連線
2、參數:坐標:x,y;棋子顏色
3、返回類型:boolean
1 public boolean isWon2(int x, int y, charcolor) {2 int count = 1; //本身一點為 1
3 int posX = 0;4 int posY = 0;5 /**判斷水平方向上的勝負6 /* 將水平方向以傳入的點x上的y軸作為分隔線分為兩部分7 * 先向左邊遍歷,判斷到的相同的連續的點 count++8 */
9 for(posX = x - 1; posX > 0 ; posX--) {10 if (board[posX][y] ==color) {11 count++;12 if (count >= 5) {13 return true;14 }15 }else{16 break;17 }18 } //向右邊遍歷
19 for(posX = x + 1; posX <= 15; posX++) {20 if (board[posX][y] ==color) {21 count++;22 if (count >= 5) {23 return true;24 }25 }else{26 break;27 }28 }29 /**判斷垂直方向上的勝負30 /* 將垂直方向以傳入的點y上的x軸作為分隔線分為兩部分31 * 先向上遍歷,判斷到的相同的連續的點 count++32 */
33 for(posY = y - 1; posY > 0; posY--) {34 if (board[x][posY] ==color) {35 count++;36 if (count >= 5) {37 return true;38 }39 }else{40 break;41 }42 }//向下遍歷
43 for(posY = y + 1; posY <= 15; posY++) {44 if (board[x][posY] ==color) {45 count++;46 if (count >= 5) {47 return true;48 }49 }else{50 break;51 }52 }53 /**判斷左上右下方向上的勝負54 * 以坐標點為分割線,將棋盤分為左右兩個等腰三角形55 * 先判斷左邊的56 */
57 for(posX = x - 1, posY = y - 1; posX > 0 && posY > 0; posX--, posY--) {58 if (board[posX][posY] ==color) {59 count++;60 if (count >= 5) {61 count = 1;62 return true;63 }64 }else{65 break;66 }67 }//判斷右邊的
68 for(posX = x + 1, posY = y + 1; posX <= 15 && posY <= 15; posX++, posY++) {69 if (board[posX][posY] ==color) {70 count++;71 if (count >= 5) {72 count = 1;73 return true;74 }75 }else{76 break;77 }78 }79 /**判斷右下左下方向上的勝負80 * 以坐標點為分割線,將棋盤分為左右兩個等腰三角形81 * 先判斷左邊的82 */
83 for(posX = x + 1, posY = y - 1; posX <= 15 && posY > 0; posX++, posY--) {84 if (board[posX][posY] ==color) {85 count++;86 if (count >= 5) {87 return true;88 }89 }else{90 break;91 }92 }//判斷右邊的
93 for(posX = x - 1, posY = y + 1; posX > 0 && posY <= 15; posX--, posY++) {94 if (board[posX][posY] ==color) {95 count++;96 if (count >= 5) {97 return true;98 }99 }else{100 break;101 }102 }103 return false;104 }
四、后續
1、這個算法原理也是很簡單的,不過比全部遍歷法要優化很多,而且規范
2、后續有空我會把我想到的一個最優化的算法分析圖放上來,判斷的運行時間更短。
3、喜歡點個推薦唄,有錯誤還望各位指出,本人新手,謝謝!
總結
以上是生活随笔為你收集整理的Java程序验证五子棋先手必胜_五子棋的判断输赢规则 -- java编程(简单优化完整版)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IDEA2020版本下载安装教程
- 下一篇: 深深的码丨Java ArrayList