五子棋判断输赢规则 --- 斜对角线方向上
一、左上右下方向上
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;
因此,外部循环就是遍历斜线的条数。
其他的根据第二个代码去理解就行了。
反正这是我想到的最好理解的一种判断方法。(不喜勿喷,本人非计算机专业)
---------------------------------------------------------------------------------------------------------------
有空我再编辑优化版的。转发请注原文链接,谢谢!