2016-10-23 2 views
1

У меня возникли трудности с добавлением подчеркивания в моей программе. Также меня беспокоит то, что я не могу понять, как удалить подчеркивания, когда пользователь вводит правильную букву.Как добавить символы подчеркивания и удалить их, когда пользователь вводит правильную букву?

class Game 

attr_reader :guess_count, :is_over, :word_length 

def initialize (secret_word) 
    @secret_word = secret_word 
    @guess_count = 0 
    @is_over = false 
    @word_length = secret_word.length 
end 

def check_word(guess) 
    @guess_count += 1 
    if @secret_word == guess 
     puts "Congratulations!" 
     @is_over = true 
    else 
     @is_over = false 
     puts "Sorry, try again!" 
    end 
end 

def subtract_guess_count 
    counter = @word_length - @guess_count 
end 

end 

puts "User 1, What is your secret word?" 
secret_word = gets.chomp 

anything = Game.new(secret_word) 

while !anything.is_over 
    puts "User 2, Guess the secret word" 
     guess = gets.chomp 
    anything.check_word(guess) 
     if anything.subtract_guess_count == 0 
      puts "You lose! the correct word was #{secret_word}" 
      exit! 
     end 
     if anything.is_over == false 
      puts "You have #{anything.subtract_guess_count} left!" 
     end 
end 
+0

Ввод содержит символ подчеркивания? Что вы хотите удалить? Если это так, используйте этот 'gets.chomp.gsub (« _ »,« »)' – Gopal

+0

. Я не уверен, как это сделать, для большей ясности здесь я должен что-то сделать. ** # Угадающий игрок получает постоянную обратную связь по текущему состоянию слова. Поэтому, если секретное слово «единорог», пользователь начнет видеть что-то вроде «_ _ _ _ _ _ _», которое станет «_ _ _ _ _ _ _» после того, как пользователь войдет в предположение о «c», . ** Я хотел бы, чтобы программа выполняла символы подчеркивания вместо пустого –

ответ

0

Major Edit

Чтобы создать строку из подчеркивания вы можете сделать это:

word = "" 
1.upto(@secret_word.length) do 
    word << "_" 
end 

Чтобы заменить символ подчеркивания (и наоборот) в рубине string, вы можете использовать синтаксис:

word[i] = "_" 

Чтобы напечатать слово с пробелами между каждой буквой вы можете использовать следующее:

array = word.split(//) 
array.join(" ") 

Для кода функции check_letter может быть полезным:

def check_letter (guess) 
    if (@secret_word[guess]) 
     for i in 0..((@secret_word.length) -1) 
      if @secret_word[i] == guess 
       @progress[i] = guess 
      end 
     end 
    end 
    show_progress 
    check_word(@progress)  
end 

Рабочий код

#! /usr/bin/env ruby 
# 
class Game 

    attr_reader :guess_count, :is_over, :word_length, :progress 

    def initialize (secret_word) 
     @secret_word = secret_word 
     @guess_count = 0 
     @is_over = false 
     @word_length = secret_word.length 
     @progress = "" 
     1.upto(secret_word.length) do 
      @progress << "_" 
     end 
    end 

    def check_word(guess) 
     if @secret_word == guess 
      puts "Congratulations!" 
      @is_over = true 
     else 
      @is_over = false 
      puts "Sorry, try again!" 
     end 
    end 

    def check_letter (guess) 
     if (@secret_word[guess]) 
      for i in 0..((@secret_word.length) -1) 
       if @secret_word[i] == guess 
        @progress[i] = guess 
       end 
      end 
     end 
     show_progress 
     check_word(@progress)  
    end 

    def show_progress 
     array = @progress.split(//) 
     word = "" 
     array.each do |letter| 
      word << letter + " " 
     end 
     puts word 
    end 

    def one_less_guess 
     @guess_count += 1 
    end 

    def subtract_guess_count 
     counter = @word_length - @guess_count 
    end 
end 

puts "User 1, What is your secret word?" 
secret_word = gets.chomp 

anything = Game.new(secret_word) 

while !anything.is_over 
    puts "User 2, Guess the secret word" 
    guess = gets.chomp 
    anything.one_less_guess 
    if guess.length == 1 
     anything.check_letter(guess) 
    else 
     anything.check_word(guess) 
    end 
    if anything.subtract_guess_count == 0 
     puts "You lose! the correct word was #{secret_word}" 
     exit! 
    end 
    if anything.is_over == false 
     puts "You have #{anything.subtract_guess_count} left!" 
    end 
end 
+0

Я добавил все, что вы опубликовали, и он все еще не показывает подчеркивание. –

+0

Я добавил коды, которые вы отправили, и он по-прежнему не показывает символы подчеркивания, жаль, что я довольно новичок в этом. –

+0

Попробуйте ввести код на каждом шаге. – dashaxiong

Смежные вопросы