CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

STR Pending Queue, comment faire ?

News jeu

Expeditions: Samurai veut révolutionner le RPG tactique avec une aventure entièrement jouable en coop

Voir
unitedelite29
unitedelite29
Niveau 10
02 juin 2013 à 19:09:33

Salut a tous,

je pose beaucoup de question sur le fonctionnement des jeux (option, ia, ect.) et actuellement c'est sur le fonctionnement d'un système de "pending queue " des STR

Je vais prendre quelques exemple :
Prison architect : ont place les murs/objets a construire, les ouvrier reçoivent cette ordre et vont chercher les ressources et les deposé
Dwarf fortress : ont indique un endroit a creuser et un nain va creuser a cette endroit

Comment ça fonctionne ? comment les ordres sont placé en attente ?

Et j'en profite : Comment faire pour qu'un entité en suis un autre sans avoir a passer aussi par un algorithme de pathfinding (le problème et que si l'entité cible passe entre 2 poteau par exemple, l'entité suiveuse va se retrouver bloqué contre l'un des deux poteau comme un con)

en gros : comment le système d'ordre des str fonctionne ?
merci d'avance pour tout éclaircissement ^^

unitedelite29
unitedelite29
Niveau 10
02 juin 2013 à 19:56:20

ce que je veut dire par "Comment ça fonctionne ? comment les ordres sont placé en attente ? " c'est comment placer en attente des ordres genre "goto" ou "gather" ?

( une structure qui contiens la position de l'ordre avec un string du type de l'ordre (genre "Go to" "gather) ensuite l'entité viens prendre cette ordre dans la pile il interprète le type (exemple : si type = "goto" calcul le chemin" )?

pour l'ordre de suivi c'est vrai que ça pourrais être une solution, mais les entité finirais soit par se chevaucher (si ils sont plusieurs) soit par voyager en ligne, non ?

unitedelite29
unitedelite29
Niveau 10
04 juin 2013 à 11:06:22

Personne ?

hapliniste
hapliniste
Niveau 9
04 juin 2013 à 11:54:07

A mes yeux si tu ne veux pas que les unités se suivent en utilisant exactement le même chemin, il faudra faire du pathfinding pour chaque unité :ok:

Et une file FIFO me parait plus adaptée au système d'ordres personnellement :oui: Après c'est une simple pile de tache à effectuer, tu pourrais y décrire l'action a faire et sa position par exemple.
Ensuite les unités regardent la file et effectuent l'action selon son type (et la sortent de la file une fois acceptée/terminée) :)

[-ArK-]
[-ArK-]
Niveau 30
04 juin 2013 à 13:03:12

"( une structure qui contiens la position de l'ordre avec un string du type de l'ordre (genre "Go to" "gather) ensuite l'entité viens prendre cette ordre dans la pile il interprète le type (exemple : si type = "goto" calcul le chemin" )?
"

:d) ouais tu pourrais faire ça je pense :doute:

"pour l'ordre de suivi c'est vrai que ça pourrais être une solution, mais les entité finirais soit par se chevaucher (si ils sont plusieurs) soit par voyager en ligne, non ?"

Pour la problématique du pathfinding et des entités qui se chevauchent ou se suivent en ligne indienne, c'est un problème assez complexe à bien gérer je pense. Dans Supreme Commander 2 pour gérer ça ils utilisaient des algos de flux liquide je crois :doute: Après y'a la technique de la feignasse ou tu permet aux différentes unités de passer à travers d'autres unités et là t'as plus de soucis :hap:

unitedelite29
unitedelite29
Niveau 10
04 juin 2013 à 19:47:52

Je me suis fait un petit prototype rapidement ( en console, donc pas besoin de lib, juste un C/C)

http://pastebin.com/QGN4h8SC

