zoukankan      html  css  js  c++  java
  • 五子棋的斜对角方向上的规则 -- 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;

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

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

         反正这是我想到的最好理解的一种判断方法。(不喜勿喷,本人非计算机专业)   

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

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

  • 相关阅读:
    SpringMVC的拦截器
    artDialog双击会关闭对话框的修改
    artDialog弹出框使用
    解决从本地文件系统上传到HDFS时的权限问题
    JAVA中写时复制(Copy-On-Write)Map实现
    数据结构--堆的实现(下)
    二叉树的创建算法
    Lamport Logical Clock 学习
    动态规划的思想来求解字符串分割问题
    数据结构--图 的JAVA实现(下)
  • 原文地址:https://www.cnblogs.com/lrj1009IRET/p/8492577.html
Copyright © 2011-2022 走看看