2016-10-19 2 views
0

Моя первая игра в палач с нуля почти завершена с реальным основным материалом. Мне просто нужен счетчик, когда игрок получает право работать правильно. Я не придумал хороший способ сделать это, не удаляя все и не начиная. @correct_tries правильно подсчитывается, а затем в elsif сравнивает числовое значение с числом элементов в заданном слове, на которые правильно ответил.Как заставить elsif для @correct_tries работать правильно?

Он будет продолжать подсчет, когда он должен был остановиться, когда @correct_tries был сравнен с числом, когда .inpect происходит в массиве. Но он продолжает подсчитывать.

class Hangman 

Profanity = ['cobol','snit','crap','court'] 
Adjective = ['foul','repugnant','swift','fast'] 
Noun = ['king','queen','prince','princess'] 


    def self.start_game 
     print "Welcome to Hangman V1 by Clueless! Please select which category of words do you want to use: \n Profanity, Adjective, Noun " 
     @selection = gets.chomp.downcase 
     case 
     when @selection == 'profanity' 
     puts 'You have selected profanity! ' 
     hangman_word_selection 
    when @selection == 'adjective' 
     puts 'You have selected Adjectives! ' 
     hangman_word_selection 
    when @selection == 'noun' 
     puts 'You have selected nouns! ' 
      hangman_word_selection 
    end 
    end 

    def self.hangman_word_selection 

    if @selection == 'profanity' 
     hangman_word = Profanity.sample 
     hangman_word_setup(hangman_word) 
     #puts '_ ' * hangman_word.size 
    elsif @selection == 'adjective' 
     hangman_word = Adjective.sample 
     hangman_word_setup(hangman_word) 
    elsif 
      @selection == 'noun' 
     hangman_word = Noun.sample 
     hangman_word_setup(hangman_word) 

    end 
end 

    def self.hangman_word_setup(hangman_word) 
    hangman_word_array = hangman_word.chars.to_a 
    @hangman_end = false 
    #while(@hangman_end == false) 
    #puts "*" * 40 
    #puts 
    #puts 
    puts 'You have five tries to get the word correct. If you can guess the whole word do so but you only have one try. Or just guess letter by letter.' 
    p hangman_word_array 
    @total_tries = 0 
    @correct_tries = 0 
    game_check = true 

    while game_check == true 
    first_try = gets.chomp.downcase 



    if(first_try == hangman_word_array[0] || first_try == hangman_word_array[1] || first_try == hangman_word_array[2] || first_try == hangman_word_array[3] || first_try == hangman_word_array[4]) 
    puts 'Check' 
    @correct_tries += 1 
    p @correct_tries 
    #correct tries equal to the number of chars in the given word check it. 
    puts 'You have gotten it correct!' 
    elsif(first_try == hangman_word) 
    puts 'You have completed the word! Congratulations you win!' 
       hangman_win 
       break 
    elsif(first_try != hangman_word_array) 
    puts 'Wrong.' 
       @total_tries += 1 
       p @total_tries 
      #puts "*" * 40 
     elsif(@correct_tries == hangman_word_array.inspect) 
       puts 'done.' 
       break 


    end 
    end 
    end 



    def self.hangman_loss 
    puts ' +---+- 
       | | 
       | 0 
       | |\\ 
       | /\\ 
       -+----------' 

    puts 'You lose!'    
    end 


    def self.hangman_win 

    puts 'NEED HANGMAN VICTORY POSE HERE.' 

    end 

start_game 

end 
+0

Примечание:.. Константы должны быть объявлены в 'имен ALL_CAPS' Также используйте' case' сломать когда вы сравниваете одну и ту же переменную с несколькими значениями, как вы делаете, где с помощью '@ selection'. – tadman

ответ

0

elsif состояние elsif(@correct_tries == hangman_word_array.inspect) никогда не будет правдой. @correct_tries это числовое значение, и hangman_word_array.inspect возвращает массив слов для палача в формате строки (например, hangman_word_array = ['a', 'b', 'c'] затем hangman_word_array.inspect будет "[\"a\", \"b\", \"c\"]"

+0

Ах, тогда смысл имеет смысл. Спасибо – Clueless

+0

Используется .size, но я думаю, что это работает в некотором роде, но @correct_tries просто перезапускается и не нарушает цикл? – Clueless