depois que o programa esta escrito e coloco para rodar o mesmo e der erro por digitar algo errado, o ruby não mostra qual tipo de erro e onde estou errando.
o prompt fecha quando da erro
depois que o programa esta escrito e coloco para rodar o mesmo e der erro por digitar algo errado, o ruby não mostra qual tipo de erro e onde estou errando.
o prompt fecha quando da erro
posta o código inteiro pra gente? se for longo, pode ser no gist/github
require_relative "ui"
def le_mapa(numero)
arquivo = "mapa#{numero}.txt"
texto = File.read arquivo
mapa = texto.split "\n"
end
def encontra_jogador(mapa)
caracter_do_heroi = "H"
mapa.each_wifh_index do |linha_atual, linha|
coluna_do_heroi = linha_atual.index caracter_do_heroi
if coluna_do_heroi != - 1
return [linha, coluna_do_heroi]
end
end
end
def joga(nome)
mapa = le_mapa (1)
while true
desenha mapa
direcao = pede_movimento
heroi = encontra_jogador mapa
mapa[heroi[0]][heroi[1]] = " "
case direcao
when "W"
heroi[0] -= 1
when "S"
heroi[0] += 1
when "A"
heroi[1] -= 1
when "D"
heroi[1] += 1
end
mapa[heroi[0]][heroi[1]] = "H"
end
end
def inicia_fogefoge
nome = da_boas_vindas
joga nome
end
acho que o problema esta nessa linha
mapa.each_wifh_index do |linha_atual, linha|
Como você está rodando o seu script? Dando dois cliques nele ou chamando pela linha de comando?
chamando pela linha de comando no cmd
e quem chama o inicia_fogefoge? nao tem mais nenhum arquivo?
Flavio, nao era pra ele fechar a linha no cmd. Rola voce colocar alguns pauses/debugar pra descobrir a linha/erro?
Flavio,
Percebi que tem um typo no seu código.
Troque de each_wifh_index
para each_with_index
.
Abraço!
este é o erro !!
****undefined method `each_with_index' for nil:NilClass**
(repl):58:in `encontra_jogador'
(repl):71:in `joga'
(repl):82:in `inicia_fogefoge'
(repl):85:in `<main>
este é meu codigo ate o momento
def mapa1
puts "XXXXX"
puts "X H X"
puts "X X X"
puts "X X X"
puts "X X"
puts " X "
puts " XXX "
puts " X "
puts "X F X"
puts "XXXXX"
end
def da_boas_vindas
puts "Bem vindo ao foge-foge"
puts "Qual é seu nome"
nome = gets.strip
pula_linha6
puts "Começaremos o jogo para você, #{nome}"
nome
end
def pula_linha6
puts "\n\n\n\n\n\n"
end
def pula_linha2
puts "\n\n"
end
def desenha(mapa)
pula_linha2
puts mapa
end
def pede_movimento
pula_linha2
puts "Para onde deseja ir ?"
movimento = gets.strip
end
def calcula_nova_posicao(heroi, direcao)
heroi = heroi.dup
case direcao
when "W"
heroi[0] -= 1
when "S"
heroi[0] += 1
when "A"
heroi[1] -= 1
when "D"
heroi[1] += 1
end
heroi
end
def encontra_jogador(mapa)
caracter_do_heroi = "H"
mapa.each_with_index do |linha_atual, linha|
coluna_do_heroi = linha_atual.index caracter_do_heroi
if coluna_do_heroi != -1
return [linha, coluna_do_heroi]
end
end
end
def joga(nome)
mapa = mapa1
while true
desenha mapa
direcao = pede_movimento
heroi = encontra_jogador mapa
mapa[heroi[0]][heroi[1]] = " "
nova_posicao = calcula_nova_posicao heroi, direcao
puts "Antes: #{heroi}"
puts "Depois: #{nova_posicao}"
mapa[nova_posicao[0]][nova_posicao[1]] = "H"
end
end
def inicia_fogefoge
nome = da_boas_vindas
joga nome
end
inicia_fogefoge
Oi Flavio, está dando este erro pois o seu método mapa1
está retornando nulo.
Na verdade você deve chamar a função le_mapa
ao invés deste método mapa1
que só possui a impressão e não retorna nada.
def le_mapa(numero)
arquivo = "mapa#{numero}.txt"
texto = File.read arquivo
mapa = texto.split "\n"
end
e no método joga
chamar este método passando o parâmetro 1:
def joga(nome)
mapa = le_mapa (1)
# restante do código
end
Abraço!
Ola !
estou copilando o programa neste site: repl.it...
E não consigo ler um arquivo TXT com o programa rodando neste site que e online.
abraço!
oi Flavio. O repl.it não vai deixar acessar algumas coisas como leitura de arquivo. Chegando nesse ponto, é melhor você instalar o ruby mesmo na máquina.