使用人工智能解决 2048 游戏(JAVA 代码)

到目前为止,你们大多数人都听过/玩过 Gabriele Cirulli 的 2048 游戏。这是一个简单但极具吸引力的棋盘游戏,要求您将单元格的数字组合起来以达到数字 2048。正如预期的那样,随着更多单元格填充高值,游戏的难度会增加。个人 […]

来源:DatumBox - 机器学习、统计和软件开发博客

到目前为止,你们大多数人都听过/玩过 Gabriele Cirulli 的 2048 游戏。这是一款简单但极具吸引力的棋盘游戏,需要您将单元格的数字组合起来才能达到 2048。正如预期的那样,随着更多单元格填充高值,游戏难度也会增加。就我个人而言,尽管我花了很多时间玩游戏,但我从未达到 2048。因此,自然而然的做法是尝试在 JAVA 中开发一个 AI 解算器来击败 2048 游戏。🙂

2048 游戏

在本文中,我将简要讨论我构建游戏 2048 的人工智能解算器的方法,我将描述我使用的启发式方法,并提供用 JAVA 编写的完整代码。该代码在 GPL v3 许可下开源,您可以从 Github 下载。

Github

使用 JAVA 开发 2048 游戏

原始游戏是用 JavaScript 编写的,所以我不得不从头开始用 JAVA 重写它。游戏的主要思想是您有一个 4×4 网格,其中的整数值都是 2 的幂。零值单元格被视为空。在游戏过程中的每个时刻,您都可以将值向上、向下、向右或向左 4 个方向移动。当您执行移动时,网格的所有值都会朝该方向移动,当它们到达网格边界或到达另一个具有非零值的单元格时,它们会停止。如果前一个单元格具有相同的值,则两个单元格将合并为一个具有双倍值的单元格。在每次移动结束时,都会在棋盘中的一个空单元格中添加一个随机值,其值为 2(概率为 0.9)或 4(概率为 0.1)。当玩家成功创建一个值为 2048 的单元格(获胜)或没有其他动作可做(失败)时,游戏结束。

Maurits van der Schee

所有类都使用 Javadoc 注释记录。下面我们提供了实现架构的高级描述:

1. Board 类

2. ActionStatus 和 Direction 枚举

3. ConsoleGame 类

if or