[RUBY] Informationen zum Hinzufügen von Variablen in der iterativen Verarbeitung in der while-Anweisung

Ich schreibe ein Ruby-Programm und stecke fest, daher werde ich hier eine Frage stellen.

Derzeit arbeite ich an der Erstellung eines Dragon Quest-Programms, das häufig als Beispiel für Rubys Programm im Internet erscheint.

Die Spezifikationen, die ich implementieren möchte, sind wie folgt.

Angenommene Spezifikationen

Es ist ungefähr so.

Frage ist wichtig

Ich kann keinen Prozess schreiben, der die Anzahl der Angriffe von mir (Krieger) ansammelt, während ich den Prozess in der while-Anweisung wiederhole.

Speziell, [Runde 1] Vorher: Kriegerangriff. 2 Schleimschäden. High School: Schleimangriff. 1 Schaden für den Krieger. [Runde 2] Vorher: Kriegerangriff. 2 Schleimschäden. High School: Schleimangriff. 1 Schaden für den Krieger. [3. Runde] Vorher: Kriegerangriff. 2 Schleimschäden. High School: Schleimangriff. 1 Schaden für den Krieger.

Im obigen Fall sollten Sie in der Lage sein, den Schleim mit 2x3 = 6 zu besiegen. Die Zahlen scheinen jedoch nicht gestapelt zu sein und werden für immer wiederholt.

Der tatsächliche Code ist unten.

puts "Schleim erschien"

hp = 6
damage = 0
ownhp = 10
while damage < hp do
  puts ""
  puts "Krieger ist an der Reihe"
  puts "Bitte wählen Sie einen Angriff. 1: Naguru 2: Hoimi"
  attack = gets.to_i
  damage=[1,2,3].sample
    if attack == 1
      puts "Kriegerangriff."
      puts "Schleim#{damage}Beschädigung"
      damage += damage
    elsif attack == 2
      case ownhp
        when 10
        puts ""
        puts "Der Krieger sang Hoimi. Aber der Krieger ist voller Energie! Nichts ist passiert."
        when 1..4,6..8
        puts ""
        puts "Der Krieger sang Hoimi. Der Krieger ist voller Energie."
        else
        puts ""
        puts "Der Zauber ist fehlgeschlagen."
      end
    else
      puts ""
      puts "Dieser Befehl ist keine Option. Beende die Runde."
    end
  if damage < 6
  puts ""
  puts "Schleim drehen" 
  puts "Schleimangriff. "1" Schaden für den Krieger" 
  ownhp -=1
  end
end

puts "Der Krieger besiegte den Schleim. Ich habe 10 Erfahrungspunkte."

Es ist oben.

In der Tat können Sie Schleim besiegen. Dann greifst du (Krieger) an und bekommst eine 3.

Als Test

① Wenn 1 oder 2 mehrmals vorkommt und nicht endet, auch wenn es insgesamt 6 erreicht ② Wenn 3 herauskommt und endet

Hier ist der Code für jeden der oben genannten Irbs.

① Wenn 2 auch nach mehrmaliger Beendigung nicht endet

ec2-user:~/environment/ruby-book $ ruby lib/dorakue.rb
Schleim erschien

Krieger ist an der Reihe
Bitte wählen Sie einen Angriff. 1: Naguru 2: Hoimi
1
Kriegerangriff.
Schleimschaden "2"

Schleim drehen
Schleimangriff. "1" Schaden für den Krieger

Krieger ist an der Reihe
Bitte wählen Sie einen Angriff. 1: Naguru 2: Hoimi
1
Kriegerangriff.
Schleimschaden "1"

Schleim drehen
Schleimangriff. "1" Schaden für den Krieger

Krieger ist an der Reihe
Bitte wählen Sie einen Angriff. 1: Naguru 2: Hoimi
1
Kriegerangriff.
Schleimschaden "1"

Schleim drehen
Schleimangriff. "1" Schaden für den Krieger

Krieger ist an der Reihe
Bitte wählen Sie einen Angriff. 1: Naguru 2: Hoimi
1
Kriegerangriff.
Schleimschaden "1"

Schleim drehen
Schleimangriff. "1" Schaden für den Krieger

Krieger ist an der Reihe
Bitte wählen Sie einen Angriff. 1: Naguru 2: Hoimi
1
Kriegerangriff.
Schleimschaden "1"

Schleim drehen
Schleimangriff. "1" Schaden für den Krieger

Krieger ist an der Reihe
Bitte wählen Sie einen Angriff. 1: Naguru 2: Hoimi
1
Kriegerangriff.
Schleimschaden "2"

Schleim drehen
Schleimangriff. "1" Schaden für den Krieger

Krieger ist an der Reihe
Bitte wählen Sie einen Angriff. 1: Naguru 2: Hoimi
1
Kriegerangriff.
Schleimschaden "2"

Schleim drehen
Schleimangriff. "1" Schaden für den Krieger

Krieger ist an der Reihe
Bitte wählen Sie einen Angriff. 1: Naguru 2: Hoimi
1
Kriegerangriff.
Schleimschaden "2"

Schleim drehen
Schleimangriff. "1" Schaden für den Krieger

Krieger ist an der Reihe
Bitte wählen Sie einen Angriff. 1: Naguru 2: Hoimi
1
Kriegerangriff.
Schleimschaden "1"

