[RUBY] À propos de l'ajout de variables dans le traitement itératif dans l'instruction while

J'écris un programme Ruby et je suis bloqué, je vais donc poster une question ici.

Actuellement, je travaille sur la création d'un programme Dragon Quest qui est souvent utilisé comme exemple de programmes ruby sur le net.

Les spécifications que je souhaite mettre en œuvre sont les suivantes.

Spécifications supposées

C'est à peu près comme ça.

La question compte

Je ne peux pas écrire un processus qui accumule le nombre d'attaques de moi-même (guerrier) tout en répétant le processus dans l'instruction while.

En particulier, [Tour 1] Précédente: Attaque de guerrier. 2 dégâts au slime. Lycée: attaque de Slime. 1 dégât au guerrier. [Tournez 2] Précédente: Attaque de guerrier. 2 dégâts au slime. Lycée: attaque de Slime. 1 dégât au guerrier. [Tournez 3] Précédente: Attaque de guerrier. 2 dégâts au slime. Lycée: attaque de Slime. 1 dégât au guerrier.

Dans le cas ci-dessus, vous devriez être en mesure de vaincre le slime avec 2x3 = 6. Cependant, les chiffres ne semblent pas s'accumuler et se répéteront pour toujours.

Le code réel est ci-dessous.

puts "Slime est apparu"

hp = 6
damage = 0
ownhp = 10
while damage < hp do
  puts ""
  puts "Le tour du guerrier"
  puts "Veuillez choisir une attaque. 1: Naguru 2: Hoimi"
  attack = gets.to_i
  damage=[1,2,3].sample
    if attack == 1
      puts "Attaque de guerrier."
      puts "Slime#{damage}Dommage"
      damage += damage
    elsif attack == 2
      case ownhp
        when 10
        puts ""
        puts "Le guerrier a scandé Hoimi. Mais le guerrier est plein d'énergie! Rien ne s'est passé."
        when 1..4,6..8
        puts ""
        puts "Le guerrier a scandé Hoimi. Le guerrier est plein d'énergie."
        else
        puts ""
        puts "Le sort a échoué."
      end
    else
      puts ""
      puts "Cette commande n'est pas une option. Terminez le tour."
    end
  if damage < 6
  puts ""
  puts "Tour de Slime" 
  puts "Attaque visqueuse. "1" dommage au guerrier" 
  ownhp -=1
  end
end

puts "Le guerrier a vaincu le slime. J'ai 10 points d'expérience."

C'est au dessus.

En fait, vous pouvez vaincre le slime. C'est alors que vous (guerrier) attaquez et que vous obtenez un 3.

Comme test,

① Si 1 ou 2 apparaît plusieurs fois et qu'il ne s'arrête pas même s'il atteint 6 au total ② Quand 3 sort et se termine

Voici le code pour chacun des irbs ci-dessus.

① Si 2 ne se termine pas même après plusieurs fois

ec2-user:~/environment/ruby-book $ ruby lib/dorakue.rb
Slime est apparu

Le tour du guerrier
Veuillez choisir une attaque. 1: Naguru 2: Hoimi
1
Attaque de guerrier.
"2" dégâts à la vase

Tour de Slime
Attaque visqueuse. "1" dommage au guerrier

Le tour du guerrier
Veuillez choisir une attaque. 1: Naguru 2: Hoimi
1
Attaque de guerrier.
"1" dommage à la vase

Tour de Slime
Attaque visqueuse. "1" dommage au guerrier

Le tour du guerrier
Veuillez choisir une attaque. 1: Naguru 2: Hoimi
1
Attaque de guerrier.
"1" dommage à la vase

Tour de Slime
Attaque visqueuse. "1" dommage au guerrier

Le tour du guerrier
Veuillez choisir une attaque. 1: Naguru 2: Hoimi
1
Attaque de guerrier.
"1" dommage à la vase

Tour de Slime
Attaque visqueuse. "1" dommage au guerrier

Le tour du guerrier
Veuillez choisir une attaque. 1: Naguru 2: Hoimi
1
Attaque de guerrier.
"1" dommage à la vase

Tour de Slime
Attaque visqueuse. "1" dommage au guerrier

Le tour du guerrier
Veuillez choisir une attaque. 1: Naguru 2: Hoimi
1
Attaque de guerrier.
"2" dégâts à la vase

Tour de Slime
Attaque visqueuse. "1" dommage au guerrier

Le tour du guerrier
Veuillez choisir une attaque. 1: Naguru 2: Hoimi
1
Attaque de guerrier.
"2" dégâts à la vase

Tour de Slime
Attaque visqueuse. "1" dommage au guerrier

