五子棋的斜对角方向上的规则 -- 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;

       因此,外部循环就是遍历斜线的条数。

     其他的根据第二个代码去理解就行了。

     反正这是我想到的最好理解的一种判断方法。

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

  有空我再编辑优化版的。转发请注原文链接,谢谢!

 

posted @ 2018-03-02 12:22  弹琴不谈情  阅读(1996)  评论(0编辑  收藏  举报