2016-04-01 9 views
0

ルビーの解釈プログラムを実行して、自分のコードを表示します。その後、完全な言葉を推測しようとします。プログラムは、あなたの推測は正しいと言いますが、各文字の代わりに単語全体を推測すれば、ゲームを終了させることはありません。Ruby Hangmanのゲームは、完全な単語を入力するときには動作しませんが、1文字を入力するときにのみ

私は自分のコードに辞書を追加して、自分や友人ではなくコンピューターと対戦できるようにしたいと考えています。

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 
+1

こんにちは、助けるべきです。いくつかのこと - エラーが発生した場合は、完全なスタックトレースを含めてください。また、問題の核心を強調し、あまりにも多くの接線情報を含まないようにしてください。 Rubyを書くと、 'pry'のようなデバッガで長い道のりを歩むことができます。 –

答えて

0

私がテストしない限り、次を次のように変更して動作するようになった:

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'!= 'テスト' 辞書について

this linkでの答えはStackOverflowのために歓迎

0

あなたの質問は、超明確ではないが、ここではいくつかのコメント/回答は以下のとおりです。全体の単語を推測

  1. :それはの長さをテストする場合は、別のあなたの現在if secret_word.include? player2_guessをラップすることができ入力。 (これはすべての単語が1文字以上であることを前提としています)。 if文は、user_input.length > 1の場合にテストする必要があります。その場合は、推測が正しい単語かどうかを評価してください。

  2. 辞書を追加する:最も簡単なのは、考えられる単語値の配列をハードコードすることです。カテゴリに対応させたい場合は、{'category_1' => [word, word, word], 'category_2' => [word, word, word]}のようなハッシュを作ることができます。次に、ハッシュ(カテゴリ)からランダムな値を選択し、次に対応する配列からランダムな値を選ぶことができます。

関連する問題