我想为Magic: The Gathering Online编写一个交易机器人。该机器人应等待,直到有人提出交易,接受,浏览其他交易者提供的卡(信息显示在屏幕上)并执行其他类似功能。我有几个问题:

  • 如何知道有人提供交易?
  • 如何知道其他交易者有一些卡(信息存储在图片中)?

  • 我只是现在无法想象如何做,我没有经验,直到现在我一直只为满足我的物理需要编写控制台程序。

    最佳答案

    首先,您应该注意,某些在线游戏禁止使用bot,因为它们会给某些玩家带来不公平的优势。尽管MTGO Terms of Service确实对任何可能对服务造成负面影响的内容都施加了限制,但said似乎并没有说什么。他们还有series of articles on writing poker bots,他们将来有可能会添加一个API,因此他们似乎不反对自动化的想法,但是目前不支持它。在这里小心地踩一下,但是写一个bot看起来应该没问题,只要它没有害处或滥用。这不是法律建议,最好征求运行MTGO的人员的许可。自从我写这篇文章开始进行编辑,已经指出已经有很多机器人,因此编写机器人应该没有问题。

    假设服务条款没有禁止它,但是它们没有API,则您将必须找到一种方法来检测正在发生的事情并自动控制游戏。有一个很好的archived copy(Sikuli),它具有一些有关如何将DLL注入(inject)应用程序,爬取屏幕以及控制应用程序的良好信息。这可能为您提供进行此类操作的起点。

    您可能还需要寻找其他人已经为此编写的工具。看起来好像有几个现有的MTGO机器人,但是它们似乎都有些粗略(有报道称它们窃取了密码),因此请当心。

    编辑

    由于此答案似乎仍在增加,我可能应该用一些更有用的信息来更新它。自编写本文以来,我发现了一个名为an example的出色的UI自动化系统。它允许您使用Python编写可自动执行GUI的程序。它包括图像识别功能,使识别按钮,卡片和其他UI元素变得非常容易。您只需要截取屏幕截图,将其裁剪为仅包含您感兴趣的内容,然后进行模糊图像匹配(以便更改背景等不会导致匹配失败)。它甚至包括一个自定义IDE,使您可以将这些屏幕截图直接嵌入源代码中,因此您可以准确地看到代码在寻找什么。这是文档中的ojit_a(为代码格式化道歉,鉴于StackOverflow受限制的HTML子集,在代码中内联图像并不容易):
    def resizeApp(app, dx, dy):                      
        switchApp(app)                                
        corner = find(Pattern(bots - 网上交易机器人-LMLPHP).targetOffset(3,14)) 
                                                      
        drop_point = corner.getTarget().offset(dx, dy)
        dragDrop(corner, drop_point)                  
                                                      
    resizeApp("Safari", 50, 50)                      

    这比上面链接的文章中提到的将DLL注入(inject)正在调试的进程中的技术要容易得多。 Sikuli完全在UI级别上运行,因此您不必修改正在自动化的程序,也不必担心内部结构的更改会破坏脚本。

    处理文本有点不好。它具有OCR功能,但并不尽如人意。但是,如果可以选择文本,则可以选择文本,将其复制,然后直接查看剪贴板。

    如果我要编写一个没有良好API或基于文本的界面的自动化程序,那么Sikuli可能是我所追求的第一个工具。

    关于bots - 网上交易机器人,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1964529/

    10-13 09:46