2

正如标题所述,Java 是否可以读取基于 Web 浏览器的 Flash 游戏中正在发生的事情?

例如:我是否可以通过阅读当前正在发生的事情并根据一组预先确定的操作做出决策来制作一个可以为我玩 FarmVille 的 Java 程序?

4

3 回答 3

6

FarmVille 不发布任何类型的 API,并且您将无法访问分配给 Flash 播放器的 RAM(据我所知),因此您唯一真正的做法是分析屏幕并自动输入。换句话说,没有预先编写好的farmville.getUnplowedCells()程序可以使用,但是您可以编写一个程序来截取屏幕截图,分析它们以找到未耕种的细胞,然后生成鼠标/键盘输入,让您的角色耕种他未耕种的细胞。Robot类可用于此类编程。

这将非常耗时,并且可能不值得付出努力。同样作为副作用,这实际上会“控制”您的鼠标和键盘,并阻止您正常使用计算机。然而,这个问题可以通过在虚拟机中运行程序来缓解。

于 2013-04-04T20:17:01.690 回答
4

不,没有实现比 IPC 更直接的 Java-Flash 桥接器。最好的办法是对 swf 进行反编译(这可能需要去混淆)并通过常见的 IPC 机制进行交互。

您还可以使用不同的方法通过像素颜色识别屏幕上的元素来解决此问题,因为您可以使用 Java Robot API,它为您提供对键盘、鼠标和视频的访问。由于 FarmVille 是一款 2D 游戏,因此识别屏幕上的元素应该相当简单——执行图像比较或部分图像比较(只是图像的边框或代表部分)以提高速度。

除此之外,在线游戏中作弊并不是一件好事,而且如果你足够聪明,可以制作出可以运行的软件,你可能会找到更有效率的活动。

于 2013-04-04T19:22:03.560 回答
4

如果你的目标是为 FarmVille 制作一个机器人,那么你就走错了路。请记住:这是在线游戏。因此,您不必读取 Flash 客户端的状态,它会更好,读取传入的数据包,您不必在 swf 中模拟鼠标/键盘事件 - 只需创建正确的数据包,在游戏中描述行动。所以我建议你这样做:

1)用Java编写一个嗅探器(这很容易,因为您必须编写一个简单的嗅探器,而不是像Wireshark这样的终极工具)。

2) 使用请求的分析(例如Firefox 的Firebug)从你的游戏中捕获一些数据包。阅读它们,您可以检索所有信息,您需要什么:数据包标头、游戏动作编码等。

3)Java程序中的代码逻辑:读取传入的游戏数据包并执行动作,发送请求。

4)设置你的连接对象的用户代理选项,类似于流行的浏览器(如果你拒绝这样做,游戏服务器可能会忽略你的请求)。

就这样。请记住:游戏机器人不是图像识别器,它只是另一个游戏客户端,具有另一个 GUI 和逻辑。

PS如果我误解了你,你的目标是创建一个带有flash和applet的网页,它们相互通信,你必须使用JavaScript作为它们之间的中介。Flash使用ExternalInterface.call调用JS,JS调用applet,反之亦然。

于 2013-04-05T07:38:41.757 回答