Java程序验证五子棋先手必胜_五子棋的判断输赢规则 -- java编程(简单优化完整版)...
五子棋的判斷輸贏規(guī)則代碼 —— 完整優(yōu)化版
一、前言
之前瀏覽過(guò)很多網(wǎng)上的方法,但總找不到比較完整,也get不到其他大神的思路,就直接畫(huà)圖分析,分析了之后就有了如下的代碼,當(dāng)然還想到更加優(yōu)化的一種,只不過(guò),還在完善中,后續(xù)再發(fā)上來(lái)分享。
二、分析
1、分析圖水平方向,以傳入的 X 坐標(biāo)作為分割線,Y 坐標(biāo)為偏移點(diǎn)左右遍歷。
2、分析圖垂直方向,以傳入的 Y 坐標(biāo)作為分割線,X 坐標(biāo)為偏移點(diǎn)上下遍歷。
3、分析圖左上右下方向,以傳入的 坐標(biāo)點(diǎn)上的與對(duì)角線平行的線作為分割線,按箭頭方向左右遍歷。
4、分析圖右下左上方向,以傳入的 坐標(biāo)點(diǎn)上的與對(duì)角線平行的線作為分割線,按箭頭方向左右遍歷。
請(qǐng)理解分析圖在看代碼-------------------------------------------------------------------------------------------------------------------------------
三、代碼
1、方法說(shuō)明:判斷是否五子連線
2、參數(shù):坐標(biāo):x,y;棋子顏色
3、返回類型:boolean
1 public boolean isWon2(int x, int y, charcolor) {2 int count = 1; //本身一點(diǎn)為 1
3 int posX = 0;4 int posY = 0;5 /**判斷水平方向上的勝負(fù)6 /* 將水平方向以傳入的點(diǎn)x上的y軸作為分隔線分為兩部分7 * 先向左邊遍歷,判斷到的相同的連續(xù)的點(diǎn) 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 /**判斷垂直方向上的勝負(fù)30 /* 將垂直方向以傳入的點(diǎn)y上的x軸作為分隔線分為兩部分31 * 先向上遍歷,判斷到的相同的連續(xù)的點(diǎn) 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 /**判斷左上右下方向上的勝負(fù)54 * 以坐標(biāo)點(diǎn)為分割線,將棋盤(pán)分為左右兩個(gè)等腰三角形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 /**判斷右下左下方向上的勝負(fù)80 * 以坐標(biāo)點(diǎn)為分割線,將棋盤(pán)分為左右兩個(gè)等腰三角形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 }
四、后續(xù)
1、這個(gè)算法原理也是很簡(jiǎn)單的,不過(guò)比全部遍歷法要優(yōu)化很多,而且規(guī)范
2、后續(xù)有空我會(huì)把我想到的一個(gè)最優(yōu)化的算法分析圖放上來(lái),判斷的運(yùn)行時(shí)間更短。
3、喜歡點(diǎn)個(gè)推薦唄,有錯(cuò)誤還望各位指出,本人新手,謝謝!
總結(jié)
以上是生活随笔為你收集整理的Java程序验证五子棋先手必胜_五子棋的判断输赢规则 -- java编程(简单优化完整版)...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: IDEA2020版本下载安装教程
- 下一篇: rtthread_scons简介