2016-04-01 12 views
0

Kodumu görmek için kodumu ruby ​​yorumlayıcım çalıştır. Daha sonra, tam kelimeyi tahmin etmeye çalışın. Program, tahmininizin doğru olduğunu size söyleyecektir, ancak her harf yerine tek kelimeyi bir bütün olarak tahmin ederseniz oyunu bitirmez.Ruby Hangman oyunu, tam bir kelime girdiğimde, ancak sadece bir harf girdiğimde çalışmaz

Ayrıca kendim veya arkadaşım yerine bilgisayara karşı oynayabilmek için koduma bir Sözlük eklemek istiyorum!

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

Hi yardımcı olmalıdır 't' StackOverflow'daki hoş geldiniz. Birkaç şey - bir hatayla karşılaşırsanız lütfen tam yığın izlemesini ekleyin. Ayrıca lütfen probleminizin özünü vurgulayın ve çok fazla teğet bilgi içermemeye çalışın. Ruby yazmak, 'pry' gibi bir hata ayıklayıcı ile uzun bir yol kat edebilirsiniz. –

cevap

0

Testten halinde gelecek için aşağıdaki değişikliği ile çalışmak var:

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 

Tek bir karaktere tüm girişi karşılaştırarak bulundu. ! = 'Deneme' bir sözlüğe gelince

, this link yılında cevabı,

0

Sorunuz süper net değil, ama burada bir kaç yorum/cevaplar: tüm kelimeyi Tahmin

  1. : O uzunluğunu test eğer başka, şu anki if secret_word.include? player2_guess sarabilirdiniz giriş. (Bu, tüm kelimelerin 1 harfden büyük olduğunu varsayar). If ifadesi user_input.length > 1 ise sınamanız gerekir. Eğer öyleyse, tahminin doğru kelime olup olmadığını değerlendirin.

  2. Sözlük ekleme: Olası sözcük değerlerinin bir dizisini kodlamak daha kolay olurdu. Bir kategoriye karşılık gelmelerini istiyorsanız, bu {'category_1' => [word, word, word], 'category_2' => [word, word, word]} gibi bir karma yapabilirsiniz. Daha sonra karma (kategori) ve rastgele gelen bir değerden rastgele bir değer seçebilirsiniz.