Wie man verschiedene Geschwindigkeiten in RogueLike-Spielen handhabt?


14

Wie man verschiedene Geschwindigkeiten in RogueLike-Spielen handhabt?

Was ich damit meine, ist, dass bei rundenbasierten Spielen die Akteure je nach Aktion und einigen anderen Merkmalen unterschiedlich schnell agieren können. Die Schauspieler machen dann effektiv mehr Aktionen / Runden als andere, wenn sie schneller sind oder nicht.

Wie kann man bestimmen, wann ein Schauspieler handeln kann (Turn Scheduling?)?

Es sieht so aus, als gäbe es verschiedene Möglichkeiten, dies zu tun? Können Sie einige mit Algorithmen erklären?


7
Ich habe das Gefühl, dass ein Algorithmus offensichtlich wird, wenn Sie die gewünschten Funktionen ausführlich beschreiben.
Tetrad

Wie Tetrad sagte, und was meinst du mit "Geschwindigkeit der Aktionen"? Roguelikes sind in der Regel rundenbasiert, daher kann ich nicht sehen, wie dies auf sie zutreffen könnte.
Laurent Couvidou

2
Selbst in rundenbasierten Spielen bewegen sich einige Einheiten schneller oder langsamer als andere und haben im Vergleich zu den anderen mehr oder weniger Runden. Ich habe die Frage behoben.
Klaim

3
@Patrick Hughes Nethack, eines der ältesten und beliebtesten Roguelikes, hat ein sehr wichtiges Geschwindigkeitsmerkmal. nethackwiki.com/wiki/Speed
Harry Stern

1
@HarryStern Ich habe die ganze Zeit schlecht gespielt? Das könnte ein paar Dinge erklären ... =)
Patrick Hughes

Antworten:


12

In meinem schurkenhaften Spiel Tyrant habe ich ein System von Aktionspunkten und Geschwindigkeitswerten verwendet.

Grundsätzlich:

  • Die meisten Aktionen hatten AP-Kosten von 100
  • Die meisten Kreaturen haben eine Geschwindigkeit von 100

Dann würde die Spielschleife wie folgt ablaufen.

  • Der Held ergreift eine Aktion.
  • Die verstrichene Zeit wird berechnet als hero action AP cost * 100 / hero speed
  • Allen Kreaturen werden APs in Höhe von gegeben creature speed * elapsed time / 100
  • Kreaturen ergreifen Aktionen und lassen APs abziehen, bis ihre APs <= 0 sind
  • Wiederholen

Dieses System hat insgesamt sehr gut funktioniert, Beispiel nette Features:

  • Wenn Sie einen sehr schnellen Helden haben (möglicherweise aufgrund eines magischen Geschwindigkeitsbonus), können Sie mehrere Züge ausführen, bevor sich eine einzelne Kreatur bewegen kann (die APs wären für einige Runden negativ, da die verstrichene Zeit gering wäre).
  • Sie können einige Aktionen mehr oder weniger teuer machen, indem Sie die AP-Kosten variieren
  • Sie können Kreaturen verzögern, indem Sie APs abziehen, oder ihnen durch Hinzufügen von APs einen plötzlichen einmaligen Schub verleihen

Ich versuche, meinen Kopf darum zu wickeln. Wenn Sie 1 Spieler und 4 Spieler haben. Lässt dies nicht den letzten Spielerstapel mehr und mehr verstreichen. Erlaubt ihm vielleicht 4 Aktionen und das zweite Mal gegen 8 in einer Reihe?
Dr.Denis McCracleJizz

4

Aktionspunkte. Geben Sie jeder Einheit eine "Geschwindigkeit", damit schnellere Akteure in jeder Runde mehr Punkte erhalten. Lassen Sie jede Aktion eine bestimmte Anzahl von Punkten ausführen, und subtrahieren Sie diese Anzahl von den Punkten des Spielers für diesen Zug, wenn er eine Aktion ausführt. Wenn eine Aktion mehr Punkte benötigt, als der Spieler übrig hat, markieren Sie sie als "teilweise abgeschlossen" und lassen Sie ihn die nächste Runde beenden.


2

Meinen Sie damit, dass Aktionen mehrere Runden dauern (dh 50 Runden durchgehend schlafen)?

Ich würde ein Objekt behalten, player.currentAction. currentAction kann enthalten, wie viele Runden die Aktion erfordern würde, wie hoch die Auflösung der Aktion ist und welche Zustände die Aktion abbrechen (in Gefahr, angegriffen, zu heiß usw.). Bevor wir nach Spielereingaben suchten, überprüften wir in jeder Runde, ob sich der Spieler gerade in einer Aktion befand, und machten dann so etwas wie ...

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

Sie können mit Aktionspunkten gehen, aber keine Runden an sich, sondern Ticks, die viel kleiner sind. Angenommen, jeder Akteur hat eine Aktionspunkt-Akkumulationsgeschwindigkeit (z. B. 2 AP pro Tick). Es startet eine Aktion mit einem Wert von beispielsweise 10 AP. Das Spiel rückt 5 Ticks vor (weil der Schauspieler so viel braucht, um den AP-Preis der Aktion zu bezahlen).

Wenn es mehrere Schauspieler gibt. Das Spiel rückt Tick für Tick vor, bis jemand den AP-Preis bezahlt hat, zu welchem ​​Zeitpunkt diese Aktion ausgeführt wird.

Der Ansatz ist ähnlich wie bei @mikera's, nur dass es keine negativen APs gibt.


Dies ist weitaus chaotischer, da Sie die "beabsichtigte" Aktion der Kreatur speichern müssen. Einige Aktionen hängen vom Status ab, der sich ändern kann, bevor der Mob genügend Punkte gesammelt hat.
Warwick Allison

Vielleicht ist es nicht perfekt, aber es spiegelt das wirkliche Leben wider. Wenn Sie sich für einen Treffer entscheiden, schwingen Sie zuerst und treffen dann - es ist also eine Entscheidungsvorbereitungsaktion, die dieses System ermöglicht. Dies ermöglicht es auch, die Blockieraktion basierend auf der tatsächlichen Situation auszuwählen.
zzandy

Ich gehe lieber in die andere Richtung: Mob wählt eine Aktion mit Kosten von n-Ticks aus und kann dann erst nach Ablauf von n-Ticks eine neue Aktion auswählen. Es kann als einzelner Wert implementiert werden, der bei jedem Tick dekrementiert wird.
kitsu.eb

-1

Hohe Auflösungszeit

Wenn ein Schlag 400 Runden dauert und ein Tritt 1000 Runden dauert, kann ich Sie mindestens zweimal schlagen, bevor Sie mich treten, und ich kann Sie fünfmal schlagen, bis Sie mich zweimal treten.

Indem Sie dafür sorgen, dass die Dinge viele Runden dauern, können Sie genau steuern, wie lange die Dinge dauern.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.