j'ai pas trop poussé le prototype, j'aurais pus définir le type de ressource transporté, si l'ordre est déjà en train d'être complété (pour ne pas l'attribuer a un autre peon) et pas mal d’amélioration, mais qui m'aurais plus que les 20minutes que j'ai passé a le faire =°

Faut juste que je pense au type d'ordre "Move" (déplacer une ressource), ptet en décomposant en 2 ordre "Take" et "Drop" mais je ne vois pas comment faire sans attribuer les deux ordres dans une liste qu'aurais le peon

le-chocolat
le-chocolat
Niveau 9
04 juin 2013 à 20:00:43

Pour ton problème de path finding lis des articles sur le A*
je pense que ca pourrais te convenir.
sinon pour ton systeme d'ordre une FIFO.

le-chocolat
le-chocolat
Niveau 9
04 juin 2013 à 20:01:43

oups double poste.
http://en.wikipedia.org/wiki/A*_search_algorithm

c'est bien expliqué

unitedelite29
unitedelite29
Niveau 10
04 juin 2013 à 20:14:59

j'en ai déjà fait un, mais quand y'a beaucoup d'entité ça consomme (quand faut gerer une entité qui dois en suivre une autre ça doit recalculer souvent une route pour éviter qu'il continu de suivre sa route alors que l'entité a suivre a changer de chemin)

webpsi
webpsi
Niveau 9
04 juin 2013 à 20:57:48

"mais quand y'a beaucoup d'entité ça consomme"
Je pense que tu applique trop bêtement les tutos que tu trouve sur le net (on a tous débuter un jour c'est normal), mais il est important de prendre un peu de recul sur ce que l'on apprend.

Déjà au niveau du code : tu fait du C++ alors fait de l'objet et arrête de coder en procédural comme en C.

Ta fonction main fait 100 lignes : NON, c'est trop, l'organisation du projet n'est pas vraiment la bonne, ton main doit contenir très peu de code. En fait à ton niveau aucune de tes fonctions ne doit contenir autant de lignes de code.

"string type;" Les types doivent toujours être une énumération (ou un entier)

"int posX, posY; // position de l'ordre
int posX2, posY2; // position de l'ordre en cas d'ordre "Move"
Va voir du côté du polymorphisme, c'est pas correct de faire comme ça, en fait une structure pour des ordres n'est pas très adapté, le mieux est de faire une classe pour chaque ordre. En faisant comme ça tu éliminera normalement tes problèmes de performances de l'IA.
D'un point de vue conception actuellement tu as : "une unité exécute un ordre" si plusieurs unités exécutent le même ordre (un move avec plusieurs unités de sélectionné par exemple) chaque unité va calculer la même chose. Avec des classes bien faites tu auras : "un ordre controle des unités", donc par exemple l'ordre move calculera une seule fois le chemin et déplacera les unités, peu importe le nombre d'unité, l'ordre ne sera calculé qu'une seule fois.

Du coup il te faudra une queue d'unité qui ne font rien, et c'est l'ordre qui ira prendre les unités de libres ou qui attendra qu'une unité se libère.
Faire comme ça est beaucoup plus complexe à mettre en place (ça reste à la portée d'un débutant :-))) ) mais permet de faire des jeux beaucoup plus gros plus rapidement.

unitedelite29
unitedelite29
Niveau 10
05 juin 2013 à 09:11:13

la j'ai tout calé dans le main pour le prototype d'une Queue liste, ensuite je compte l’intégrer dans mon programme qui en a besoin , généralement j'utilise d'autre fichier ou des classes (la j'ai fait le péon en structure, mais généralement je fait une classe "Humain" ou un truc du genre pour dériver facilement vers d'autre type d'humain (guerrier par exemple) )

voici le main d'un autre de mes projet : http://pastebin.com/u365jcG2

tout ce qui est dedans c'est : l'affichage du menu, des boutons et des textes, et la gestions des boutons (le clique sur ceux ci)

Je vais voir pour faire la méthode que tu ma conseillé ^^

le-chocolat
le-chocolat
Niveau 9
05 juin 2013 à 19:19:50

Pour te donner une idée voila le main d'un jeux que j'avais fait.
http://pastebin.com/HYgSenxV

PatateChocolat
PatateChocolat
Niveau 9
05 juin 2013 à 20:18:47

C'est moche le code Français, le code Franglais est encore pire :malade: .

propriete.GetListeBouton
propriete.GetFenetre().clear();
dessinerInterface("Menu");
afficherInfoGroupe();
dessinerAction();
dessinerGestion();
decorPremierPlan();
propriete.GetFenetre().display();

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware