0

サーバーからランダムな 4x4 マトリックスを受け取り、そこから形状を抽出する単純なマルチプレイヤー ゲームに取り組んでいます

例えば:

XXOO
XXOX
XOOX
XXXX

OXOO
XXOO
XOOO
OXXX

したがって、最初のマトリックスで解析したい形状は次のとおりです。

 oo
 o
oo

そして2番目:

  oo
  oo
 ooo

一部のパズルゲームでこの種の動作を見たので、これにはアルゴリズムが必要であることは知っていますが、それらを検出する方法や、どこから始めればよいかさえわかりません

私の質問は次のとおりです。マトリックス内の形状を検出するにはどうすればよいですか?複数の色を区別するにはどうすればよいですか? (別名、x と o だけではなく、最大 4 つ)

注: 形状は 4 ブロック以上である必要があります

4

2 に答える 2

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.

連続する場合など、いくつかの最適化を行うことができます。前のページのみを確認してください。配列内の val。垂直方向の場合、4 つの prev 値のみを確認します。

また、4と5のような境界値の特別な条件を忘れないでください。それらは形を作りません。

于 2013-07-26T09:12:19.973 に答える
0

何をしたいのかは完全には明らかではありませんが、ある種の形状を抽出したいようです (2 番目の例に基づいて、左上Oは含まれていません)。配列をトラバースすることを考え、セルごとに隣接するOs をチェックします。カウントする可能性が高い重複を割り引きます (おそらく、調べているセルの下と右にある隣接セルのみを調べることによって)。次に、「形状」に必要な基準を満たしている場合。より多くの例やより良い説明を与えると、より正確になる可能性があります. または、自分で試してみて、行き詰まった場所に投稿してください。

于 2012-04-10T23:17:26.990 に答える