【发布时间】:2016-02-27 01:55:47
【问题描述】:
我正在尝试制作蛇的克隆,我希望蛇的宽度为 5 像素左右,并且以 1 像素的增量移动。这意味着蛇与自身的距离可以超过一条蛇的宽度。当随机生成食物时,这会使事情变得复杂,这将是一个 5x5 像素的正方形。我需要/想要一种算法,将随机生成减少到不包含蛇的 5x5 方块。
部分问题在于,由于食物是 5x5,因此必须检查食物中每个像素的碰撞检测,以查看蛇是否部分在食物中。这给我留下了两个问题
问题
随机生成食物时如何减少搜索空间?
我考虑过做一个四叉树,将空间细分,直到分区小于我想要放置的食物。我还考虑过使用 awt 的 Rectangle,并确定食物的生成位置是否包含在构成播放器的矩形列表中。
我能想到的最佳解决方案是生成一个二维数组,其中包含所有可能的矩形,其左上角作为索引值。然后生成另一个二维数组,将每个像素映射到包含它的每个矩形,甚至只是起点,不需要整个矩形(每个 25 个)。然后在每次移动之后,更新头部和尾部的角图,标记它所占据的每个映射矩形。然后使用映射的角数组进行更简单的随机搜索(这会将其缩小到 1x1 像素的搜索空间)。
我要避免的主要问题是,当蛇占据 90% 的可玩空间时,任何基本的搜索-失败-重复系统都需要相当长的时间才能完成,最坏的情况是永远不会生成食物正方形。
【问题讨论】:
-
最后的问题是......我认为您正在将有效解决方案与 A 解决方案混为一谈 - 明确这一点
-
@gpasch,你是什么意思?
-
我可以说 Rectangles 是基本的解决方案,并且会给你一个正确的结果
-
我添加了最后一句话来澄清我的推理。