-1

最近,我的朋友挑战我制作一个用 Java 玩著名的 2048 游戏的 AI。我做到了,它工作了几分钟,然后卡住了。经过一点调试,我意识到它没有正确读取板,它认为 32 是 1024。为了解释它为什么这样做,我必须先解释它是如何获取屏幕上瓷砖的值的。

它首先让用户在游戏板周围画一个正方形。这样做是为了告诉程序游戏在屏幕上的哪个位置。然后它会生成 16 个点,每个点位于一个单独的图块中。使用 Robot 类,它将这 16 个点的颜色存储在一个数组中。

这是一张图片(小方块代表点): 在此处输入图像描述

然后它检查是否找到了新颜色。如果它找到了一种新颜色,那么它将下一个 2 的幂分配给该颜色。例如,第一种颜色(背景)分配给 0。下一种颜色(白色)分配给 2,然后下一种颜色分配给 4,依此类推。问题是,当瓷砖移动时,它们是动画的,也就是说,它们不仅会传送到正确的位置,还会移动到正确的位置。这会导致错误的颜色通过 16 个点之一,并且程序错误地读取该图块。

这让我想到了我的问题:有没有什么方法可以读取游戏 2048 中的磁贴值而无需用 Java 重新创建游戏?

编辑:

更具体地说,我的问题是如何在 java 中从 2048 获取实际的游戏板数据?

我要问的是一种在外部 java 程序中获取图块值的方法。

例如,拿这个板:

在此处输入图像描述

从这个板上我想获取数字的值并将它们存储在一个看起来像这样的数组中:{0,0,2,4,0,0,32,2,2,2,16,8 ,4,32,64,128}

提前致谢 :)

4

1 回答 1

4

可以做到这一点的一种方法是确定每个图块代表哪种颜色。这假设您使用的是原始版本。

  • 没有瓷砖:#cdc1b4
  • 2:#eee4da
  • 4:#ede0c8
  • 8:#f2b179
  • 16:#f59563
  • 32:#f67c5f
  • 64:#f65e3b
  • 128:#edcf72
  • 256:#edcc61
  • 512:#edc850
  • 1024:#edc53f
  • 2048+:#edc22e

正如您可能看到的那样,这最多只能工作到 2048 年。在那之后,它们共享相同的颜色。

因此,如果您打算超过 2048,您可能需要使用光学字符识别库。这会更慢,但可能允许任何最大值,只要它可以被解析。有不少张贴在这里

字体似乎是Clear Sans.

所有颜色和字体都取自游戏的电子表格。

于 2016-03-01T07:43:46.190 回答