日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java程序验证五子棋先手必胜_五子棋的判断输赢规则 -- java编程(简单优化完整版)...

發(fā)布時(shí)間:2024/3/26 java 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java程序验证五子棋先手必胜_五子棋的判断输赢规则 -- java编程(简单优化完整版)... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

五子棋的判斷輸贏規(guī)則代碼 —— 完整優(yōu)化版

一、前言

之前瀏覽過很多網(wǎng)上的方法,但總找不到比較完整,也get不到其他大神的思路,就直接畫圖分析,分析了之后就有了如下的代碼,當(dāng)然還想到更加優(yōu)化的一種,只不過,還在完善中,后續(xù)再發(fā)上來分享。

二、分析

1、分析圖水平方向,以傳入的 X 坐標(biāo)作為分割線,Y 坐標(biāo)為偏移點(diǎn)左右遍歷。

2、分析圖垂直方向,以傳入的 Y 坐標(biāo)作為分割線,X 坐標(biāo)為偏移點(diǎn)上下遍歷。

3、分析圖左上右下方向,以傳入的 坐標(biāo)點(diǎn)上的與對角線平行的線作為分割線,按箭頭方向左右遍歷。

4、分析圖右下左上方向,以傳入的 坐標(biāo)點(diǎn)上的與對角線平行的線作為分割線,按箭頭方向左右遍歷。

請理解分析圖在看代碼-------------------------------------------------------------------------------------------------------------------------------

三、代碼

1、方法說明:判斷是否五子連線

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)為分割線,將棋盤分為左右兩個(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)為分割線,將棋盤分為左右兩個(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è)算法原理也是很簡單的,不過比全部遍歷法要優(yōu)化很多,而且規(guī)范

2、后續(xù)有空我會把我想到的一個(gè)最優(yōu)化的算法分析圖放上來,判斷的運(yùn)行時(shí)間更短。

3、喜歡點(diǎn)個(gè)推薦唄,有錯(cuò)誤還望各位指出,本人新手,謝謝!

總結(jié)

以上是生活随笔為你收集整理的Java程序验证五子棋先手必胜_五子棋的判断输赢规则 -- java编程(简单优化完整版)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。