2009-07-05 5 views
1

J'ai fait un jeu qui est presque identique à l'Atomica de Popcap. (http://www.popcap.com/gamepopup.php?theGame=atomica)Bloquer l'utilisateur de se déplacer n'importe où

Il est presque terminé, sauf pour une fonction importante; bloquer l'utilisateur de déplacer des sphères n'importe où. Par exemple, s'il y a un mur d'autres sphères entre la sphère que l'utilisateur essaie de déplacer et le champ auquel il tente de le déplacer, l'utilisateur ne devrait pas pouvoir le déplacer. J'ai stocké tous les champs et sphères dans un tableau multidimensionnel [x-loc, y-loc] où "e" est vide, "s" sphère, etc. J'ai essayé de faire une boucle pour trouver dehors s'il y a une route claire entre les deux champs, mais rien n'a fonctionné.

Quelqu'un peut-il s'il vous plaît me donner un indice de la façon dont je peux résoudre ce problème?

+0

Voir ces questions sur le chemin: Trouver http://stackoverflow.com/search?q=path+finding Et ces questions sur détection de collision: http://stackoverflow.com/search?q=collision+ détection Puis réessayez avec un problème plus spécifique. Ou postez votre code et nous vous dirons où cela ne fonctionne pas. –

+0

Ne stockez pas les données sous forme de chaînes/caractères. Stockez-le comme une énumération. –

+0

Charlie: Pourquoi? C'est plus facile de cette façon, car les sphères peuvent être de différentes couleurs. Comme "sr" pour une sphère rouge, "sb" pour une sphère bleue, etc. – Phoexo

Répondre

0

Vous devez exécuter un algorithme de chemin comme Floyd-Warshall ... omettre des notes et des bords non valides de votre matrice (ie le graphique que vous regardez serait le sous-graphe de tous les nœuds sans sphère) de sorte que vous créez un graphique de seulement des mouvements légaux. Ensuite, un algorithme de chemin comme Floyd-Warshall vous donnera tous les mouvements "légaux".

Questions connexes