问题标签 [2048]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
14 回答
984745 浏览

algorithm - 游戏 2048 的最佳算法是什么?

我最近偶然发现了游戏2048。您可以通过在四个方向中的任何一个方向移动相似的图块来合并相似的图块以制作“更大”的图块。每次移动后,一个新的瓷砖出现在随机的空白位置,其值为24。当所有的方块都被填满并且没有可以合并图块的移动时,游戏终止,或者您创建了一个值为 的图块2048

一,我需要遵循一个明确的策略来达到目标​​。所以,我想为它写一个程序。

我目前的算法:

我正在做的是在任何时候,我都会尝试将瓦片与值合并24也就是说,我尝试尽可能少地拥有24瓦片。如果我以这种方式尝试,所有其他图块都会自动合并,并且该策略似乎不错。

但是,当我实际使用这个算法时,我在游戏结束前只得到了大约 4000 分。AFAIK 的最高分数略高于 20,000 分,这比我目前的分数要高得多。有没有比上面更好的算法?

0 投票
1 回答
793 浏览

java - 如何在Java中获取2048年瓦片的值

最近,我的朋友挑战我制作一个用 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}

提前致谢 :)

0 投票
2 回答
55 浏览

javascript - 在javascript中创建一个对象数组,然后获取属性

所以我现在正在尝试用 javascript 重新创建 2048 并且遇到了一些麻烦。基本上,我的想法是将网格创建为一个由 16 个对象组成的数组,这些对象采用坐标和一个布尔变量来判断是否填充了瓷砖。

但是,当我尝试打印块的分配值时,它说它们是未定义的

给我

0 投票
1 回答
2196 浏览

java - 在多维数组java中沿方向移动数字

我正在编写一个 2048 克隆(一个简单的克隆),我正在研究的方法是尽可能沿指定方向滑动多维数组中的数字。我有这个向左滑动的代码,但我不知道如何让它向上、向下和向右滑动。

有任何想法吗?非常感谢

0 投票
0 回答
115 浏览

github - 如何更新 Github 页面的 index.html 文件

我在分叉的公共项目中进行了一些更改。然后我进行了自己的更改。我已经在本地运行,一切都很好。除了 index.html 文件之外,我所做的所有更改都有效。如何更新 index.html 文件的更改并将其发布到页面中?github页面:https ://imshivamagrawal.github.io/2048/

0 投票
3 回答
136 浏览

.net - 滑动数组值

我正在尝试在 vb 中重新创建游戏 2048,并且我正在努力弄清楚如何让数组中的值一起滑动。

在我完成全部任务之前,我正在尝试在一个单维数组中执行此操作

例如,如果我有一个数组

我需要弄清楚如何逐步遍历每个数字,检查其后面是否有 0,以便数组变为

但我正在努力弄清楚如何检查数组中数字后面的所有值

我现在只是在尝试向左滑动功能,这样我就可以慢慢来,有没有人知道我怎么能做到这一点?

0 投票
0 回答
758 浏览

python - 在游戏 2048 中合并图块的高效通用算法

我已经检查了很多帖子,例如这里的帖子,但我认为他们没有我想要的东西。我想为游戏 2048 创建一个合并函数,并且我希望它的算法尽可能通用:它应该适用于传统的 4x4 2048,以及不太常见的 3x3、5x5 等。我也想只使用最基本的函数,比如 if-else(我实际上是在使用汇编语言在微处理器中编码,所以我不能在 python 中使用任何花哨的例程或函数)。有没有高效、优雅的解决方案?

我从更简单的 3x3 版本开始,对于向右滑动,我只是从右侧开始检查空瓷砖,然后检查相邻瓷砖是否有相同的数字。我最终有 8 个不同的案例,一旦我发现它属于哪个案例,我就可以进行移动/合并。这样做的问题是,我还需要找出 4x4 和 5x5 的可能情况,而且问题很快就会变得非常复杂。也很难重用为 3x3 编写的代码来处理 4x4 和 5x5。

我还尝试检查空图块,相同编号的图块,从最右边的图块开始(再次向右滑动),然后循环一次(对于更大尺寸的网格,可能需要循环两次以上?)这种方法应该适用于任何游戏大小的数量(3x3、4x4、5x5 等),但它似乎有点低效,我怀疑有一些更好的方法可以做到这一点。

那么在游戏 2048 中是否有优雅的检查和合并方法?

0 投票
1 回答
151 浏览

artificial-intelligence - NetLogo:2048 机器人优化

我正在尝试对 2048 游戏进行 Netlogo 模拟。我已经实现了三个由权重参数确定的启发式函数,并希望使用行为空间来运行模拟并检查赢得这场比赛的最佳策略是什么。

过程搜索使用导出/导入世界原语来搜索可能的移动并选择启发式函数具有最高值的移动。

问题是这个过程非常慢(由于每轮调用四次 import-world 函数)。你有什么想法如何在不经常导出和导入世界的情况下实现这一点吗?

这是我的 AI 入门课程的一个项目。几天后到期,我似乎找不到任何解决方案。

代码的相关部分如下。程序move-(direction)都正常工作且变量可移动?如果正方形可以沿所述方向移动,则为真,否则为假。它在move-(direction)调用的过程moveable-check中进行检查。

非常感谢您的帮助。:)

0 投票
0 回答
33 浏览

javascript - 字段在 2048 处向下移动时的错误

我用 JS 创建了我的第一个 2048 游戏。而且我还有一个让我发疯的错误!

当我向上移动时,每次向下移动时,某些字段不会向下移动。有人可以帮忙吗?

我创建了一个代码笔:http: //codepen.io/mahuki/pen/KabxER

0 投票
2 回答
93 浏览

c++ - 将 if 语句放在 main() 或函数内部以响应用户输入是一种好习惯吗?

我正在为大学终端编写一个 2048 程序。

要玩游戏,我的程序需要向左、向右、向上或向下移动。所以我有两个选择:

  1. 编写一个将方向作为参数的函数,然后通过 if 语句进行相应的操作。

    /li>
  2. 编写四个函数,一个用于上、下、左、右,并将 if 语句放入main().

    /li>

我阅读了谷歌的 cpp 风格指南,它说函数最好保持简短。但是如果我写四个函数我也会有很多重复的代码。到目前为止,我已经使用了选项 1,我的move()函数有 70 行长。

什么被认为是更好的做法?