银行 社区服务 每日签到 会员排行 网站地图
  • 1809阅读
  • 8回复

浅谈无法扫描棋盘之攻关技术思路贴中转点

楼层直达
级别: 一级士官
[棋中红钻1级]发帖数量≥10篇 [未点亮棋中黄钻]金币数量<100枚 [未点亮棋中蓝钻]乐币数量<10枚 [未点亮棋中粉钻]贡献值数量<1点 [未点亮棋中彩钻]精华帖数量<1篇
发帖
21
金币
63
威望
0
贡献值
0
乐币
0
主题
2
— 本帖被 江湖艺人 执行加亮操作(2013-06-19) —
怎么操作 无法扫描的棋盘 ?原创:330639889

we 都知道单机象棋----或者一些flash扫不出来,那么就自己弄个转换站
可能意义不太大。。。

今天,我们以易语言为例子
-----------------------
首先,我们要知道棋盘是个规则的长方形,他由密铺的正方形组成,兵河等的扫描办法便是高级的 坐标颜色定位
然而对于有些单机以及囊括棋盘则显得无能为力,我们可以由基础解决,即划分好一个棋盘的各个点坐标,再调用
棋盘问题便解决了
------
然后,我们知道要知道对方棋盘走了什么棋,我们仍然需要扫描色块。
我们可以统一棋盘窗口至(0,0)点,仔细观察棋盘,发现每个格点颜色都是一样的
没错,我们就选取一个空点,作为“格底色”,由于像素麻烦,我们规划为一个平面直角坐标系
然后,设置好格子大小(格子是正方形,定义一个边即可),然后 分为 9*10的大格点!
这样在一开始就扫描好各个棋子,并归类于一个数组里面,存着他们的坐标的多维组。
【ps:我们只能从头应用,今天我讲的并没有中途识别局面的功能,因为这个需要更加的颜色区分汉字】
我们知道每次下一个棋子。。。有一个 【选择坐标点】 和 【目标坐标点】,我们只要掌握了
目标点,便实现对方棋子移动,这一步很简单,我们设置一个频率 [时钟事件] ,如以5秒为一次
扫描棋盘每个格点,因为我们有了一个=各个棋子坐标数组=,所以对应一个个,扫描格点颜色,
与“格底色”比较,确定此处是不是有棋子,最后一个个匹配,只有一个wrong,那个便是’移动点‘
一切皆好,我们更新“棋子数组”,然后移动棋子【这个只需要点“选择点”“目标点”就可以了】
OK。。。。。。最后是下一轮循环了 。
---------于是,有人提出来,棋子的吃与被吃 出现的话这个方法就有问题了
==============好,那现在我们就来讲我方方案 这个问题就迎刃而解了
我方的移动,需要靠调用引擎,这个不多说,我们就可以获得我们需要走了路径,比如 (9,10)走到(9,9)
同样模拟点击我不多说了。。。。‘
为了方便说明,我把几个数组数据贴出来
象棋有:兵*5,马*2,炮*2,车*2,士*2,将(帅)*1 相*2====7个棋类,我们就以数字代替他们 用 -1234567-分别代表-兵马炮车相士将-
对方(黑)棋盘:array=[[1,1][2,1][3,1][4,1][5,1][6,1][7,1][8,1][9,1] [2,3][2,8] [4,1][4,3][4,5][4,7][4,9]]
红方同与此推法。
-----------
好回到问题上来,吃子意味着array前后失去的不是一个棋子而是两个,我们只能取 对方棋盘 走动的来作为移动点阵
,比如 ,红方吃1号兵,黑方走2号兵,对应的array中的元素[4,1][4,2]则成为了不能匹配到的两个
棋子格点,我们不知道哪个棋子是哪个。。。
我无语了,来简单点的
我们从。。。【选择点】与【目标点】来论述
我们知道根据array,根据2号兵向前走到(5,2),我们扫描全盘
就可以扫描到array中除开(4,2)的所有点,为什么(4,1)不除开,应为我方吃了后站在上面,同样被扫
描到了,终上所述,(4,2)点匹配不到,反而找到(5,2),就说明从4,2到了5,2.。
。。sososo看上去好像吃子不影响啊,让我们深入下去,假设我们从4,2 到了 5,2
所以array内的4,2将变成5,2,然而4,1仍在数组内,我们赋予程序思想,它会认为我们的1号兵在这里
并没有死掉,我们继续想,可能有点困难,我们分几种情况讨论:
①:在兵一点的棋子走到其他位置时
-当没有吃棋子时
。。。。。。。。大家自己想吧
比如会自走到那个点引起我方扫描不到目标点
=====================
很简单,逐本舍源,将吃掉的棋子从数组中开除===
实现方法:双方在走后,程序应检查目标点是否存在棋子(只需要与对方array匹配即可,没有自己棋子吃自己说法吧)
检测是否存在方法:
用一个loop do 将这个二维数组都过一遍,取出每个数组的每个值与x,y比较
--
检测到后,便从对方array数组中剔除。。
================================
再来,我们会问,扫描全盘,指的哪里!!!!
,我们先来想想这个中转程序用来干嘛,
只不过负责 识别对方棋子如何运动-推动引擎运动-接受引擎返回-模拟点击到对方
,也就是在程序虚拟棋盘内,只需要做到,棋子坐标改变,棋子坐标剔除即可
,简言之,也就是不管什么棋子,只当做一个圆圆饼子就可以了,他们可以互相吞噬,也可以擦肩而过
,所以我们把array范围扩大到全部饼干位置(棋子坐标)上
来吧,一个简单棋谱我们来分析:

