2012-04-10 5 views
0

je travaille sur un simple jeu multijoueur qui reçoit une matrice de 4x4 au hasard à partir d'un serveur et d'extraire une forme de celui-cialgorithme simple détection

par exemple:

XXOO 
XXOX 
XOOX 
XXXX 

OXOO 
XXOO 
XOOO 
OXXX 

donc dans la première matrice, la forme que je veux analyser est la suivante:

oo 
o 
oo 

et 2ème:

oo 
    oo 
ooo 

je sais qu'il doit y avoir un algorithme pour cela parce que je l'ai vu ce genre de comportement sur certains jeux de puzzle, mais je ne sais pas comment s'y prendre pour les détecter ou même avoir une idée où commencer

donc ma question est: comment puis-je détecter quelle forme est dans la matrice et comment puis-je différencier plusieurs couleurs? (Aka..it ne vient pas seulement en x et o..it est livré dans un maximum de 4)

Note: la forme doit être un minimum de 4 blocs

+4

Essayez-vous simplement d'extraire le plus grand groupe contigu de "O"? Cette question a besoin de plus de détails et de contexte. – jli

+2

Que se passe-t-il s'il y a plus d'une "forme" (par exemple, la première et la dernière colonnes étant toutes des O). L'algorithme sera facile une fois que vous aurez une définition claire de "forme". – dlev

+1

oui la plus grande forme d'une certaine couleur – ion

Répondre

0

Il est pas tout à fait clair ce que vous voulez à faire, mais il semble que vous voulez extraire une sorte de forme (basé sur le deuxième exemple, en haut à gauche O ne pas être inclus). Je penserais à traverser le tableau, et pour chaque cellule, vérifiez les voisins O s. Remettez les doublons que vous comptez probablement (peut-être en regardant seulement les voisins en bas et à droite de la cellule que vous examinez). Ensuite, si elle répond aux critères que vous voulez pour une «forme». Peut-être que si vous donnez plus d'exemples ou une meilleure description, nous pouvons être plus précis. Ou donnez-vous un coup de feu et postez où vous êtes coincé.

0

Peut être que vous pouvez essayer:

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. 

Vous pouvez faire quelques optimisations, comme pour consécutive, seulement vérifier la précédente. val dans le tableau. Pour la verticale, ne vérifiez que les quatre valeurs précédentes.

Aussi, ne pas oublier les conditions spéciales pour les valeurs limites comme 4 & 5. Je ne vais pas faire une forme.