algorithm - 关于如何提高点击机器人性能的建议

标签 algorithm image-processing bots

我正在开发一个机器人,它可以玩一个简单的 Flash 游戏,要求玩家点击多个快速移动的目标,具体来说:

Click me!

我目前的算法相当简单:

  1. 截取屏幕图像
  2. 遍历屏幕图像中的像素并将它们的 RGB 值与目标图像的已知 RGB 值进行比较
  3. 返回找到匹配项的坐标
  4. 将鼠标指针移动到坐标并单击

搜索算法的代码如下:

    public Point findImg(BufferedImage img) {
        screen = bot.createScreenCapture(screenRectangle); // Image of screen
        int target = 2424318; // RGB value to look for
        int rgb;

        // Approximate boundaries (400,200) and (1000,700) of the flash game were           
        // hardcoded in
        for (int i = 400; i < 1000; i += 5) {
            for (int j = 200; j < 700; j += 5) {
                rgb = -(screen.getRGB(i, j));
                if (rgb == target) { // Target found
                    return new Point(i, j);
                }
            }
        }
        return null;
    }

目前,该机器人能够击中大约 75% 的目标。但是,它经常无法击中移动速度更快的目标,并且基本上会在屏幕上“追逐”它们。我假设这是因为我的算法无法足够快地找到它们。我试过增加像素步长,但似乎没有明显效果。如有任何建议,我们将不胜感激。

最佳答案

您没有考虑到系统中的延迟(这是人类玩家几乎不自觉地做的事情)。 Flash 游戏可能会在收到点击帧后对其进行评估。双缓冲和垂直同步都会增加延迟。所有这些都需要在屏幕捕获可以抓取图像之前完成。

要击中移动速度更快的目标,您需要进行一些跟踪。如果你能弄清楚你的未命中在哪里,你就会知道它离目标有多远。否则,也许您的代码可以识别出连续未命中彼此接近的时间,并采取越来越长的步骤,直到您击中某些东西。

关于algorithm - 关于如何提高点击机器人性能的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9303344/

相关文章:

linux - C 私钥中的 RSA 算法

algorithm - 二分查找帮助

c# - 如何解决这个问题 `OpenCV: scale factor must be > 1…`?在OpenCV中总结?

image - 我想把图像分成偶数和奇数行

c# - BotFramework:机器人的 MSA appId 或密码不正确

c - 什么算法可以在线性时间内对新值和重复值进行排序,而不使用额外的空间?

java - Java 中的流媒体背包

matlab - 如何在Matlab中为边缘检测和角点检测提供感兴趣区域(ROI)?

javascript - 如何在与 "clearInterval"不同的 if 语句中使用 "setInterval"

javascript - 退出后如何重新启动代码?