Bonjour,
Je tiens à signaler que cela est mon premier poste sur developpez, j’ai lu la FAQ et j’espère donc être au bon endroit. Si tel n’est pas le cas je présente d’avance mes excuses aux modos.
CONTEXTE :
Tout d’abord voici le contexte qui m’amene à poster (Pour ceux qui veulent passer cette partie rendez-vous à la partie « Problématique »). Je suis actuellement étudiant en informatique et nous (une équipe de 4 étudiants) avons pour notre 3ème année décidé de présenter un jeu vidéo de type RTS codé en C++ pour le moteur et SFML pour la partie graphique.
Après 3 à 5 mois de travail nous avons réussi à implémenter les parties suivantes:
• Un menu d’accueil par lequel le joueur peut se connecter au serveur en renseignant l’adresse IP du serveur et le login que le joueur souhaite avoir durant la partie. Chaque serveur peut accueillir 2 joueurs (le serveur ne peut gérer qu’une seul partie à la fois pour le moment).
• Un système de salle d’attente contenant un chat, un system de sélection du peuple avec lequel le joueur jouera, un system de check Box pour indiquer que le joueur est prêt ou non.
Une fois en jeu le joueur peut :
• Sélectionner 1 ou plusieurs unité simultanément.
• Ordonner à l’unité ou au groupe d’unité de se déplacer.
• Ordonner à l’unité ou au groupe d’unité d’attaquer (si la cible est trop loin l’unité se mettra a porté de tire).
• Ordonner la création de bâtiment grâce aux ouvriers (gestion du system de construction et du multitâche plusieurs construction à la suite).
• Ordonner de réparer un bâtiment.
• Ordonner la création d’unité (j’entends par là une unité autre que de type bâtiment).
• Récolter des ressources.
Tout cela fonctionne parfaitement. A noter que pour la partie graphique nous avons utilisé des sprites pris à starcraft (en attendant d’avoir « mieux »).
Nous avons donc réussit notre challenge (à savoir réaliser un prototype). Et nous passons donc à la partie suivante pour laquelle nous allons avoir un peu plus de 2ans (à savoir rendre un jeu parfaitement 100% finit).
PROBLEMATIQUE :
Pour la partie PathFinding (la partie la plus importante du jeu étant donner que c’est un RTS) nous utilisons le system suivant :
1. L’unité reçoit l’ordre de bouger.
2. La carte de jeu est découpée en secteur grâce à un system de Quadtree (permet d’améliorer les performances sur les longs chemins et encore plus sur les longs chemins avec beaucoup d’obstacles).
3. Un A* est utilisé pour calculer le chemin entre les cases du Quadtree (donnant ainsi des checkpoints).
4. Un A* est utilisé pour calculer le chemin entre 2 checkpoints (ce A* n’est calculé que lorsque l’unité a fini d’exécuter le précèdent chemin entre les 2 checkpoints précèdent).
Ce system est performant et permet de ne pas avoir de lag pour une partie en 1 vs 1 avec 500 unités.
Par contre le point faible de se system est que aucun comportement de groupe n’est géré. Ainsi lorsqu’un groupe doit se déplacer chaque unité calculera son propre chemin. Ce qui est un peu bête… De plus aucune formation de déplacement n’est gérée.
QUESTIONS :
J’aimerai donc savoir comment nous pourrions faire pour gérer un déplacement de groupe. J'ai deux, trois idées sur comment faire pour réaliser cela mais quelques points restes obscures.
Pour cela j’ai plusieurs questions:
• Comment mettre les unités en formation « basique » (ligne de 5 unités de front par exemple).
• Comment faire lorsque les unités n’ont pas tous la même vitesse de déplacement.
• Comment faire lorsque les unités n’ont pas tous la même taille (pour le passage dans des potentiels couloirs former par des obstacles).
• Comment faire si les unités ne démarrent pas tous du même point (par exemple une partie du groupe démarrer depuis la gauche de l’écran et l’autre depuis la droite).
A noter que je ne demande pas de code, mais le concept (le processus) afin de réaliser ce déplacement de groupe. Pour ce qui est du code je serai en mesure de le réaliser une fois que j'aurai les grandes lignes.
En vous remerciant d’avance.
P.S : D’un point de vu plus générale j’accepte tout type de conseils/documentations concernant la création de RTS.
Partager