IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Physique Discussion :

Algorithme de calcul de chemins


Sujet :

Physique

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Algorithme de calcul de chemins
    Bonjour, je suis en train de développer un petit Tactic RPG pour un projet et j'ai un problème avec la recherche des chemins lors des déplacements des joueurs.

    Lorsque je clique sur une unité, sa zone de déplacement apparait à l'écran mais je n'ai pas trouvé d'algorithme pour que ma zone corresponde vraiment.
    En effet si j'ai une case devant moi sur laquelle je ne peux pas passer, je ne l'affiche pas mais je peux encore passer derrière alors que normalement mon nombre de déplacement est limité et qu'il faut un déplacement de plus pour passer à coter de l'obstacle.

    En gros je cherche un moyen de pouvoir parcourir tous les chemins possibles d'une distance précise correspondant au déplacement de l'unité.

    Si quelqu'un peut m'aider ou me donner une piste.
    Merci bien.

  2. #2
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Points : 2 161
    Points
    2 161
    Par défaut
    salut,

    as-tu cherché du côté de l'algorithme A* ?
    Mon projet du moment: BounceBox, un jeu multijoueurs sur Freebox, sur PC et depuis peu sur smartphone/tablette Android.

  3. #3
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Regarder dans les tutos de DVP.
    Khayyam90 a fait un très bon tuto et un excellent exemple.

    http://khayyam.developpez.com/articles/algo/astar/

    sinon tu as éventuellement des libs comme Opensteer un peu plus complexe et Micropather
    http://www.grinninglizard.com/MicroPather/

  4. #4
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    Comme nouknouk je te conseil l'algorithme A* (A Star), algorithme de recherche du plus court chemin, c'est surement le plus utilisé dans les jeux vidéos (avec quelques optimisations) et il n'est pas très dur à mettre en oeuvre.

  5. #5
    Membre actif
    Profil pro
    Directeur technique
    Inscrit en
    Juillet 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 107
    Points : 200
    Points
    200
    Par défaut
    Citation Envoyé par Zwart Voir le message
    En gros je cherche un moyen de pouvoir parcourir tous les chemins possibles d'une distance précise correspondant au déplacement de l'unité.
    Si je me souviens bien ( corrigez moi si je me trompe, mes souvenirs sont un peu lointains ) A star va s'arrêter des qu'il aura trouver un chemin ( qui en général sera le plus court, mais pas forcement - ex le cas d'un labyrinthe )

    S'il est primordial que tu ai parcouru tout les chemins, dans ce cas je penserait plutôt a l'algo de dijkstra

  6. #6
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    Tout dépend ce qu'il recherche, mais vu qu'il fait un jeu et que l'algorithme de dijkstra peut être très très long, j'espère que son jeu n'est pas en temps réel
    Si ce qui compte c'est de trouver un chemin optimal sans faire ramer => A*

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 537
    Points : 2 548
    Points
    2 548
    Par défaut
    Citation Envoyé par Christuff Voir le message
    S'il est primordial que tu ai parcouru tout les chemins, dans ce cas je penserait plutôt a l'algo de dijkstra
    A* c'est Dijkstra avec de l'euristique. C'est la façon dont tu calcule ton euristique qui va faire les différences précitées.

    Mais si ton euristique reste toujours inférieure au cout réel de déplacement, alors tu économise du calcul par rapport à Dijkstra sans en fausser les résultats.

  8. #8
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Points : 2 161
    Points
    2 161
    Par défaut
    Citation Envoyé par deadalnix Voir le message
    A* c'est Dijkstra avec de l'euristique. C'est la façon dont tu calcule ton euristique qui va faire les différences précitées.
    Certes, mais que A* et Dijksta soient rapprochés dans leur fonctionnement n'empêche pas que la finalité n'est pas la même. A* n'est pas qu'une version 'optimisée' de Dijksta mais offre bel et bien 'service' différent puisqu'elle permet de gagner du temps mais ne garantit pas de retourner le chemin optimum à tous les coups.

    exemples, si:

    - on a genre un jeu de guerre en tour par tour et le but est d'afficher, lorsqu'on clique dessus, toutes les cases atteignables par une unité en fonction de ses 'points d'action' restant, on cherchera une approche systématique car le temps réel n'est plus un problème, par contre on veut être certain que le calcul des points d'actions imputés soit exact, donc le chemin optimal.

    - par contre si on a un jeu genre RTS où on clique sur un unique point de destination, à charge pour l'unité sélectionné de s'y rendre du mieux qu'elle peut, le tout en temps réel, l'approche A* est préférable notamment à cause de contraintes temps réel.

    Bref, tout dépend des besoins de Swart. A priori, et en relisant avec attention son post, je penche finalement pour l'interprétation de Christuff:
    Citation Envoyé par Christuff Voir le message
    S'il est primordial que tu ai parcouru tous les chemins, dans ce cas je penserait plutôt a l'algo de Dijkstra
    Mon projet du moment: BounceBox, un jeu multijoueurs sur Freebox, sur PC et depuis peu sur smartphone/tablette Android.

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 537
    Points : 2 548
    Points
    2 548
    Par défaut
    Citation Envoyé par nouknouk Voir le message
    Certes, mais que A* et Dijksta soient rapprochés dans leur fonctionnement n'empêche pas que la finalité n'est pas la même. A* n'est pas qu'une version 'optimisée' de Dijksta mais offre bel et bien 'service' différent puisqu'elle permet de gagner du temps mais ne garantit pas de retourner le chemin optimum à tous les coups.
    Non, d'ailleurs tu le montre bien dans tes exemples en dessous. A* est fait pour te donner un chemin vers une destination. Dijkstra n'est utile que si tu ne sais pas ou tu vas (comme ton exemple avec les points d'action).

    A* te donnera ou non une solution optimale en fonction de ton euristique. pour avoir une solution il faut que dans tous les cas H < R ou H est ton euristique et R le coût réel optimal.

  10. #10
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 60
    Points : 74
    Points
    74
    Par défaut yop
    je suis tombé sur une implémentation du A* qui ma pas mal plus

    voila le liens,

    http://www.grinninglizard.com/MicroPather/

    j ai trouvé ca plutôt bien pensé , (très facile a intégrer) , tu as juste une fonction a surchargé qui te fourni un objet en paramètre et te demande ses voisin et leur poids (dans le cas d un chemin la distance,,le temps )

Discussions similaires

  1. [Python 2.X] Algorithme dijkstra pour le calcul du chemin optimal
    Par kacimed dans le forum Général Python
    Réponses: 11
    Dernier message: 16/06/2015, 10h49
  2. Algorithme de calcul de tous les chemins
    Par dalilnet dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 15/07/2009, 19h08
  3. Y-a t-il plusieurs algorithmes de calcul de l'amortissement d'un prêt?
    Par kouka dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 12/09/2007, 13h33
  4. algorithme de Ford (recherche chemin le plus court)
    Par abstraite dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 19/05/2005, 10h39
  5. Algorithme de recherche de chemin
    Par amelie gaya dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 09/06/2002, 15h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo