问题标签 [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 投票
0 回答
27 浏览

python - 什么是替代灰度值的替代方法?

我正在尝试制作一个机器人来读取游戏 2048 中的数据,并决定最佳动作。我已经为每个数字预设了灰度值。但不幸的是,空槽的灰度值和数字 512 是相同的。有没有简单的方法可以解决这个问题?

512号截图

空槽截图

这是相关代码:

0 投票
0 回答
146 浏览

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

我制作了著名的 2048 游戏的新变体。在此变体中,有两种类型的图块(2 和 3)需要单独合并。这使得游戏比原版更难。

我想知道玩这个游戏可以达到最高分的最佳算法是什么?我写了一个基于蒙特卡洛的机器人。对于给定的状态,它运行 K 次随机模拟,直到游戏结束并记录它们的最终得分。然后它会播放给出最高平均最终游戏得分的起始动作。我还注意到,如果我将模拟限制为仅 3 次移动(下、左和右),那么它会获得更高的分数。在以 K=1000 运行这个机器人一周后,我获得了3060的分数。最终的董事会位置如下所示:

尽管这比人类获得的任何分数都高,但我想知道我们怎样才能做得更好,我们可以达到的最高分数是多少?

当我看到原始游戏的类似问题时,我受到启发写下这个问题。事实上,那里的算法之一(第三流行)和我的一样。但是,我不确定那里描述的其他算法是否也可以在这里工作,因为它们使用的是专门针对原始游戏调整的启发式评估函数。

2021 年 9 月 22 日更新

我尝试了具有不同探索参数值的蒙特卡洛树搜索算法 (UCT)。然而,它发现的最好的只有 1800 左右,这似乎相当低。也许实施不正确。

我还尝试了返回深度 3 的当前分数的Expectiminimax算法。这给了我 2972​​ 的分数,接近我的最佳结果。我尝试为空单元格和相同颜色的相邻数字添加奖金,但它们没有帮助。

0 投票
1 回答
58 浏览

python - 在 python 中打印 2048 板,带有标准库的间距

我想打印一个间距合适的 2048 板。

我能够到达这里。

但是当我给出更大的数字时,它看起来并不好。

如何仅使用标准库来实现这一目标?

谢谢!

编辑

我知道我们可以使用prettytable,但我也想把它打印成彩色。所以我不能用prettytable

编辑 2

我的代码 -

0 投票
1 回答
38 浏览

python - 2048游戏,帮我调试

我有不同的情况 up , down , left 和 right 。有时选择无效,用户需要输入另一个选择。例如,我想将元素向上移动,但它们都已经放置好了,程序不应该生成新的 (2) 值,而是要求用户输入一个新的选择而不是向上。这是我的代码,它非常适合移动,但在选择无效时不起作用。有人可以帮忙吗??

0 投票
0 回答
34 浏览

python - 2048 Minmax AI 启发式

我正在研究使用 Minmax 解决 2048 的 AI,但我无法找到正确的启发式算法。这是我到目前为止的启发式方法:

到目前为止,我只使用网格来引导 ai 制作蛇形图案,并且还考虑了矩阵上的空白区域。

我应该考虑更多的事情吗?我在网上看到有人在使用平滑度,也就是说,如果相邻的数字具有相似的值。另外,每个的重量应该是多少?

0 投票
0 回答
103 浏览

java - 仅使用控制台在 java 中创建 2048 GAME

我希望我能找到人来帮助完成游戏(2048)。因为我在计算机程序员中只有 2 个月,所以我很难做到这一点。

这个游戏的基础是用户可以选择他想要的任何维度,我有点想通了,但现在我在一个问题中苦苦挣扎:

在游戏开始时,两个“1”牌被添加到网格中的两个随机单元格中。随后的每一轮,都会将一个“1”图块添加到网格中未占用的单元格中,在每一轮结束时,您应该列出所有空闲单元格并使用该列表随机选择一个空闲单元格“。

我尽了最大努力还是没有奏效。

另一个具有挑战性的问题说:

用户移动后,所有数字图块都应尝试沿所选方向移动。一块瓷砖应该继续在给定的方向上移动,直到它撞到另一个具有不同编号的瓷砖并停止,或者撞到一个具有相同名称的瓷砖并与之合并。确保瓦片停止移动的唯一原因是在它应该移动的方向上没有空单元格,或者所有应该合并的瓦片都合并了。

我当前的代码: