2012-04-10 15 views
0

Ich bin auf einem einfaches Multiplayer-Spiel arbeiten, die eine zufällige 4x4-Matrix von einem Server und Extrahieren eine Form aus ihremeinfacher Erfassungsalgorithmus

beispielsweise erhält:

XXOO 
XXOX 
XOOX 
XXXX 

OXOO 
XXOO 
XOOO 
OXXX 

so in der ersten Matrix des i analysieren möchten Form ist dies:

oo 
o 
oo 

und die zweite:

oo 
    oo 
ooo 

Ich weiß, es muss ein Algorithmus dafür sein, weil ich diese Art von Verhalten auf einige Puzzle-Spiele gesehen, aber ich habe keine Ahnung, wie etwa zu gehen, um sie zu erkennen oder sogar eine Idee, wo

so meine Frage beginnen ist: Wie erkenne ich, welche Form in der Matrix ist und wie kann ich zwischen mehreren Farben unterscheiden? (Aka..it kommt nicht nur in x und o..it kommt in maximal 4)

Anmerkung: die Form muss mindestens 4 Blöcke sein

+4

Versuchen Sie nur die größte zusammenhängende Gruppe von "O" s zu extrahieren? Diese Frage benötigt mehr Details und Kontext. – jli

+2

Was ist, wenn es mehr als eine "Form" gibt (z. B. die erste und letzte Spalte sind alle O). Der Algorithmus wird einfach sein, sobald Sie eine klare Definition von "Form" haben. – dlev

+1

ja die größte Form einer bestimmten Farbe – ion

Antwort

0

Es ist nicht ganz klar, was Sie wollen zu tun, aber es scheint, als ob Sie eine Art Form extrahieren möchten (basierend auf dem zweiten Beispiel, oben links O nicht enthalten). Ich würde darüber nachdenken, das Array zu durchqueren und für jede Zelle nach dem benachbarten O s zu suchen. Vermeide die Duplikate, die du wahrscheinlich zählen wirst (vielleicht, indem du nur die Nachbarn unten rechts neben der Zelle betrachtest, die du untersuchst). Dann, wenn es irgendwelche Kriterien erfüllt, die Sie für eine "Form" wünschen. Vielleicht, wenn Sie mehr Beispiele oder eine bessere Beschreibung geben, können wir genauer sein. Oder gib es dir selbst und poste, wo du feststeckst.

0

Mai werden Sie dies versuchen:

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. 

Sie können einige Optimierungen tun, wie für aufeinanderfolgende, nur die i.Vj. überprüfen. val im Array. Für die Vertikale nur vier vorige Werte prüfen.

Vergessen Sie auch nicht, spezielle Bedingungen für Grenzwerte wie 4 & 5. Ich dont sie werden eine Form zu machen.