在“ Quath”游戏中,您填充该图块并将其变为矩形。 阻止将被删除。
[
[1,1,1,1,1],
[1,0,0,0,0]
]
// when rectangle complete ⤵️
[
[1,1,1,1,1],
[1,1,1,1,1]
]
但是,如果两个块连接在一起,当它们变成一个大矩形时,它们将一起被擦除。
[
[1,1,1,1],
[1,0,0,1],
[1,2,2,1],
[0,0,2,0],
[0,0,2,0]
]
//when rectangle complete,two block erase at same time
[
[1,1,1,1],
[1,0,0,1],
[1,2,2,1],
[1,2,2,1],
[1,2,2,1]
]
在实际游戏中,区块布局似乎更加复杂。
我想知道如何判断地图中最大的闭合矩形。
答案 0 :(得分:0)
erase target image
为自己找到了解决此问题的方法。
以上面的图片为例。
给每个块一个ID,然后地图可以表示为下面的数组
[
[a,a,a,a,a,b,b,b,0,0,0,0]
[d,d,a,c,c,c,c,b,0,i,i,i]
[d,0,0,0,0,0,0,b,h,h,h,i]
[d,0,0,0,0,0,0,g,g,g,h,i]
[d,0,0,0,0,f,f,f,f,g,h,0]
[d,e,e,e,e,0,0,0,0,g,0,0]
]
尝试填充块“ f”
[
[a,a,a,a,a,b,b,b,0,0,0,0]
[d,d,a,c,c,c,c,b,0,i,i,i]
[d,0,0,0,0,0,0,b,h,h,h,i]
[d,0,0,0,0,0,0,g,g,g,h,i]
[d,0,0,0,0,f,f,f,f,g,h,0]
[d,e,e,e,e,f,f,f,0,g,0,0]
]
在4个方向上移动光标,如果找到0,则减小矩形的高度或宽度
在下面得到一个矩形,我称它为“绑定行者”
[
[a,a,a,a,a,b,b,b]
[d,d,a,c,c,c,c,b]
[d,0,0,0,0,0,0,b]
[d,0,0,0,0,0,0,g]
[d,0,0,0,0,f,f,f]
[d,e,e,e,e,f,f,f]
]
但“ block i”的一部分仍在大矩形的外部
我们可以删除地图数组中的矩形区域,
并发现还有剩余的零件
如果没有剩余的部分,我们可以擦除大矩形
继续填充“ f块” “绑定的助行器”可以轻松地将其变成实心矩形并将其擦除
然后尝试填充“块g”
我们将得到一个像这样的矩形
[
[b,h,h]
[g,g,g]
[g,g,g]
[g,g,g]
]
包含矩形的矩形需要删除
所以我们需要删除多余的部分,然后擦除正确的区域
判断步骤:
1.拍摄块,块将成为块集的一部分
2.运行“绑定的助行器”
3.如果结果矩形只有一列或一行,则它不是有效的矩形(结束判断)
4.找到矩形中的多余部分
5.如果否,请擦除矩形(结束判断)
6.如果是,则删除多余的部分,找到矩形左端,再次运行绑定的walker(结束判断)
我认为这不是解决此问题的最佳方法。
可能很慢,有人知道吗?