Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » Gérer les déplacements des IA (ennemis)
Rudy49 Hors ligne Membre Points: 37 Défis: 0 Message

Gérer les déplacements des IA (ennemis)

Posté le 22/04/2020 12:05

Bonjour à tous !

J'ai un p'tit projet de programme en C sauf que je ne sais pas comment gérer le déplacement des ennemis, et c'est assez problématique pour un jeu avec des tanks !
En gros, ce que je voudrais faire, c'est qu'un ennemis, placé a un endroits donné, puisse contourner des obstacles pour venir sur ma position, qui évolue (logique: on se déplace). De plus,j'aimerais que ces IA (il y aura plusieurs ennemis) contournent les murs sans les coller et sans les traverser (ne pas longer les murs jusqu’à une ouverture).Dernière difficulté, il ne faut pas leur dicter à l'avance leurs déplacements, car ils devront aussi esquiver des tirs (chose que je programmerais plus tard).

Auriez-vous une méthode (pas forcément le code) ?


Lephenixnoir Hors ligne Administrateur Points: 24575 Défis: 170 Message

Citer : Posté le 22/04/2020 12:11 | #


Ce que tu cherches s'appelle une recherche de chemin (ou pathfinding). Il y a plein d'algorithmes pour faire ça. Le plus simple est de faire un parcours en largeur de ta map ; le tank explore toutes les cases où il peut aller, de la plus proche à la plus lointaine, jusqu'à tomber sur la destination qu'il vise.

Au niveau un peu au-dessus, tu as l'algorithme de Dijkstra, qui va un peu plus vite ; et au niveau bien au-delà, tu as des choses comme A* qui vont très vite mais sont assez compliqués à coder.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dark storm En ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 22/04/2020 12:12 | #


Pour ce qui est des techniques de pathfinding, j'adore les articles de Redblob games

Entre autres :
https://www.redblobgames.com/pathfinding/grids/algorithms.html
http://theory.stanford.edu/~amitp/GameProgramming/
https://www.redblobgames.com/pathfinding/tower-defense/
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Rudy49 Hors ligne Membre Points: 37 Défis: 0 Message

Citer : Posté le 22/04/2020 12:25 | #


Super ! Merci !
Je teste ça tout de suite !

Ajouté le 23/04/2020 à 10:48 :
et tant qu'on y est, le programme peut-il détecter les pixels noir ou il faut lui donner les coordonnées des murs ?
Les inconnus a écrit :
Il ne faut pas prendre les gens pour des cons, mais il ne faut pas oublier qu'ils le sont !
Dark storm En ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 23/04/2020 10:51 | #


De manière générale, en C, on a tendance à garder en mémoire les objets. C'est plus pratique pour gérer les collisions. Après si tu as une matrice de 128×64 valeurs, autant lire directement dans la VRAM. Par contre pour ça la méthode change suivant ton environnement de développement. Tu utilise quoi pour dessiner ?
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Rudy49 Hors ligne Membre Points: 37 Défis: 0 Message

Citer : Posté le 23/04/2020 10:54 | #


Je dessine sur paint puis je convertit l'image avec SpriteCoder. La map est pour l'instant dessinée avec des carrés et des rectangles. Je pense modifier ça avec des sprites de dimention 127x63.
Du coup il faut les co des murs c'est ça ?
Les inconnus a écrit :
Il ne faut pas prendre les gens pour des cons, mais il ne faut pas oublier qu'ils le sont !
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 23/04/2020 11:42 | #


Personellement pour alléger le tout j'aurais tendance à découper l'écran en carrés comme aux échecs. Comme ça tu as une matrice "map" de taille raisonnable (genre 10*8 par exemple..) et a chaque case tu associe un sprite (si il y a quelque chose à afficher bien sur). Après l'IA peut se référer a la matrice "map" pour ses déplacements.
Dark storm En ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 23/04/2020 11:43 | #


Je parlais de la bibliothèque de dessin. gint, MonochromeLib ?
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Kikoodx Hors ligne Ancien labélisateur Points: 3039 Défis: 11 Message

Citer : Posté le 23/04/2020 11:45 | #


Vu qu'il utilise SpriteCoder je suppose qu'il code avec MonochromeLib.
ouais ouais
Rudy49 Hors ligne Membre Points: 37 Défis: 0 Message

Citer : Posté le 24/04/2020 15:12 | #


Bien vu !
Point de vu technique: j'ai le sprite de mon niveau. Ok. Et à partire de là il faut que je déduise la position des mur ? Comment ?
Les inconnus a écrit :
Il ne faut pas prendre les gens pour des cons, mais il ne faut pas oublier qu'ils le sont !

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 137 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd