作者sitos (麦子)
站内Facebook
标题Re: [闲聊] 宝石方块好难阿....
时间Mon Jul 19 21:10:23 2010
: → sitos:倒是很希望可以跟其它有兴趣写 bot 的人交流一下
: 推 sitos:读盘面进来判断阿... 然後尽量多连一点? 目前还没有作搜寻
: → sitos:不过读点的颜色很容易误判就是了... 这部份也还没克服
: → sitos:不过其实判断还满复杂的... (为了高分)
: → sfwejfish:你跟我说用啥写的 我有兴趣(咦
: → sfwejfish:完全没碰过模拟输入 囧
: 推 sfwejfish:编译程式的话 GWB QB TC BC VC VB VS2008(MFC) 囧
询问了一下板主,看来「机器人」应该不算在板规十一这条规定的范围之内。
▕ 十一、禁止讨论恶意程式、作弊方式、BUG ▏
▕ ▏
▕ 禁止询问、讨论、分享或推广任何窜改封包、修改记忆体或其 ▏
▕ 他足以影响游戏公平性的恶意程式、作弊方式或 BUG 等资讯 ▏
▕ (含教学、心得、相关图文、影片、关键字、分享或徵求程式 ▏
▕ 、询问使用方式等,详细说明请见
#1C2zNPjg。) ▏
▕ ▏
▕ 发文处分:视情况水桶一周以上、原文迳行删除或劣退。 ▏
▕ 推文处分:视情况水桶一周以上,一行推文视为一案,得连续 ▏
▕ 处分。 ▏
▕ 累犯追加:水桶加倍。 ▏
因为「机器人」的运作原理上,并没有窜改封包、修改记忆体,
而宝石方块也不是对抗性的游戏,所以比较没有游戏公平性的问题。
如果这篇文章以下的内容违反板规,请板主提醒,我会把文章删掉。
进入正题之前,还是先提醒一下,这种靠反应和动作的游戏,
「机器人」的能力远胜过人手在玩是一定的。
作机器人并不是要显示机器人比较厉害(因为这是早就知道的事),
而是想要知道:
1. 某些人手不可能达成的动作,做出来以後会是什麽样的效果。
2. 游戏进行的规则,例如倍数方块出现的条件为何。
3. 在不破解游戏的情况下,进行游戏高分的可能性为何。
简单来讲,用手进行游戏有用手进行的紧张感和乐趣,
而开发机器人,寻找高分的移动演算法,则有另外一番风趣。
各有各的乐趣,如果不喜欢机器人,对机器人没兴趣,请忽略这篇文章。
我的机器人是用 VC 2008 写的,但我想其它 Windows 下的工具应该也可开发。
而我的对象程式则是用 chrome 开启的 facebook 中的宝石方块。
整个程式的流程大致如下:
[找寻宝石方块程式 FindWindowEx]
v
[取得游戏画布 GetDC]
v
[读取游戏盘面 GetPixel] <--
|
v |
|
[决定移动] |
|
v |
|
[发出移动指令 SendMessage] --
目前在制作上的两大困难主要是在「读取盘面」和「决定移动」上面。
读取盘面的困难在於 1. 方块的颜色并不是固定的,例如十字爆炸和小黑,
方块的颜色是随时间改变的,因此辨认上较为困难。
2. 会有没用的讯息出现在盘面中,例如一开始的「GO」,
还有一堆 Good, Excellent ... 以及分数等等
3. 游戏进行中方块是会动的,尤其是从上面掉下来的方块,
A 颜色的方块在掉的时候可能刚好符合 B 颜色的特徵。
这部份大概可以靠作苦工,慢慢把所有的例外修完,不晓得有没有更好的办法。
我有朋友建议我去读记忆体,不过那有点作弊了,所以我就没那样去做。
决定移动的困难,其实主要可以分成两个部份。
第一,怎样的移动可以在宝石方块这个游戏当中取得高分,这取决於这个游戏的规则。
先前我发的文章,也多是针对这个问题问的,当然也有一些心得。
我认为这是作机器人的乐趣之一,有兴趣的人不妨自己动手调整,看看是否能更高分。
为了干这件事,我好几天整个晚上都坐在电脑前看机器人玩宝石方块,
看到连闭上眼睛跟作梦,都会见到方块合起来的影像。(有点太过火了)。
第二,怎样达成前面观察到的条件。例如是否只依目前盘面作决定,
或者要对可能的组合作最佳化。是不是要引入搜寻的概念等等。
这部份我目前都只有依目前盘面,甚至可以说依目前检查到的这颗方块来决定。
所以还有很大的进步空间,不过时间和动力不足,因为分数还没有被超越。
我把一个简化版的 source code 放在
http://sitos.myweb.hinet.net/Blitz-Simple.rar
里面有我上面写的基本流程的程式码,基本上写机器人需要用到的 API ,
里面都有示范应该要怎麽样使用。想要尝试的人,可以用 chrome 开 fb 的宝石方块,
为了确保它抓得到该视窗,请不要同时用 chrome 开启其它的网页,
先进入宝石方块的开始画面,然後启动这个程式,再帮它点开始,它应该就会动了。
这个范例是一个阉割过的版本,不会判断任何特殊方块,
所以很容易自己跑一跑卡住,因为这个程式的目的只是让有兴趣的人,
可以以这个程式为基础来开发自己的机器人。直接用这个程式,
是无法取得很高的分数的,因为几乎该有的功能都没有。
目前我的 Bot 在我这边自己做到第四版,而这个程式是从第一版割出来的。
所以当然... 相当地弱。
最後附上目前我手上有的 replay 里面最高分的纪录。
无道具
http://sitos.dyndns.org/Blitz.html
有道具
http://sitos.dyndns.org/Blitz2.html
希望对开发机器人有兴趣的人可以以此为起点享受不一样的乐趣。
如果有人得到更高的分数,烦请分享一下 replay ,这会给我改进 bot 的动力。
也可以让我观摩一下不一样的演算法怎麽样得到更高的分数。 :)
--
我实实在在的告诉你们,一粒麦子不落在地里死了,
仍旧是一粒,若是死了,就结出许多子粒来。
约翰福音 12:24
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 60.248.178.71
1F:→ ColdDark:我觉得这是款运气成分很高的游戏,机器人不一定拿的到高分 07/19 21:14
2F:→ ColdDark:不过平均分数应该会比大部分的人手高应该是没问题的 XD 07/19 21:14
3F:→ sitos:我现在的版本要是没刚好遇到 Bug ,平均已经超过 1M 了。 07/19 21:17
4F:→ sitos:我开个实况好了,不然只放最高分可能觉得太看运气。 07/19 21:18
http://zh-tw.justin.tv/sitos 放着让它跑一阵子,不过月亮神助出现可能会卡住。
※ 编辑: sitos 来自: 60.248.178.71 (07/19 21:22)
5F:推 kto0623:好帅XD 07/19 22:06
6F:推 Rayko:那个...虽然用程式或是用CE暂停时间可以达到同时移动 07/19 22:49
7F:→ Rayko:无数个方块 但是还是有它的规则在 07/19 22:49
8F:→ Rayko:比如说硬拉三个方块去凑一个五连黑星 是会被系统弹回来的 07/19 22:50
是的,这个我最早的版本就试验过了,不行。
不过我也找到了可以拉在一起的规则。从上面的 replay 应该就看得出来了。 :)
9F:推 martian001:推~ 还有实况真有趣XDDD 07/19 23:47
10F:推 jujang:晚点测试看看 感谢分享 07/20 00:04
11F:→ ohyago:看你最高分的REPLAY 七跟八倍好像是都差10秒才出现@@ 07/20 06:37
http://sitos.dyndns.org/Blitz.html 里面 x7 是 44s 出现 x8 是 39s 不到 10 秒阿?
12F:推 wcmwcm:实况真是有趣,看机器人玩宝石方块有种见鬼了的FU~ 07/20 11:40
13F:→ wcmwcm:认真推~~ 07/20 11:40
14F:推 shwu0426:好有趣!! 07/20 13:04
实况先关了,很吃上传。 :)
※ 编辑: sitos 来自: 60.248.178.71 (07/20 20:16)
15F:推 DJY:玩到破140W了... 07/20 20:17
16F:推 jujang:应该说摆着让机器人玩 07/21 20:54
17F:推 ianwww:有关x2的方块啊..根据用变速器慢慢玩的经验...应该跟前面 07/25 16:42
18F:→ ianwww:说的没错.正常情况下是动一个方块然後消12个以上..就出现 07/25 16:42
19F:→ ianwww:但进到加速状态时..1000up?变成动一次方快要消好几个才会出 07/25 16:43
20F:→ ianwww:现..像我都是用黑星去消十字..or黑星消两个爆炸以上都会出 07/25 16:44
21F:→ ianwww:现..另外再动方块前..盘面方快要停住.而不是盘面还在掉就在 07/25 16:45
22F:→ ianwww:动..根据以上方法..10s的限制是不存在的..通常可在剩35s前 07/25 16:46
23F:→ ianwww:消到x8...最高纪录是340万(变速器) 07/25 16:48