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



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

你有一个由玩家控制的光标(向前或。旋转90°),在移动时留下一条彩色线。如果你能去的话在你自己的直线上并关闭任何形状的多边形(只有直角)虽然),但它的表面会变成你的线的颜色。

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

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

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

谁有办法解决这个问题?

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

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

你可能应该记住两件事:

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

  2. 第二次启动洪填充时,您应该重用此克隆版本的字段,以查看是否已填充。这将允许你最多检查一次每个点,这将使你的8次洪水填充几乎和1次洪水填充一样快。

检查这个问题,使用Graphics2和Polygon填充任意多边形:java swing: Polygon填充颜色问题

查找一个点是在多边形内还是在多边形外:http://en.wikipedia.org/wiki/Point_in_polygon

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

最新更新