Schleim drehen
Schleimangriff. "1" Schaden für den Krieger

Krieger ist an der Reihe
Bitte wählen Sie einen Angriff. 1: Naguru 2: Hoimi
1
Kriegerangriff.
Schleimschaden "2"

Schleim drehen
Schleimangriff. "1" Schaden für den Krieger

Krieger ist an der Reihe
Bitte wählen Sie einen Angriff. 1: Naguru 2: Hoimi
1
Kriegerangriff.
Schleimschaden "2"

Schleim drehen
Schleimangriff. "1" Schaden für den Krieger

Krieger ist an der Reihe
Bitte wählen Sie einen Angriff. 1: Naguru 2: Hoimi
1
Kriegerangriff.
Schleimschaden "2"

Schleim drehen
Schleimangriff. "1" Schaden für den Krieger

Krieger ist an der Reihe
Bitte wählen Sie einen Angriff. 1: Naguru 2: Hoimi
1
Kriegerangriff.
Schleimschaden "1"

Schleim drehen
Schleimangriff. "1" Schaden für den Krieger

Krieger ist an der Reihe
Bitte wählen Sie einen Angriff. 1: Naguru 2: Hoimi
1
Kriegerangriff.
Schleimschaden "2"

Schleim drehen
Schleimangriff. "1" Schaden für den Krieger

Krieger ist an der Reihe
Bitte wählen Sie einen Angriff. 1: Naguru 2: Hoimi
1
Kriegerangriff.
Schleimschaden "2"

Schleim drehen
Schleimangriff. "1" Schaden für den Krieger

Krieger ist an der Reihe
Bitte wählen Sie einen Angriff. 1: Naguru 2: Hoimi
1
Kriegerangriff.
Schleimschaden "1"

Schleim drehen
Schleimangriff. "1" Schaden für den Krieger

Krieger ist an der Reihe
Bitte wählen Sie einen Angriff. 1: Naguru 2: Hoimi
1
Kriegerangriff.
Schleimschaden "2"

Schleim drehen
Schleimangriff. "1" Schaden für den Krieger

Krieger ist an der Reihe
Bitte wählen Sie einen Angriff. 1: Naguru 2: Hoimi
^CTraceback (most recent call last):
        2: from lib/dorakue.rb:10:in `<main>'
        1: from lib/dorakue.rb:10:in `gets'
lib/dorakue.rb:10:in `gets': Interrupt

Ich habe es gezwungen zu enden.

② Wenn 3 herauskommt und endet

ec2-user:~/environment/ruby-book $ ruby lib/dorakue.rb
Schleim erschien

Krieger ist an der Reihe
Bitte wählen Sie einen Angriff. 1: Naguru 2: Hoimi
1
Kriegerangriff.
Schleimschaden "3"
Der Krieger besiegte den Schleim. Ich habe 10 Erfahrungspunkte.

Es sieht aus wie das.

Mögliche Faktoren

damage += damage

Ich denke, der obige Teil ist falsch in dem Code, den ich geschrieben habe, um den Schaden zu akkumulieren, aber ich weiß nicht, wie ich ihn beheben soll. Wenn Sie eine 3 bekommen, können Sie sie mit 3 + 3 = 6 schlagen. Mit anderen Worten, es handelt sich um ein Formular, das nur in der Runde hinzugefügt wird und nicht wiederholt verarbeitet wird.

Ich wäre Ihnen dankbar, wenn Sie mich unterrichten könnten.

Vielen Dank.

Recommended Posts

Informationen zum Hinzufügen von Variablen in der iterativen Verarbeitung in der while-Anweisung
ArrayList Zeigt alles in Iterator durch iterative Verarbeitung an, während es sich im Array befindet
[Swift] Über die iterative Verarbeitung von "for-in-Anweisungen"
Implementierung der asynchronen Verarbeitung in Tomcat
Reihenfolge der Verarbeitung im Programm
[Einführung in Ruby] Über die Rolle von true und break in der while-Anweisung
So fügen Sie die Verarbeitung mit einer beliebigen Anzahl von Elementen in die iterative Verarbeitung in Ruby ein
Implementierung einer mandantenfähigen kompatiblen asynchronen Verarbeitung in Tomcat
[Hinweis] [Anfänger] Schreiben, wenn der Wert eines Array-Elements in einem sich wiederholenden Satz von Ruby geändert wird
Verwenden Sie doch die for-Anweisung? Verwenden Sie die while-Anweisung? Ordnungsgemäße Verwendung von for-Anweisung und while-Anweisung
So starten Sie einen Index aus einer beliebigen Zahl in der iterativen Ruby-Verarbeitung
Escape-Verarbeitung beim Erstellen einer URL in Ruby
[Ruby] Über das Verhalten der Auswertung von bedingten Ausdrücken in while
Von enum vor dem Schmied festgefahren
Erstellen Sie in Eclipse ein einfaches Stapelverarbeitungsframework.
Messen Sie die Größe eines Ordners mit Java
Zeichnen Sie ein Mandelbrot-Set, das mit Processing zu schön ist
Ein kurzer Überblick über Java, das im Unterricht gelernt wurde
Zählen Sie die Häufigkeit des Auftretens von Wörtern in einem Satz durch Stream-Verarbeitung (Apache Apex).