简单的检测算法

时间:2012-04-10 23:11:55

标签: objective-c c algorithm

我正在开发一款简单的多人游戏,从服务器接收随机4x4矩阵并从中提取形状

例如:

XXOO
XXOX
XOOX
XXXX

OXOO
XXOO
XOOO
OXXX

所以在第一个矩阵中,我要解析的形状是:

 oo
 o
oo

和第二名:

  oo
  oo
 ooo

我知道必须有一个算法,因为我在一些益智游戏中看到了这种行为,但我不知道如何去检测它们甚至知道从哪里开始

所以我的问题是:如何检测矩阵中的形状以及如何区分多种颜色? (aka ..它不仅仅出现在x和o ..最多有4个)

注意:形状必须至少为4个块

2 个答案:

答案 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&我不会形成一个形状。