如何在Java

时间:2016-03-01 07:30:56

标签: java artificial-intelligence tiles 2048

最近,我的朋友向我提出要求制作人工智能的人工智能,用Java编写着名的2048游戏。我做了它,它工作正常几分钟然后卡住了。经过一些调试后,我意识到它没有正确读取板,它认为32是1024.为了解释它为什么这样做,我必须首先解释它如何获得屏幕上的瓷砖的价值。

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

这是一张图片(小方块代表点数): enter image description here

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

这让我想到了一个问题:有没有办法在游戏2048 中读取磁贴值而无需在Java中重新创建游戏?

修改

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

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

例如,请选择此主板:

enter image description here

从这个板子我想得到数字的值并将它们存储在一个类似于下列的数组中:{0,0,2,4,0,0,32,2,2,2, 16,8,4,32,64,128}

提前致谢:)

1 个答案:

答案 0 :(得分: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,则可能需要使用光学字符识别库。这将是较慢的,但只要可以解析它将允许任何最大值。 There are quite a few posted here

字体显示为Clear Sans

所有颜色和字体均来自the game的电子表格。