我正在开发一款简单的多人游戏,从服务器接收随机4x4矩阵并从中提取形状
例如:
XXOO
XXOX
XOOX
XXXX
OXOO
XXOO
XOOO
OXXX
所以在第一个矩阵中,我要解析的形状是:
oo
o
oo
和第二名:
oo
oo
ooo
我知道必须有一个算法,因为我在一些益智游戏中看到了这种行为,但我不知道如何去检测它们甚至知道从哪里开始
所以我的问题是:如何检测矩阵中的形状以及如何区分多种颜色? (aka ..它不仅仅出现在x和o ..最多有4个)
注意:形状必须至少为4个块
答案 0 :(得分:0)
目前还不完全清楚你想要做什么,但似乎你想要提取某种形状(基于第二个例子,左上角O
未被包括在内)。我考虑遍历数组,并为每个单元格检查相邻的O
。折扣您可能会计算的重复项(可能仅查看您正在检查的单元格下方和右侧的邻居)。然后,如果它满足你想要的'形状'的任何标准。也许如果您提供更多示例或更好的描述,我们可以更准确。或者自己试一试并发布卡住的地方。
答案 1 :(得分:0)
可能你可以试试这个:
1. Assign integer values to each position in the matrix, like this, [1,2,3,4
5,6,7,8
9,10,11,12
13,14,15,16].
2.Read the position of zeroes. (I guess, shapes correpond to '0' s located either horizontally or vertically aligned). Store them in an array. So, for first case your array will read [3,4,7,11,10]
2. Then Start 'drawing' the shape.
1. First value 3. so shape= 0.
2. Next value 4. Check if it is consecutive to any other value in the array. that value is 3. so the shape = 00
3. Next val= 7. Is it consecutive ? no. Is it 4 more than any other value? yes, 3. So it goes below 3. shape= 00
0
4. Next 11, similar to step3, it goes below 7. shape= 00
0
0
5. Next 10, it is one less than 11, so it is placed before 11. shape= 00
0
00.
你可以做一些优化,比如连续,只检查prev。数组中的val。 对于垂直,仅检查四个prev值。
另外,不要忘记边界值的特殊条件,如4&我不会形成一个形状。