简单的java游戏:填充移动光标绘制的图形

简单的java游戏:填充移动光标绘制的图形,java,2d-games,flood-fill,point-in-polygon,Java,2d Games,Flood Fill,Point In Polygon,所以我正在做一个Java入门课程的项目,似乎我选择了一些超出我能力范围的东西:P 任何帮助都将不胜感激。这就是我遇到的问题: 您有一个由玩家控制的光标(向前或向后) 旋转90°),在旋转过程中留下一条彩色线。如果你设法去的话 在自己的直线上闭合任意形状的多边形(仅直角 但是,它的表面会将颜色更改为线条的颜色 我可以检测到这种情况何时出现,但我有点迷茫,因为如何实际填充刚刚闭合的正确多边形。我似乎无法想象一个算法能覆盖任何可能的情况 我查看了扫描线填充算法,但我认为当地图中已经填充了一些多边形时,

所以我正在做一个Java入门课程的项目,似乎我选择了一些超出我能力范围的东西:P
任何帮助都将不胜感激。这就是我遇到的问题:

您有一个由玩家控制的光标(向前或向后) 旋转90°),在旋转过程中留下一条彩色线。如果你设法去的话 在自己的直线上闭合任意形状的多边形(仅直角 但是,它的表面会将颜色更改为线条的颜色

我可以检测到这种情况何时出现,但我有点迷茫,因为如何实际填充刚刚闭合的正确多边形。我似乎无法想象一个算法能覆盖任何可能的情况

我查看了扫描线填充算法,但我认为当地图中已经填充了一些多边形时,它就会开始出现问题。 如果我有办法在多边形内找到一个点,洪水填充算法将是完美的,但是,由于有许多不同的可能性,我想不出一个通用的规则

我使用的是一个2x2整数数组,其中每种颜色由一个数字表示


有人知道如何解决这个问题吗?

如果你能发现这种情况,那么就可以用非常简单的方式解决。问题是选择哪个点作为洪水填充的起点。简单的答案是:尝试所有的方法。当然,只从光标所在位置附近的点开始是有意义的。在这种情况下,您最多需要检查8点。更妙的是,如果当前点形成多边形,则至少有2个点已经被绘制

所以你有8点要检查。从每个点开始进行8次注水

您可能应该记住两件事:

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

  • 第二次启动floodfill后,您应该重新使用字段的克隆版本,以查看字段是否已填充。这将允许您最多检查一次每个点,这将使您的8次注水几乎与1次注水一样快


  • 检查此问题,使用Graphics2和多边形填充任意多边形:

    确定点是位于多边形内部还是外部:


    确保使用双缓冲。如果设置单个像素,而不使用双缓冲,则在设置每个像素后,组件可能会重新绘制。

    能否发布一些代码?到目前为止,你尝试了什么?