2013-03-20 66 views
2

因此,我正在做一个Java课程介绍的项目,看起来我选择的东西超出了我所能做的。 :P
任何帮助将不胜感激。这是我遇到的问题是什么:简单的java游戏:填充由移动光标绘制的图形

你必须留下一个颜色的线,因为它去的是由玩家控制(前进或 转90°)的光标。如果你设法通过你自己的线去 并关闭任何形状的多边形(只有直角 虽然),但它的表面将颜色变成线条的颜色。

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

我看了一下扫描线填充算法,但我认为在地图上已经有一些多边形已经填满时会出现问题。 该填充算法将是完美的,如果我有一种方法在多边形内找到一个点,但是,因为有很多不同的可能性,我想不出一个通用的规则。

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

有没有人有如何解决这个问题的想法?

+0

你能发表一些你的代码吗?到目前为止尝试过的东西? – Aboutblank 2013-03-20 13:49:54

回答

1

如果您可以检测到这种情况,那么可以通过非常简单的方式解决这个问题。问题是选择哪个点作为填充的起点。简单的答案是:尝试所有这些。当然,只有在与光标所在位置相邻的点开始时才有意义。在这种情况下,您最多可以检查8个点。更好 - 如果当前点形成多边形,至少其中2个已经被绘制。

所以你有8点检查。从每个点开始进行8次填充。

两件事你应该记住:

  1. 你应该尝试,以填补该地区在你的领域的克隆版本,能够得到回来,如果floodfill不会找到一个多边形。

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

+0

哇,感谢您的快速响应! – 2013-03-20 14:10:45