2

我想尝试创建一个学习国际象棋应用程序作为学校项目。我的第一个计划是简单地让这个 AI 与自己对抗,但要真正展示它是否成功,它需要能够展示它的进展情况。为了做到这一点,我希望它在 chess.com 等网站上玩评级游戏。但是,我相信他们(还)没有公共 API。

因此,我想用java制作一个识别颜色和图像的程序。它保留所有位置的内部二维数组,并识别板上的棋子。我想我已经找到了一种在窗口中使用Java Robot Class之类的方法来执行此操作。

但是,我希望它在内部窗口中打开此网页并在后台继续执行此操作。有没有办法在自己的窗口中识别颜色,而不需要在前景中?

编辑:我打算使用我刚刚找到的这个浏览器组件。我注意到可以创建页面的整页快照并将其保存为 BufferedImage(?)。这会让这样做更容易吗?

编辑2:我刚刚读到“完全禁止来自其他人、计算机/国际象棋引擎或残局表库的外部帮助”。我想让电脑完成所有的演奏当然也包括在内。所以我可能会尝试使用另一个网站,所以特定于 chess.com 的答案不会削减它!

4

3 回答 3

3

您应该考虑在提供 API 且允许使用国际象棋引擎的国际象棋服务器上玩。有Internet Chess Club (ICC),您必须付费才能拥有一个人工帐户,然后您可以为您的引擎获得一个免费的计算机帐户。还有免费的 Internet Chess Server (FICS),您和您的引擎可以在其中获得免费帐户。

ICC通常是首选,因为那里的玩家水平更高,有很多国际大师和国际象棋大师在那里玩。

与这些站点交互的最佳方式是实现xboard 协议。这将允许您的引擎通过 Winboard 或 XBoard 界面(以及其他)播放,这些界面可用于连接 FICS 或 ICC 并在那里自动播放。

我希望这会有所帮助,即使它没有直接回答问题。

于 2011-04-21T12:10:49.967 回答
3

我不知道它有帮助,但也许你可以看看 Sikuli 项目。 http://sikuli.org/

Sikuli 是一个程序(和一个 API),用于处理与用户界面的交互。例如,您可以编写脚本以在特定条件下单击图像或按钮。

对您来说特别有趣的是,有一个 Java 集成:http ://sikuli.org/docx/faq/030-java-dev.html

这是该网站的摘录,可让您了解可以编写的代码。

编辑:在此代码中,重要的是要注意您正在使用图像定义新模式。Sikuli 将能够找到匹配的模式。

import org.sikuli.script.*;

public class TestSikuli {

    public static void main(String[] args) {
            Screen s = new Screen();
            try{
                    s.click("imgs/spotlight.png", 0);
                    s.wait("imgs/spotlight-input.png");
                    s.type(null, "hello world\n", 0);
            }
            catch(FindFailed e){
                    e.printStackTrace();
            }
    }
}
于 2011-04-20T11:55:36.703 回答
2

我不确定您的输入是什么,但您有两个选择:

  1. 您可以处理 PNG 图像。将图像加载到BufferedImage( docs ) 对象中并在那里检查它。您可以使用屏幕截图工具来创建这些。

  2. chess.com 似乎将 HTML 与 JavaScript 结合使用。您可以使用HttpComponents下载 HTML并检查它以查看各个部分的位置。这还有一个额外的好处,即您不必猜测哪一部分在哪里,因为 HTML 包含源信息。

于 2011-04-20T11:45:42.770 回答