Comment gérer différentes vitesses d'actions dans les jeux RogueLike?


14

Comment gérer différentes vitesses d'actions dans les jeux RogueLike?

Ce que je veux dire, c'est que les jeux au tour par tour peuvent avoir des acteurs agissant à une "vitesse" différente, selon l'action et certaines autres caractéristiques. Les acteurs font alors effectivement plus d'actions / tours que les autres s'ils ont plus de vitesse ou non.

Comment déterminer quand un acteur doit pouvoir agir (planification des tournants?)?

Il semble qu'il y ait différentes façons de le faire? Pouvez-vous en expliquer certains avec des algorithmes?


7
J'ai le sentiment que si vous décrivez en détail les fonctionnalités que vous souhaitez, un algorithme deviendra évident.
Tetrad

Comme l'a dit Tetrad, et qu'entendez-vous par «vitesse des actions»? Les Roguelikes sont généralement au tour par tour, donc je ne vois pas comment cela pourrait s'appliquer à eux.
Laurent Couvidou

2
Même dans les jeux au tour par tour, certaines entités se déplaceront plus rapidement ou plus lentement que d'autres, ayant plus ou moins de tours par rapport aux autres. J'ai corrigé la question.
Klaim

3
@Patrick Hughes Nethack, l'un des roguelikes les plus anciens et les plus populaires, a un attribut de vitesse très important. nethackwiki.com/wiki/Speed
Harry Stern

1
@HarryStern J'ai mal joué tout ce temps? Cela pourrait expliquer quelques choses ... =)
Patrick Hughes

Réponses:


12

Dans mon jeu roguelike Tyrant, j'ai utilisé un système de points d'action et d'indices de vitesse.

Fondamentalement:

  • La plupart des actions avaient un coût en PA de 100
  • La plupart des créatures ont une vitesse de 100

Ensuite, la boucle de jeu se déroulerait comme suit.

  • Le héros prend une action.
  • Le temps écoulé est calculé comme suit: hero action AP cost * 100 / hero speed
  • Toutes les créatures reçoivent des PA égaux à creature speed * elapsed time / 100
  • Les créatures entreprennent des actions et ont des PA soustraits jusqu'à ce que leurs PA soient <= 0
  • Répéter

Ce système fonctionnait très bien dans l'ensemble, par exemple de belles fonctionnalités:

  • Si vous avez un héros très rapide (peut-être en raison d'un bonus de vitesse magique), vous pouvez obtenir plusieurs mouvements avant qu'une créature individuelle ne puisse se déplacer (ses PA seraient négatifs pendant quelques tours car le temps écoulé serait petit)
  • Vous pouvez rendre certaines actions plus ou moins chères en faisant varier le coût des AP
  • Vous pouvez retarder les créatures en soustrayant les PA ou leur donner un coup de pouce ponctuel en ajoutant des PA

Essayer d'envelopper ma tête autour de cela. Si vous avez 1 joueur et 4 joueurs. Cela ne fait-il pas de plus en plus s'écouler la dernière pile de joueurs. Lui permettant de prendre peut-être 4 actions et la deuxième fois environ 8 d'affilée ??
Dr.Denis McCracleJizz

4

Points d'action. Donnez à chaque entité une "vitesse" pour que les acteurs les plus rapides obtiennent plus de points à chaque tour. Faites en sorte que chaque action prenne un nombre spécifique de points pour terminer, et soustrayez ce nombre des points du joueur pour ce tour quand il entreprend une action. Si une action prend plus de points que le joueur n'en a laissé, marquez-la comme "partiellement terminée" et laissez-le terminer le tour suivant.


2

Voulez-vous dire que les actions doivent prendre plusieurs tours (c'est-à-dire dormir 50 tours de suite)?

Ce que je ferais, c'est garder un objet, player.currentAction. currentAction peut contenir le nombre de tours requis par l'action, la résolution de l'action et une liste d'états qui annulent l'action (en danger, attaqué, trop chaud, etc.). Chaque tour, avant de vérifier l'entrée du joueur, nous vérifions si le joueur était actuellement au milieu d'une action, puis faisons quelque chose comme quelque chose comme ...

if(!player.currentAction.interrupted())
{
 if(player.currentAction.complete() == true)
   {
    player.currentAction.doAction(); //Some actions, like casting a spell, would have something happen here. Others, like sleeping, may or may not, depending on how you coded it.
    player.currentAction = null;
   }
else player.currentAction.decreaseTimer(); //Decrease our timer by one.
}
else 
{
 player.currentAction.interrupt(); //Let the player know he's been interrupted. Bungle the spell, cancel sleep, etc.
 player.currentAction = null;
}

2

Vous pouvez aller avec des points d'action mais pas de tours en soi mais des ticks, qui sont beaucoup plus petits. Supposons que chaque acteur ait une vitesse d'accumulation de points d'action (par exemple 2 PA par tick). Il démarre une action qui vaut, disons, 10 PA. Le jeu avance de 5 ticks en avant (car c'est combien il faut à l'acteur pour payer le prix AP de l'action).

Quand il y a plusieurs acteurs. Le jeu avance tick par tick jusqu'à ce que quelqu'un ait payé le prix AP auquel cette action est exécutée.

L'approche est similaire à celle de @ mikera, mais il n'y a pas de points d'accès négatifs.


C'est beaucoup plus compliqué, car vous devez stocker l'action "prévue" de la créature. Certaines actions dépendent de l'état qui peut changer avant que la foule ait accumulé suffisamment de points.
Warwick Allison

Ce n'est peut-être pas parfait, mais cela reflète la vie réelle, lorsque vous décidez de frapper, vous swinguez d'abord, puis frappez - c'est donc une action de préparation de décision, ce que permet ce système. Cela permet également de choisir une action de blocage en fonction de la situation réelle.
zzandy

Je préfère aller dans l'autre sens: la foule choisit une action avec un coût de n-ticks, puis ne peut pas choisir une nouvelle action jusqu'à ce que n-ticks se soient écoulés. Il peut être implémenté comme une valeur unique qui est décrémentée à chaque tick.
kitsu.eb

-1

Temps de haute résolution

Si le coup de poing prend 400 tours et le coup de pied prend 1000 tours, je peux vous frapper au moins deux fois avant de me donner un coup de pied, et je peux vous frapper 5 fois avant de me donner deux coups de pied.

En faisant tourner les choses à plusieurs reprises, vous avez beaucoup de contrôle sur la durée des choses.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.