Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中获取2048中的tiles值_Java_Artificial Intelligence_Tiles_2048 - Fatal编程技术网

如何在Java中获取2048中的tiles值

如何在Java中获取2048中的tiles值,java,artificial-intelligence,tiles,2048,Java,Artificial Intelligence,Tiles,2048,最近,我的朋友向我提出挑战,让我制作一个在Java中玩著名的2048游戏的AI。我成功了,它在几分钟内运行良好,然后就卡住了。经过一点调试,我意识到它没有正确读取电路板,它认为32是1024。为了解释它为什么这样做,我必须首先解释它是如何获得屏幕上瓷砖的值的 它首先让用户在游戏板周围画一个正方形。这样做是为了告诉程序游戏在屏幕上的位置。然后,它生成16个点,每个点位于单个瓷砖中。使用Robot类,它将这16个点的颜色存储在一个数组中 这是一张图,小正方形代表点: 然后检查是否发现了新颜色。如果

最近,我的朋友向我提出挑战,让我制作一个在Java中玩著名的2048游戏的AI。我成功了,它在几分钟内运行良好,然后就卡住了。经过一点调试,我意识到它没有正确读取电路板,它认为32是1024。为了解释它为什么这样做,我必须首先解释它是如何获得屏幕上瓷砖的值的

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

这是一张图,小正方形代表点:

然后检查是否发现了新颜色。如果它发现了一种新的颜色,那么它将为该颜色指定下一次幂2。例如,背景的第一个颜色被指定为0。下一个颜色白色分配给2,然后下一个分配给4,依此类推。问题是,当瓷砖移动时,它们会被设置动画,也就是说,它们不只是传送到正确的位置,而是移动到正确的位置。这会导致错误的颜色在16个点中的一个点下通过,并且程序错误地读取该平铺

这就引出了我的问题:是否有任何方法可以在不必用Java重新创建游戏的情况下读取游戏2048中的tile值

编辑:

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

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

例如,以这块板为例:

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


提前感谢:

一种方法是找出每个瓷砖代表的颜色。这假定您使用的是原始版本

无磁砖: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,您可能需要使用光学字符识别库。这将更慢,但可能会允许任何最大值,只要它可以被解析

字体看起来是清晰的


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

您的问题应该是:我有没有办法读取瓷砖并确保我没有错误地读取错误的临时颜色?非常有趣的问题。不幸的是,太宽泛了。@辍学者,你能告诉我如何使问题不那么宽泛吗?@Kayaman这正是我解决问题的方法。我还想问的是,是否有另一种/更好的方法可以做到这一点。以较小的时间延迟重复采样,直到每个单元格中有3个样本返回相同的值?我不知道,这和我到目前为止所做的类似,问题是磁贴在移动,这导致程序认为磁贴位于不应该位于的位置。如果在每次移动后重新计算每个磁贴的位置,这应该不是问题。除非您有权访问实际的线路板数据,否则您仍然需要计算新的值。@注意,问题是它移动太快,在计算下一步移动时,磁贴部分移动,导致程序将磁贴放置在错误的位置。这只会影响一次移动,因为每次移动都会重新计算电路板,但它会导致程序执行一次移动,从而导致丢失。那么可能是多个样本还是延迟?当然,它可能会使每个动作都慢一点。如果它成为一个大问题,游戏的实现相当简单,@obicerce只是尝试了一下,延迟了1秒,在它再次出错之前,它达到了512。再长一点,比赛时间就太长了。此外,如果我使用了多个样本,那么我将如何选择正确的样本来使用?