遍历点击五子棋棋盘的所有落子点
来源:互联网 发布:程序员职业认知报告 编辑:程序博客网 时间: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); }
运行结果:
- 遍历点击五子棋棋盘的所有落子点
- 五子棋落子游戏
- Android五子棋棋盘的绘制
- Android 画五子棋的棋盘
- 五子棋的棋盘Android版
- Android五子棋棋盘的绘制
- Android五子棋棋盘的绘制
- Java实现一个简单的两人五子棋游戏(四) 落子动作的实现
- 五子棋游戏-2(落子与悔棋)
- 一种五子棋棋盘的数组表示
- 黑白棋的落子
- java-----五子棋小游戏(二)-----黑白棋落子制作
- 图论之遍历所有点的最小距离
- OpenCV 遍历两点直线上的所有点
- 图的遍历算法-马遍历棋盘
- 图的遍历算法-马遍历棋盘
- 五子棋游戏-1(绘制棋盘)
- Qt中绘制五子棋棋盘
- 学习网站
- Extjs 各种提示功能的汇总--(详细)
- 颜色渐变
- jsp和struts action的交互
- 防止$冲突的方法jQuery.noConflict()
- 遍历点击五子棋棋盘的所有落子点
- ubuntu 12.04 codeblocks undefined reference to ‘pthread_create'解决方法
- linux配置JDK环境
- 背景建模之vibe学习
- linux内置的对变量操作(长度,查找,替换)介绍
- Difference between 2>&-, 2>/dev/null, |&, &>/dev/null, >/dev/null, 2>&1
- CSS实现table td中文字的省略与显示
- Chapter02_字符和字符串处理
- LeetCode Search in Rotated Sorted Array