遍历点击五子棋棋盘的所有落子点

来源:互联网 发布:程序员职业认知报告 编辑:程序博客网 时间:2024/04/30 06:53

假设棋盘是13X13 布局

                                                       图1


我想一次性点击所有的坐标点,用来测试落子点(有效点击范围)的功能是否正常。

最直接的想法是这样:

var xInit=22;//棋盘左上角第一个落子点的x坐标var yInit=116;//棋盘左上角第一个落子点y坐标var xInc=35;//落子点坐标之间的横向最短间隔var yInc=35;//落子点坐标之间的纵向最短间隔var tempx;var tempy;for(i=0;i<13;i++){for(j=0;j<13;i++){tempx=xInit+i*xTnc;tempy=yInit+j*yTnc;NGLogger.Info("点击坐标("+tempx+","+tempy+")");// device0.GUICOMMON_TouchScreen(tempx,tempy);}}

但是这样问题会很明显。,当点击到第五列第一个点的时候,游戏成功。无法继续进行点击操作...

                                                图2

这种点击的方式肯定会有问题,想到的另一种方式:

                                      图3

按照 区域 1、2、3、4、5 以及箭头方向去落子,平局情形会必现。

不过这种点击方式实现起来有点困难,不知道大家有没有更好的方法?

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

---------------------------------------平局产生方法扩展---------------------------------

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

 研究了一下发现:只要按照一定的落子列序,以一定的周期去落子就很容易构造平局的情况。

相应的扩展周期为2*1、2*2、2*3、2*5

2*1的情况:图1的情况 很明显这种方法不行

2*5的情况:那不就是五子棋了么 排除

2*2的情况:

                                          图4

实验证明是可行的。

落子列序为:

1,3,2,4

5,7,6,8

9,11,10,12

13

周期:4

2*3的情况:

                                            图5

实验证明是依旧可行的。

落子列序为:

1,4,2,5,3,6

7,10,8,11,9,12

13

周期:6

 

根据不完全归纳产生的结果,可以粗略推算出如下规律:

1.这种五子棋平局法可以延伸到 N 阶(N为奇数并且不小于5)的情形都适用。

2.周期是 2*I (I=2,3,4)。

3.点击列序方法产生的方法之一:

  • A:initRow++,initRow+T/2   // intiRow 初始列 每次递增1,T为周期数

  • B:if(initRow%(T/2))==0 {initRow=initRow+T/2+1 }//如果已经产生至少一个周期数的序列,改变 intiRow 的值

  • C:if(initRow==GoBangMultiplicity) {print("最后一个列序号产生")}//GoBangMultiplicity是五子棋棋盘的阶数 

    依照 B 、C 的约束, 按照 A 的方式依次产生成对列序号 直到产生最后一列的序号。

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

---------------------------------------JS 实现平局-----------------------------------------

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

在上文中,平局列序的产生的方法已经叙述完毕。规律较为明显,但是如何利用这个列序呢?

想了很多途径,最后想到一个比较傻瓜化的方法。

可以将点击一列的坐标点这个过程抽象为一个统一的方法。我只要传递列序号进去,不就可以实现按照列序号点击坐标进而产生平局了吗?

主要代码:

/// <summary>/// 根据初始坐标点和列数连续点击一列的坐标/// </summary>/// <param name="initx">初始落子点的x坐标</param>/// <param name="inity">初始落子点的y坐标</param>/// <param name="xInc">x轴方向增量</param>/// <param name="yInc">y轴方向增量</param>/// <param name="width">棋盘阶数</param>/// <param name="rownums">落子的列数序列,从1开始</param>function  TouchScreenByRowNumber(initx,inity,xInc,yInc,width,rownums){        var xInit=initx;//棋盘第一点的x坐标    var yInit=inity;//棋盘第一点的y坐标    var tempx;//临时存放x坐标值    var tempy;//临时存放y坐标值        //拒绝无效的棋盘值    if(width%2==0||width<5){        NGLogger.Info("无效的棋盘长度")            return;    }    //拒绝无效的点击序列    if(typeof(rownums) =    = "object")    {        if(rownums.length==0||rownums.length>width)        {            NGLogger.Info("无效的点击序列");            return;        }    }        for(i=0;i<rownums.length;i++)//偏移列序号    {        for(j=0;j<width;j++)//点击一列的坐标        {            tempx=initx+(rownums[i]-1)*xInc;//x坐标随初始列数不同而变化            tempy=inity+j*yInc;//偏移y坐标            NGLogger.Info("点击坐标("+tempx+","+tempy+")");            //device0.GUICOMMON_TouchScreen(tempx,tempy);        }    }}


测试一下:

function AppMain(){     var arrays=new Array("1","3","2","4","5","7","6","8","9","11","10","12","13");// 13X13 的棋盘    TouchScreenByRowNumber(22,116,35,35,13,arrays);    }

运行结果:

 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 qq不能点赞了怎么办 快递发货地址写错了怎么办 订的海鲜不发货怎么办 拉人进群频繁了怎么办 qq群邀请过于频繁怎么办 qq一直被拉进群怎么办 qq号被冻结解封不了怎么办 2018qq自动进群怎么办 手机视频传到电脑倒着怎么办 qq群图片过期了怎么办 q号加不了群怎么办 q号加不了好友怎么办 q号被冻结了怎么办 qq群200人满了怎么办 畅聊之火消失了怎么办 手机版WPS打开文档空白怎么办 空白表格怎么打印不出来怎么办 微信朋友太少怎么办 js和CSS加载失败怎么办 熹妃q传密码忘了怎么办 苹果手机淘宝占用空间大怎么办 苹果相册储存空间不足怎么办 企业网银里的收款名单丢失怎么办 发邮件发错了怎么办 qq群成员满500了怎么办 为什么qq群查不到信息怎么办 tiger杯子油漆划掉了怎么办 手被油漆弄到了怎么办 被油漆弄到衣服怎么办 QQ发表情成问号怎么办 qq登不了微信怎么办 qq不能登录微信怎么办 qq号一年没用了怎么办 微信里别人可以看到我手机号怎么办 用手机号注册的微信换号后怎么办 微信群推送名片很多人加怎么办 志高制冷显示ff怎么办 百度账号手机号换了怎么办 别人盗取手机号的通讯录该怎么办 58简历看不到真实号码怎么办 淘宝更换手机号码说已注册怎么办