Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby Hangman游戏,当我输入完整单词时不起作用,但只有当我输入一个字母时才起作用_Ruby_Command Line - Fatal编程技术网

Ruby Hangman游戏,当我输入完整单词时不起作用,但只有当我输入一个字母时才起作用

Ruby Hangman游戏,当我输入完整单词时不起作用,但只有当我输入一个字母时才起作用,ruby,command-line,Ruby,Command Line,在ruby解释器上运行我的代码,查看我的代码。然后,试着猜完整的单词。程序会告诉你你的猜测是正确的,但是如果你一个接一个地猜出整个单词而不是每个字母,那么游戏就不会结束 我还想在我的代码中添加一个字典,以便能够在电脑上玩,而不是和我自己或朋友玩 def clear_screen return system('cls') if Gem.win_platform? system('clear') end loop do incorrect_guesses = 0 puts ''

在ruby解释器上运行我的代码,查看我的代码。然后,试着猜完整的单词。程序会告诉你你的猜测是正确的,但是如果你一个接一个地猜出整个单词而不是每个字母,那么游戏就不会结束

我还想在我的代码中添加一个字典,以便能够在电脑上玩,而不是和我自己或朋友玩

def clear_screen
  return system('cls') if Gem.win_platform?
  system('clear')
end

loop do

  incorrect_guesses = 0

  puts ''
  puts 'Welcome to Hangman, Win or lose your life!'
  puts ''
  puts 'Choose Category: It can be anything you desire!'
  player1_category = gets.chomp
  puts ''

  puts 'Player 1, Please enter your desired word'
  secret_word = gets.chomp.downcase
  clear_screen

  correct_guess = ['-'] * secret_word.length
  clear_screen
  puts "The category is: #{player1_category}"
  puts 'Player 2, Please enter your guess'

  loop do
    puts '_ ' * secret_word.length
    player2_guess = gets.chomp.downcase
    clear_screen


if secret_word.include? player2_guess
    secret_word.each_char.with_index do |letter, i|
    next unless letter == player2_guess
    correct_guess[i] = letter
  end
  puts "The category is: #{player1_category}"
  puts ''
  print 'Guess the word: '
  print correct_guess.join('')
  puts ''
  puts 'Correct. Keep trying!!'
  puts ''
else
  puts "The category is: #{player1_category}"
  puts ''
  print 'Guess the word: '
  print correct_guess.join('')
  puts ''
  puts "The word doesn't contain that letter '#{player2_guess.upcase}'"
  puts ''
  incorrect_guesses += 1
end
puts "Incorrect Guesses: #{incorrect_guesses}"
puts ''

if incorrect_guesses == 6
  puts ''
  puts '|---+---+- '
  puts  '|   |'
  puts  '|   0'
  puts  '|   |\\'
  puts  '|   /\\'
  puts  '-+----------'
  puts "The Secret Word is '#{secret_word.capitalize!}'"
  puts ''
  break
end

next unless secret_word == correct_guess.join('')
puts ''
puts '   (@)'
puts '  ^\\|'
puts '    |/^'
puts '____|_____'
puts ''
puts 'You Win!'
puts ''
puts "You correctly guessed the word '#{secret_word.capitalize!}'"
break
end
end

你的问题不是很清楚,但这里有一些评论/答案:

  • 猜整个单词:你可以把你当前的
    包起来,如果是secret\u word.include?player2_guess
    在另一个测试中,如果测试输入的长度。(假设所有单词都大于1个字母)。if语句应该测试
    user\u input.length>1
    。如果是,评估猜测是否正确,等等

  • 添加字典:最简单的方法是硬编码一组可能的单词值。如果你想让它们对应于一个类别,你可以做这样的散列
    {'category_1'=>[word,word,word],'category_2'=>[word,word,word]}
    。然后可以从散列(类别)中选择一个随机值,然后从相应的数组中选择一个随机值


  • 我在下一个测试中进行了以下更改:

      if secret_word.include? player2_guess
        secret_word.each_char.with_index do |letter, i|
          next unless player2_guess.include?  letter
          correct_guess[i] = letter
        end
    
    您正在将整个条目与单个字符进行比较。”t'!='测试'


    至于字典,中的答案应该有帮助

    嗨,欢迎来到stackoverflow。有几件事-如果您遇到错误,请包括完整的堆栈跟踪。另外,请强调你问题的核心,尽量不要包含太多无关紧要的信息。编写Ruby时,您可以使用类似于
    pry
    的调试器进行大量工作。