Ruby: Ошибка при изменении переменных методами
Я пытался выучить Ruby, чтобы создать сайт, и мне сказали, что изучение Ruby the Hard Way - это хорошее начало. Я делал упражнения, но застрял на ex36. Мы должны написать мини-текстовую игру для принятия решений (выберите свой стиль приключений). Я написал свой и думал, что это имеет смысл, хотя я пробую пару новых функций.
Я попытался создать некоторые переменные, которые меняются по мере того, как игрок продолжается в истории, и окончание зависит от этих переменных (душа, жизнь, богатство, долг).
Я забрал рассказчика, но оставил двойные кавычки
soul = 1
life = 1
riches = 0
debt = 0
def score
if soul == 1 && life == 1
puts ""
gold_score
elsif soul <= 0 && life == 1
puts ""
puts ""
gold_score
elsif soul > 1 && life == 1
puts ""
gold_score
else
puts ""
exit(0)
end
end
def gold_score
if riches == 0 || debt == 0
puts ""
exit(0)
elsif riches == 0 || debt == -1
puts ""
exit(0)
elsif riches == 1 || debt == 0
puts ""
exit(0)
else
puts ""
exit(0)
end
end
def dead(why)
puts ""
life = 0
score
end
def start
puts ""
puts ""
print "> "
choice = $stdin.gets.chomp
if choice == "left" || choice == "Left"
pirates_room
elsif choice == "right" || choice == "Right"
trex_room
else
dead("")
end
end
def gold_room
puts ""
puts ""
puts ""
puts "."
puts ""
puts ""
print "> "
choice = $stdin.gets.chomp
if choice == "1"
puts ""
soul = soul + 1
score
elsif choice == "2"
puts ""
riches = riches + 1
score
else
puts ""
puts ""
score
end
end
def pirates_room
puts ""
puts ""
puts ""
puts ""
print "> "
choice = $stdin.gets.chomp
if choice.include? ""
puts ""
dead("")
elsif choice.include?("beer") || choice.include?("keg")
puts ""
puts ""
puts ""
soul = soul - 1
gold_room
elsif choice.include?("Cthulhu") || choice.include?("bible")
puts ""
puts ""
puts ""
puts ""
debt = -1
puts ""
gold_room
else
pirates_room
end
end
def trex_room
puts ""
puts ""
puts ""
print "> "
choice = $stdin.gets.chomp
if choice.include?("stay") || choice.include?("Stay")
dead("")
elsif choice.include?("pray") || choice.include?("Pray")
puts ""
puts ""
puts ""
puts ""
puts ""
gold_room
else
trex_room
end
end
start
Я запустил его, и проблема, похоже, в переменных, которые я положил в начале. Каждый раз, когда я пытаюсь "обработать" их (добавить число или посмотреть, больше или меньше их число), возникает ошибка.
Я искал ситуации, когда это происходит, и у меня есть несколько:
ex36.rb:106:in `pirates_room': undefined method `-' for nil:NilClass (NoMethodError)
from ex36.rb:55:in `start'
from ex36.rb:143:in `<main>'
ex36.rb:81:in `gold_room': undefined method `+' for nil:NilClass (NoMethodError)
from ex36.rb:115:in `pirates_room'
from ex36.rb:55:in `start'
from ex36.rb:143:in `<main>'
ex36.rb:8:in `score': undefined local variable or method `soul' for main:Object (NameError)
from ex36.rb:44:in `dead'
from ex36.rb:59:in `start'
from ex36.rb:122:in `<main>'
Что я делаю неправильно? У меня нулевой опыт работы с кодированием, поэтому я, вероятно, просто делаю некоторую базовую ошибку, я пытался найти ответ здесь, но тот, с похожими ошибками, ответы не относятся к этому случаю, или, по крайней мере, я не не понимаю, как они применяются. Не могу ли я определить переменные и затем изменить их по пути с методами?
Спасибо за помощь.