看看这个游戏:http://paper-io.com/
从这个游戏移开后,我一直坚持寻找内部零件的算法。
看我的照片。播放器的原始土地为红色。玩家移动为橙色。新土地是绿色的。
我的问题是如何指定绿色部分。我认为完全移动后,可能有两个部分可以选择为绿色(绿色部分和外部网格部分)。
选择一个开始并找到墙,以知道造成浪费时间的是哪个部分。
感谢您阅读。
答案 0 :(得分:1)
从不是红色或橙色的外边缘的每个点开始填充。
停在红色或橙色方块上。
这将为您提供您将不要填写的区域,因此只需填写剩余的内容即可。
几次都用了100%的paper.io,我可以验证这与它的功能相同。
您还可以同时从新墙的两面注水。如果一个填充物找到了外边缘,则丢弃该边缘并保留另一个。如果一个在找到外边缘之前停了下来,则保留其中一个并丢弃另一个。
答案 1 :(得分:1)
假设您要求使用栅格算法,但让我们尝试推广此问题。
让我们假设我们总是记住占用(红色)区域的电路并将其存储在一个看起来像圆形链表的图形中。每个节点都有坐标(x, y)
。所以我们有这样的东西:
A2 -- A3 -- A4
/ \
A1 A5
\ /
A7 -------- A6
与此同时,我们还记得起点区域内的一个点。
该游戏中的每个回合都从电路上的某个位置开始,或者在现有节点上,或者在现有两个节点之间的新节点上,并在检测到运动矢量和电路的交点时结束。这些节点是P
和R
。此回合绘制的整个路线创建了赛道的新部分。运动矢量是每个时间点中“头部”所执行的步骤。
起始节点P
将边线A3 - A4
分为两个边线A3 - P
和P - A4
,这些边线已添加到图形中。边缘A3 - A4
已从图形中删除。
此步的每一步都增加了下一个边缘:P - B1
,B1 - B2
,...最后,我们将边缘A6 - A7
与A6 - R
和R - A7
进行交换。 / p>
每个圆图如下:
B1 -- B2 -- B3
/ \
A2 -- A3 -- P -- A4 B4
/ \ |
A1 A5 |
\ / B5
A7 ------ R --- A6 /
\ /
B7 --------- B6
现在是时候遍历图表并将访问节点收集到新电路中了。在一系列多边形并集算法或here(第3和第4步)中描述了这种步行方式。
当我们有一个新的电路时,我们可以将其绘制并从记忆点开始填充。