0

だから私は最近ルビーを学んでいて、練習目的でこのコードに取り組んでいますが、この問題を解決できないようです。

これは私が従うガイドラインです:

clear the screen
greet the player
explain the rules of the game to the player
generate a random number between 0 and x (x being a variable that can be set to any integer)
allow the player n number of guesses (n being a variable)
keep track of the guess history
don't count repeated guesses against the player
congratulate the player when he/she guesses correctly
alert the player when there is only one guess remaining
print the guess history at the end of the game
count number of games won IN A ROW
count number of games won in total
congratulate the play on 3 games won IN A ROW
ask if the player wants to play again
thank the player for playing games if the number of games played is greater than 2

これは進行中の作業であり、すべてのガイドラインを完了していないことを覚えておいてください。ただし、私の質問はその特定の部分に関するものです。

コードは次のとおりです。

guess = Array.new
puts guess.class
def ask()
      puts "Please answer in a 'y' or 'n' only!"
      puts "Would like to play again?"
end


def guess_check_against()
       g = guess.last
unless guess.include?(g) != guess
       count+=1
else
     puts "sorry you have guessed that number before, Guess Again: "
       guess << gets.to_i
       count+=1
end
end

puts "what is your name?"
user= gets.chomp

puts "Hello #{user}!!"
max_user_attempts = 4
@attempt_counter = 0
directions = "\nLets play a guessing game! You have
#{max_user_attempts.to_s} guesses before you lose."
print directions

g = guess.last
win = 0
count = 0
play = true

while play == true

  puts "Please tell me the max value of the random number: "
    max= gets.to_i
    num= rand(max)
  puts "Ok. The random number is generated between 1 and " + max.to_s + "."
  puts "Make your guess: "
      guess << gets.to_i
          guess_check_against()
          @attempt_counter+=1
    while guess != num && play != false

  if g > num && @attempt_counter < max_user_attempts
    print "That's too high. Guess again: "
    guess << gets.to_i
    guess_check_against()
    @attempt_counter+=1
  elsif g < num && @attempt_counter < max_user_attempts
    print "That's too low. Guess again: "
    guess << gets.to_i
    guess_check_against()
    count+=1
    @attempt_counter+=1
  else
    break
  end

end
 if @attempts_counter >= max_user_attemtps
    puts "Sorry! you lost! Try Again"
      break
 else @attempts_counter <= max_user_attempts      
    puts "Correct! You guessed the answer in " + count.to_s + " tries!"
      win+=1
  end
    if win >= 3
      puts "Congratulation! you have #{win} number of  games in a row"
        ask()
        answer = gets.chomp!

    elsif win < 3
        ask()
        answer = gets.chomp!
    else
        break
      end                   

    if answer == 'n'
            play = false
       break
    end

    if  answer == 'y'
            play = true
            count = 0
    end
 end

 puts "Ok. Goodbye!!"

このプログラムを実行しようとすると、次のエラーが表示されます。

guessing_game.rb:12:in `guess_check_against': undefined local variable or method `guess' for main:Object (NameError)
    from guessing_game.rb:45:in `<main>'

irb を使用して同じシナリオを実行しようとすると、完全に正常に動作します。

私は何が間違っているのか理解できません、助けてください!!

4

1 に答える 1