Le tour du guerrier
Veuillez choisir une attaque. 1: Naguru 2: Hoimi
1
Attaque de guerrier.
"2" dégâts à la vase

Tour de Slime
Attaque visqueuse. "1" dommage au guerrier

Le tour du guerrier
Veuillez choisir une attaque. 1: Naguru 2: Hoimi
1
Attaque de guerrier.
"1" dommage à la vase

Tour de Slime
Attaque visqueuse. "1" dommage au guerrier

Le tour du guerrier
Veuillez choisir une attaque. 1: Naguru 2: Hoimi
1
Attaque de guerrier.
"2" dégâts à la vase

Tour de Slime
Attaque visqueuse. "1" dommage au guerrier

Le tour du guerrier
Veuillez choisir une attaque. 1: Naguru 2: Hoimi
1
Attaque de guerrier.
"2" dégâts à la vase

Tour de Slime
Attaque visqueuse. "1" dommage au guerrier

Le tour du guerrier
Veuillez choisir une attaque. 1: Naguru 2: Hoimi
1
Attaque de guerrier.
"2" dégâts à la vase

Tour de Slime
Attaque visqueuse. "1" dommage au guerrier

Le tour du guerrier
Veuillez choisir une attaque. 1: Naguru 2: Hoimi
1
Attaque de guerrier.
"1" dommage à la vase

Tour de Slime
Attaque visqueuse. "1" dommage au guerrier

Le tour du guerrier
Veuillez choisir une attaque. 1: Naguru 2: Hoimi
1
Attaque de guerrier.
"2" dégâts à la vase

Tour de Slime
Attaque visqueuse. "1" dommage au guerrier

Le tour du guerrier
Veuillez choisir une attaque. 1: Naguru 2: Hoimi
1
Attaque de guerrier.
"2" dégâts à la vase

Tour de Slime
Attaque visqueuse. "1" dommage au guerrier

Le tour du guerrier
Veuillez choisir une attaque. 1: Naguru 2: Hoimi
1
Attaque de guerrier.
"1" dommage à la vase

Tour de Slime
Attaque visqueuse. "1" dommage au guerrier

Le tour du guerrier
Veuillez choisir une attaque. 1: Naguru 2: Hoimi
1
Attaque de guerrier.
"2" dégâts à la vase

Tour de Slime
Attaque visqueuse. "1" dommage au guerrier

Le tour du guerrier
Veuillez choisir une attaque. 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

Je l'ai forcé à se terminer.

② Quand 3 sort et se termine

ec2-user:~/environment/ruby-book $ ruby lib/dorakue.rb
Slime est apparu

Le tour du guerrier
Veuillez choisir une attaque. 1: Naguru 2: Hoimi
1
Attaque de guerrier.
"3" dégâts à la vase
Le guerrier a vaincu le slime. J'ai 10 points d'expérience.

Ça ressemble à ça.

Facteurs possibles

damage += damage

Je pense que la partie ci-dessus est erronée dans le code que j'ai écrit pour accumuler les dégâts, mais je ne sais pas comment y remédier. Si vous obtenez un 3, je pense que vous pouvez le battre avec 3 + 3 = 6. En d'autres termes, c'est un formulaire qui est ajouté uniquement dans le tour plutôt qu'un traitement répété.

Je vous serais reconnaissant si vous pouviez m'apprendre.

Merci beaucoup.

Recommended Posts

À propos de l'ajout de variables dans le traitement itératif dans l'instruction while
ArrayList Afficher tout dans Iterator par traitement itératif en étant dans le tableau
[Swift] À propos du traitement itératif "instruction for-in"
Implémentation du traitement asynchrone dans Tomcat
Ordre de traitement dans le programme
[Introduction à Ruby] À propos du rôle de true et break in the while statement
Comment insérer un traitement avec n'importe quel nombre d'éléments dans le traitement itératif dans Ruby
Implémentation du traitement asynchrone compatible multi-tenant dans Tomcat
[Note] [Débutant] Comment écrire lors de la modification de la valeur d'un élément de tableau dans une phrase répétée de Ruby
Utilisez-vous l'instruction for après tout? Utilisez-vous l'instruction while? Utilisation correcte des instructions for et while
Comment démarrer un indice à partir d'un nombre arbitraire dans le traitement itératif Ruby
Traitement d'échappement lors de la création d'une URL dans Ruby
[Ruby] À propos du comportement d'évaluation des expressions conditionnelles dans while
Coincé devant le forgeron par enum
Créez un cadre de traitement par lots simple dans Eclipse.
Mesurer la taille d'un dossier avec Java
Dessinez un ensemble de Mandelbrot trop beau avec Processing
Un examen rapide de Java appris en classe
Compter la fréquence d'apparition des mots dans une phrase par traitement de flux (Apache Apex)