所以我正在做 Java 入门类(class)的项目,似乎我选择了一些超出我能力范围的东西。 :P
任何帮助将不胜感激。这就是我遇到的问题:
You have a cursor that is controlled by a player (goes forward or turns 90°) which leaves a colored line as it goes. If you manage to go over your own line and close a polygon of any shape (only right angles though), its surface changes color into the color of your line.
我可以检测到这种情况何时出现,但我有点迷茫,因为如何实际填充刚刚关闭的正确多边形。我似乎无法想象一种算法可以涵盖任何可能的情况。
我查看了扫描线填充算法,但我认为本地图中已经填充了一些多边形时,它就会开始出现问题。 如果我有办法在多边形内找到一个点,Floodfill 算法将是完美的,但是,由于存在许多不同的可能性,我想不出一个通用规则。
我使用的是一个 2x2 整数数组,其中每种颜色都由一个数字表示。
有没有人知道如何解决这个问题?
最佳答案
如果你能检测到这种情况,那么这可以用非常简单的方式解决。问题是选择哪个点作为填充的起点。简单的答案是:全部尝试。当然,只从与光标所在位置相邻的点开始是有意义的。在这种情况下,您最多可以检查 8 个点。更好的是 - 如果当前点形成一个多边形,至少其中 2 个已经被绘制。
所以你有 8 个点要检查。从每个点开始启动 floodfill 8 次。
您可能应该记住两件事:
您应该尝试在您的字段的克隆版本中填充该区域,以便在 floodfill 找不到多边形时能够返回。
第二次启动 floodfill,稍后您应该重新使用您的字段的这个克隆版本,看看它是否在那里被填充。这将允许您最多检查每个点一次,这将使您的 8 个 floodfill 几乎与 1 个 floodfill 一样快。
关于java - 简单的java游戏: Filling up figures drawn by a moving cursor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15525186/