五子棋的斜對角方向上的規則 -- java編程(簡單粗暴版)


五子棋判斷輸贏規則 --- 斜對角線方向上 

 

  一、左上右下方向上

     1、分析圖

    

     2、代碼

 1 /**判斷左上右下方向上是否有連續五顆相同顏色的棋子
 2          * 全部遍歷法
 3          */
 4         int loop = 0;
 5         boolean istrue = false;
 6         for(loop = 0, posX = 1, posY = 12; loop < 21; loop++) {
 7             if (posY > 1) {
 8                 posY --;
 9             }else if (posX<15) {
10                 posX++;
11             }
12             int bufferX = posX;
13             int bufferY = posY;
14             for(;posY <= 15 && posX <= 15; posX++, posY++) {
15                 if (board[posX][posY] == color) {
16                     count++;
17                     if (count >= 5) {
18                         istrue = true;
19                         return true;
20                         
21                     }
22                 }else {
23                     count = 0;
24                 }
25             }
26             if (istrue) {
27                 break;
28             }else {
29                 posX = bufferX;
30                 posY = bufferY;
31             }
32         }

 

   二、左下右上方向上

     1、分析圖

 

       2、代碼

 

 1     /**判斷左下右上方向上是否有連續五顆相同顏色的棋子
 2          *         全部遍歷法
 3          */
 4         for(loop = 0, posX=1, posY = 5;loop < 21; loop++) {
 5             //用於遍歷下一斜行
 6             if (posY < 15) {
 7                 posY ++;
 8             }else if (posX < 15) {
 9                 posX++;
10             }
11             //用於保存遍歷開始的起始的值
12             int bufferX = posX;
13             int bufferY = posY;
14             //開始遍歷每一斜行
15             for(;posY > 1 && posX <= 15; posX++, posY--) {
16                 if (board[posX][posY] == color) {
17                     count++;
18                     if (count >= 5) {
19                         istrue = true;
20                         return true;  //跳出內循環
21                         
22                     }
23                 }else {
24                     count = 0;
25                 }
26             }
27             //跳出循環
28             if (istrue) {
29                 break;
30             }else {
31                 posX = bufferX;
32                 posY = bufferY;
33             }
34         }

   后記:

  本來想簡單粗暴的直接po上網,但限制了字數發不了,容我多說幾句,就當解說好了。

  解說:

    其實這個遍歷規則是按照15*15的棋盤來做的,所以如果是不同型號的棋盤,使用時請改動上面的(loop<21)還有各個(跟15比較的數字)的設定。

    為什么是數字21?因為斜線上長度小於5的斜線去除后,即15+15-1-(4+4)[小於5的斜線] == 21;

       所以棋盤若為30*30,即為30+30-1-(4+4)=31;

       因此,外部循環就是遍歷斜線的條數。

     其他的根據第二個代碼去理解就行了。

     反正這是我想到的最好理解的一種判斷方法。(不喜勿噴,本人非計算機專業)   

---------------------------------------------------------------------------------------------------------------

  有空我再編輯優化版的。轉發請注原文鏈接,謝謝!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM