我试图随机生成一个有向图,目的是制作类似于口袋妖怪的滑冰拼图游戏的拼图游戏。
本质上,这就是我希望能够随机生成的内容:http : //bulbanews.bulbagarden.net/wiki/Crunching_the_numbers : _Graph_theory。
我需要能够在x和y维度上限制图形的大小。在链接中给出的示例中,它将限于8x4网格。
我遇到的问题不是随机生成图,而是随机生成图,我可以在2d空间中正确地绘制它,因为我需要在节点的另一侧做一些事情(例如岩石)来制作它停止滑动时在视觉上有意义。这样做的问题是,岩石有时会终止于两个其他节点之间或可能位于另一个节点本身的路径中,这会导致整个图形损坏。
与几个我认识的人讨论了这个问题之后,我们得出了两个结论,可能会得出一个解决方案。
- 构造网格时,将网格中的障碍物包括在图中。
- 从一个完全填充的网格开始,然后绘制一条随机路径并删除将使该路径起作用的块。
然后问题就变成了要删除哪些,以避免引入额外的较短路径。我们还认为动态规划算法可能是有益的,尽管我们每个人都不擅长从零开始创建动态规划算法。关于此问题被正式称为(如果是官方图形问题)的任何想法或参考将是最有帮助的。
这是到目前为止我已经完成的一些示例,仅通过随机放置块并从选定的开始/结束位置生成导航图即可。想法(如上一链接所述)是从绿色S开始并想要到达绿色F。您可以通过向上/向下/向左/向右移动来实现此目的,并继续沿选定的方向移动,直到碰到一个壁。在这些图片中,灰色是墙,白色是地板,紫色线是从头到尾的最小长度,黑色线和灰色点表示可能的路径。
以下是一些随机生成图的不良示例:
以下是随机生成(或手动调整)图的一些好示例:
我似乎还注意到,实际上在玩拼图游戏时更具挑战性的是那些在最小路径上具有很多高次节点的游戏。