上周我们在人工智能课上学习了A*算法。我们的老师一步步向我们展示了如何使用这个算法到达棋盘上的目的地。他用手画了它,并使用了迷宫的例子,即一堆方块聚集在一起。还有一个障碍。他提到了开放列表和封闭列表,但他没有使用它们。
然后他给了我们一个作业,在一个 8 谜题游戏中实现这个算法。要求是: 玩家可以声明拼图尺寸从 2x2 到 10x10 或更大。 玩家可以设置图块(或数字)的开始和结束位置。 瓷砖的移动必须是可观察的。 使用C#和Winforms是必须的。 学生必须自己编写算法。禁止使用图书馆。
首先,我尝试通过查看有关如何在控制台上解决难题的视觉教程来实现它。我没有成功,所以我在表格上尝试了。
乍一看,我认为我可以利用图块的邻域关系来确定下一步的动作。所以我尝试编写一个算法来动态生成图块、创建图块对象、分配邻里关系。我又失败了。
然后,我创建了一个 3x3 拼图和对象,并手动分配关系以专注于算法。我写的,但它是解决具体情况的。大多数时候它都在无限循环。
那么,如何才能真正按照老师的要求去实现呢?我的作业成绩已经很差了,但我想学习。
前段时间我在Unity中实现了一个项目的A*算法。我对代码做了一些修改,并在 Winforms 中创建了一个小界面。这是结果:
如果您认为这有任何帮助,您可以从 GitHub 获取该项目: