Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

2. Refatorando e organizando o jogo

Estou construindo o jogo juntamente com as aulas, porem o meu deu erro, e nao estou conseguindo localizar o motivo:

main.rb

require_relative 'forca'
jogo_da_forca


forca.rb

require_relative 'ui'

def pede_um_chute_valido(chutes, erros)
  loop do
      chute = pede_um_chute(chutes, erros)
      if chutes.include? chute
         avisa_chute_efetuado(chute)
      else
            return chute
      end
   end
end

def joga(nome)
      palavra_secreta = sorteia_palavra_secreta
      erros = 0
      chutes = []
      pontos_ate_agora = 0
      while  erros < 5
          chute = pede_um_chute_valido(chutes, erros)
          chutes << chute

         chutou_uma_letra = chute.size == 1
         if chutou_uma_letra
              total_encontrado = conta(palavra_secreta,chute)
              if total_encontrado == 0
                  avisa_letra_nao_encontrada()
                  erros+=1
              else
                   avisa_letra_encontrada(total_encontrado)
              end
         else
               acertou = chute == palavra_secreta
               if acertou
                   avisa_acertou_palavra()
                   pontos_ate_agora +=100
                   break
               else
                   avisa_errou_palavra()
                   pontos_ate_agora -=30
                   erros +=1
               end
         end
      end
      avisa_pontos(pontos_ate_agora)
end

def jogo_da_forca
      nome = da_boas_vindas

      loop do 
            joga(nome) 
            break if nao_quer_jogar?
      end
end

ui.rb

def avisa_chute_efetuado(chute)
      puts "Você já chutou #{chute}"
end
def avisa_letra_nao_encontrada
      puts "Letra nao encontrada"
end
def avisa_letra_encontrada(total_encontrado)
      puts "Letra encontrada  #{total_encontrado} vezes"
end
def avisa_acertou_palavra()
      puts "Parabens! Acertou!"
end
def avisa_errou_palavra()
      puts "Que pena errou!"
end
def avisa_pontos(pontos_ate_agora)
      puts "Voce ganhou #{pontos_ate_agora} pontos"
end

def da_boas_vindas
      puts "Bem vindo ao jogo da forca"
      puts "Qual o seu nome"
      nome = gets.strip
      puts "\n\n\n\n\n\n"
      puts "Comecaremos o jogo para voce, #{nome}"
      nome
end

def sorteia_palavra_secreta
      puts "Escolhendo palavra secreta"
      palavra_secreta = "programador"
      puts "Escolhida uma palavra secreta com #{palavra_secreta.size} letras... Boa sorte!"
      palavra_secreta
end

def nao_quer_jogar?
      puts "Deseja jogar novamente? (S/N)"
      quero_jogar = gets.strip
      nao_quero_jogar = quero_jogar.upcase == "N"
end

def pede_um_chute(chutes, erros)
      puts "\n\n\n\n\n\n"
      puts "Erros ate agora #{erros}"
      puts "Chutes ate agora #{chutes}"
      puts "Entre com a letra ou palvra"
      chute = gets.strip
      puts "Será que acertou ? Você chutou #{chute}"
      chute
end

def conta(texto, caracater)
      total_encontrado = 0

      for letra in texto.chars
          mascara = if letra.eql?(caracater)
                        total_encontrado += 1
                        letra               
                  else
                        "_"
                  end
          #if letra == caracater
          #     total_encontrado += 1
          #     mascara = letra
          #else
          #      mascara = "_"
          #end
            print "#{mascara}"
      end  
   total_encontrado
end
4 respostas

Erros ate agora 0                                                                                                          
Chutes ate agora []                                                                                                        
Entre com a letra ou palvra                                                                                                
a                                                                                                                          
Será que acertou ? Você chutou a                                                                                           
/home/ubuntu/workspace/ruby_code_exercises/forca.rb:23:in `joga': undefined method `size' for nil:NilClass (NoMethodError) 
        from /home/ubuntu/workspace/ruby_code_exercises/forca.rb:52:in `block in jogo_da_forca'                            
        from /home/ubuntu/workspace/ruby_code_exercises/forca.rb:51:in `loop'                                              
        from /home/ubuntu/workspace/ruby_code_exercises/forca.rb:51:in `jogo_da_forca'                                     
        from /home/ubuntu/workspace/ruby_code_exercises/main.rb:2:in `<main>'
solução!

Ops gente, era lixo da enviroment mesmo.... :S

Olá Eduardo, estou com o mesmo erro. Não entendi como vc solucionou. O que estava errado?

Também estou com o mesmo problema e até agora não consegui nenhuma resolução (já cheguei até a refazer o código por completo), qual era o erro?