==开始==    
1 炮二平五  
炮8平5  
2 炮五进四
炮5进4
3 马二进三  
炮5退2  

==========结束==========
注意,不要忘记,红方是我方引擎,黑方是对方棋盘
-----------------------------
首先炮二平五,即炮(8,8)=>(5,8)
走程序:收到封包数据-检查目的地又没有棋子-没有-array剔除(8,8),增加(5,8)
========红方
其次炮8平5,即(8,3)=》(5,3)
走程序:检测棋盘图像发现,检测array中失去(8,8)得(5,8)------目的地无棋子-剔除83,-增加5,3
======黑方
然后炮五进四,即(5,8)=》(5,4)
走程序:-目的地有棋子-剔除(5,4),(5,8)-增加(5,4)
=====红方
然后p5j4,the same,剔除5,3
========黑方
之后马二进三,即(8,10)=》(7,8)
目的地无棋子,剔除(8,10),加(7,8)
========红方
---------------------------END-------
至此 全局array 中 就发生如下变化
炮(8,8)(8,3)移动到了(5,4)(5,5)
马(8,10)到了(7,8)
兵(5,4)(5,7)削除
-----------
即只看该三棋类,则
A = [8,8][8,3][8,10][5,4][5,7]
A2 = [5,4][5,5][7,8]
===========================================
没有任何 问题 各位有疑问可以跟帖。。小弟惭愧献丑
有问题此贴继续更新,仅仅借鉴思路,各位可以变通于其他语言
累。。。

本帖最近评分记录: 2 条评分 金币 +18
级别: 上尉
[棋中红钻4级]发帖数量≥1000篇 [棋中黄钻5级]金币数量≥10000枚 [棋中蓝钻3级]乐币数量≥100枚 [棋中粉钻2级]贡献值数量≥5点 [未点亮棋中彩钻]精华帖数量<1篇
发帖
1557
金币
12207
威望
5
贡献值
5
乐币
251
主题
5

