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

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

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

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

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

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

  • 相关阅读:
    Jenkins+Ansible+Gitlab自动化部署三剑客(四)--Jenkins Linux shell集成
    Jenkins+Ansible+Gitlab自动化部署三剑客(三)--Jenkins
    腾讯云从业者线上课程(一)--云计算技术架构
    腾讯云从业者线上课程(一)--云计算发展历史
    nmcli 静态方式添加IP地址
    nmcli
    systemctl 控制单元
    ansible组件 Ad-Hoc
    ansible 定义主机用户和密码
    ansible 主机清单 /etc/ansible/hosts
  • 原文地址:https://www.cnblogs.com/lrj1009IRET/p/8492577.html
Copyright © 2020-2023  润新知