java - 简单的java游戏: Filling up figures drawn by a moving cursor

标签 java 2d-games flood-fill point-in-polygon

所以我正在做 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 次。

您可能应该记住两件事:

  1. 您应该尝试在您的字段的克隆版本中填充该区域,以便在 floodfill 找不到多边形时能够返回。

  2. 第二次启动 floodfill,稍后您应该重新使用您的字段的这个克隆版本,看看它是否在那里被填充。这将允许您最多检查每个点一次,这将使您的 8 个 floodfill 几乎与 1 个 floodfill 一样快。

关于java - 简单的java游戏: Filling up figures drawn by a moving cursor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15525186/

相关文章:

java - 关于在 Eclipse 中调试 SWIG 包装的 C++ 代码的技巧?

java - 关于 Java 的 StackOverflow 输出的问题

unity3d - unity : error CS0246: The type or namespace name 'image' could not be found (are you missing a using directive or an assembly reference?)"

ios - 重新打开游戏时执行“追赶”

android - Android 上的 Pygame/Kivy?

java - RMI 安全管理器

java - 如何在Eclipse Scout框架中设置不同的日志级别?

c++ - 递归 floodFill 函数? C++

javascript - 在 JavaScript 中识别位掩码中的湖泊

c++ - OpenGL 洪水填充无法识别边界