Comment implémenter un moteur de jeu au tour par tour?

17

Imaginons un jeu comme Heroes of Might and Magic, ou Master of Orion, ou votre jeu de choix au tour par tour. Quelle est la logique du jeu derrière le prochain tour? Y a-t-il du matériel ou des livres à lire sur le sujet? Pour être précis, imaginons une boucle de jeu:

void eventsHandler(); //something that responds to input
void gameLogic(); //something that decides whats going to be output on the screen
void render(); //this function outputs stuff on screen

Tous ceux qui sont appelés disent 60 fois par seconde. Mais comment le tour par tour entre-t-il ici? Je pourrais imaginer que dans gameLogic (), il existe une fonction comme endTurn () qui se produit lorsqu'un joueur clique sur ce bouton, mais comment puis-je gérer tout cela? Besoin d'informations.

Dvole
la source

Réponses:

21

Un jeu au tour par tour va être régi par une machine d'état . Fondamentalement, vous exposeriez une série d'états pouvant se produire dans un ordre logique.

À un niveau élevé, le tour d'un joueur peut être le début d'un nouvel état, suivi de toutes les actions possibles qui sont autorisées pendant ce tour.

Par exemple

  • État - changer de joueur
    • c'est maintenant au tour du joueur 1
  • Actions autorisées
    • attaque
      • sélectionner l'ennemi à attaquer
    • défendre
      • sélectionner l'unité à défendre
    • déplacer l'unité
      • sélectionner l'unité à déplacer
      • vérifier que le mouvement est autorisé
    • etc

Évidemment, cela montera en flèche assez rapidement, car je n'ai esquissé qu'un plan extrêmement limité. Avoir une bonne compréhension des états possibles dès le début signifie que vous devriez être en bonne position pour mettre en œuvre. J'insisterais fortement sur l'esquisse exacte de la façon dont vous voulez que le jeu fonctionne ... un bon jeu au tour par tour nécessite beaucoup de planification IMO.

te
la source
Un projet assez ancien de l'école qui était une tentative de développement de 3 mois chez Final Fantasy Tactics :) Utilise une machine d'état (quelques-uns en fait) comme décrit ci-dessus. sourceforge.net/projects/bpfat
James
Hé, qu'en est-il de Game Engine pour la stratégie au tour par tour? Pourriez-vous me conseiller? Peut-être que le moteur Unreal pourrait convenir?
Rantiev
À chacun ses goûts. Si vous êtes à l'aise avec le moteur Unreal, il n'y a rien de mal à cela. Tout dépend de la mécanique dont vous souhaitez profiter. Une recherche rapide indique qu'il existe un kit d'outils pour le moteur Unreal pour aider à créer des jeux de stratégie au tour par tour, bien qu'il ne soit pas gratuit.
the_e
3

J'ai récemment construit un jeu de stratégie au tour par tour similaire à Master of Orion (ce n'est qu'un seul joueur en ce moment, le multijoueur serait un peu plus complexe, mais une idée similaire), voici à quoi ressemble ma logique de fonction endTurn (dans mon classe principale du contrôleur de jeu):

//for all computer players:
computerTakeTurn(player)

//for all players
moveShips(player)

//for all players
endTurn(player)//see this function below

//for all planets
planet.repairFleet()

//for all players
resolvePlanetaryConflicts(player)

//check to see if any players were destroyed or if the game is over
checkPlayerDestroyedAndGameOver()

La fonction de fin de tour de mon joueur exécutera des fonctions spécifiques à ce joueur qui n'est pas affecté par l'ordre dans lequel il se déroule entre les joueurs:

eatAndStarve()

generatePlayerResources()

buildPlayerPlanetImprovements()

growPlayerPlanetPopulation()

Le cas échéant, ces fonctions renvoient des messages d'état et / ou déclenchent des événements afin que l'interface graphique puisse montrer ce qui s'est passé pendant le tour ou faire savoir au joueur qu'un ordinateur a été détruit, etc ...

Matt Palmerlee
la source
pourriez-vous s'il vous plaît fournir le code source juste pour vérifier? Serait d'une grande aide. Juste à des fins éducatives.
Dvole
@Dvole Je travaille actuellement sur la conversion du code de Silverlight / C # en JavaScript à l'aide de la balise canvas HTML5. Une fois que j'ai terminé, je prévois d'ouvrir le code source et à ce moment-là, vous êtes plus que bienvenus pour voir exactement comment j'ai mis en œuvre cette fonction. Si cela vous aide à trouver le contexte, vous pouvez jouer à mon jeu de stratégie spatiale ici: Astriarch - Ruler of the Stars
Matt Palmerlee
2
@Dvole Cela m'a pris un certain temps, mais je viens d'ouvrir la version Silverlight d'Astriarch. Si vous êtes toujours intéressé, vous pouvez télécharger le code source de github ici: github.com/mpalmerlee/Astriarch/tree/Silverlight
Matt Palmerlee