只看该作者 一楼  发表于: 2013-06-19
理论性太强、看得有些晕头晕脑、云山雾罩,楼主可以直接发明一个超级连线器,目前有很多网站就连鹏飞也是无能无力,希望楼主可以出一个无敌超级连线器。
级别: 少尉
[棋中红钻2级]发帖数量≥100篇 [未点亮棋中黄钻]金币数量<100枚 [未点亮棋中蓝钻]乐币数量<10枚 [棋中粉钻2级]贡献值数量≥5点 [未点亮棋中彩钻]精华帖数量<1篇
发帖
229
金币
21
威望
0
贡献值
7
乐币
1
主题
4
只看该作者 二楼  发表于: 2013-06-19
谢谢楼主无私奉献谢谢喽 主的 好 文章
级别: 少尉
[棋中红钻2级]发帖数量≥100篇 [未点亮棋中黄钻]金币数量<100枚 [未点亮棋中蓝钻]乐币数量<10枚 [棋中粉钻2级]贡献值数量≥5点 [未点亮棋中彩钻]精华帖数量<1篇
发帖
229
金币
21
威望
0
贡献值
7
乐币
1
主题
4
只看该作者 三楼  发表于: 2013-06-19
非常感谢非常谢谢 12434
本帖最近评分记录: 1 条评分 金币 -3
级别: 上尉
[棋中红钻4级]发帖数量≥1000篇 [棋中黄钻2级]金币数量≥1000枚 [未点亮棋中蓝钻]乐币数量<10枚 [棋中粉钻2级]贡献值数量≥5点 [未点亮棋中彩钻]精华帖数量<1篇
发帖
1100
金币
1023
威望
0
贡献值
5
乐币
6
主题
1
只看该作者 4楼 发表于: 2013-06-19
是专业点,我确实不懂。在安卓手机上网不能看论坛的flash棋盘,请懂的老师指教一下。谢谢!
本帖最近评分记录: 1 条评分 金币 +1
级别: 论坛检查
[棋中红钻5级]发帖数量≥2000篇 [棋中黄钻2级]金币数量≥1000枚 [棋中蓝钻2级]乐币数量≥50枚 [棋中粉钻2级]贡献值数量≥5点 [未点亮棋中彩钻]精华帖数量<1篇
发帖
2200
金币
1321
威望
2
贡献值
5
乐币
93
主题
33

只看该作者 5楼 发表于: 2013-06-19
之前用EXCEL的散点图玩过象棋,大意就是给各棋子通过坐标赋值而定位(32组值,每子一个),对弈过程中,通过改变坐标值达到走子的目的,吃掉的子就输入棋盘外的坐标。
级别: 中校
[棋中红钻6级]发帖数量≥5000篇 [棋中黄钻3级]金币数量≥2000枚 [棋中蓝钻2级]乐币数量≥50枚 [棋中粉钻5级]贡献值数量≥50点 [未点亮棋中彩钻]精华帖数量<1篇
发帖
6131
金币
4069
威望
15
贡献值
51
乐币
62
主题
1

只看该作者 6楼 发表于: 2013-06-19
这个真没弄过还,不懂则不弄,看看再来弄弄吧!
级别: 少校
[棋中红钻5级]发帖数量≥2000篇 [棋中黄钻3级]金币数量≥2000枚 [棋中蓝钻3级]乐币数量≥100枚 [棋中粉钻3级]贡献值数量≥10点 [未点亮棋中彩钻]精华帖数量<1篇
发帖
2569
金币
3442
威望
2
贡献值
10
乐币
427
主题
119

只看该作者 7楼 发表于: 2013-06-20
谢谢分享  不过看了半天没看懂
级别: 四级士官
[棋中红钻1级]发帖数量≥10篇 [棋中黄钻1级]金币数量≥100枚 [未点亮棋中蓝钻]乐币数量<10枚 [未点亮棋中粉钻]贡献值数量<1点 [未点亮棋中彩钻]精华帖数量<1篇
发帖
64
金币
128
威望
0
贡献值
0
乐币
0
主题
6
只看该作者 8楼 发表于: 2013-06-20
虽然没看懂但是还是顶下!
快速回复

限56 字节
请不要在回贴只采用字母:“ PP、asdfhjkl、HAO、OK、ddddddd ......”。  请不要在回贴过于简单的内容:“不错、顶、支持、厉害、呵呵、靠、晕........”
 
验证问题: 我们论坛是一个什么棋类为主的论坛?
上一个 下一个