有没有人对如何在java中创建可以玩Flash游戏的机器人的资源或方法有任何建议?
我正在考虑使用Robot类来观看屏幕并进行操作,但我需要在图像中查找图像等方法.我相信这已经完成,但谷歌搜索返回了很多废话..
Lex*_*Lex 10
我在大约3天内刚刚建立了一个休闲卡玩机器人(不是扑克),这非常容易.以下方法适用于大多数基于按钮的游戏.当然,对于3D游戏和快速移动的2D图形,您将需要一种不同的方法.
奇怪的是那里的有用信息很少.关于编写机器人的所有文章都将链接到Windows的东西,包括DLL,钩子,内存窥探和各种其他技巧.当然,你不需要任何这些废话.您只需要Java和awt.Robot.
发出点击很简单,游戏逻辑是你必须自己弄清楚的,所以我将专注于获得屏幕输入.
首先是获得全屏捕获.然后,您会找到每个帧中存在的独特图像,并使用该图像作为锚点来计算游戏界面左上角的偏移量.锚图像可以是任何东西,甚至是游戏和浏览器背景之间的两个或三个像素宽的边界,只需确保足够长.然后,您只需搜索屏幕截图以查找此图像所在的位置,这是一种非常简单的算法,可以比较当前一个像素的图像并更改偏移量,直到找到匹配项.获得UI偏移后,您会找到屏幕上所有按钮的相对偏移量,并为要与之交互的每个按钮拍摄一些快照.您可以使用这些偏移来检测活动按钮或其他指示器.作为奖励,您还可以在单击按钮时使用这些偏移.您应该为要检测的所有按钮制作png(而不是jpg)图像的集合.然后针对屏幕截图的内容运行简单的图像比较算法.
Flash可以进行矢量字体渲染,并且不会在游戏的不同实例之间产生像素完美的一致性.图像缩放也不一致.以下是解决这个问题的方法:
字体识别可能很棘手.如果您可以分隔字母(通常使用单色字体),那么您只需使用上面的过滤方法分别识别每个字母.
如果你碰壁,你可以尝试各种更复杂的过滤方法(模糊+强度阈值是一个很好的组合).
最后的提示是:
您可以修改 Flash 应用程序并向浏览器提供一个简单的 API(Javascript 和可能的 Java 小程序)。API 将包含用于控制和访问游戏状态的方法。ExternalInterface.addCallback将使这成为可能。