Quando eu movimento o herói aparece o seguinte erro:
Traceback (most recent call last):
13: from ./main.rb:3:in `<main>'
12: from C:/Users/Usuario/Desktop/programas/fogefoge/fogefoge.rb:21:in `inicia_jogo'
11: from C:/Users/Usuario/Desktop/programas/fogefoge/fogefoge.rb:15:in `joga'
10: from C:/Users/Usuario/Desktop/programas/fogefoge/fogefoge.rb:74:in `move_fantasmas'
9: from C:/Users/Usuario/Desktop/programas/fogefoge/fogefoge.rb:74:in `each_with_index'
8: from C:/Users/Usuario/Desktop/programas/fogefoge/fogefoge.rb:74:in `each'
7: from C:/Users/Usuario/Desktop/programas/fogefoge/fogefoge.rb:75:in `block in move_fantasmas'
6: from C:/Users/Usuario/Desktop/programas/fogefoge/fogefoge.rb:75:in `each_with_index'
5: from C:/Users/Usuario/Desktop/programas/fogefoge/fogefoge.rb:75:in `each'
4: from C:/Users/Usuario/Desktop/programas/fogefoge/fogefoge.rb:78:in `block (2 levels) in move_fantasmas'
3: from C:/Users/Usuario/Desktop/programas/fogefoge/fogefoge.rb:85:in `move_fantasma'
2: from C:/Users/Usuario/Desktop/programas/fogefoge/fogefoge.rb:101:in `posicoes_validas_a_partir_de'
1: from C:/Users/Usuario/Desktop/programas/fogefoge/fogefoge.rb:59:in `posicao_valida?'
C:/Users/Usuario/Desktop/programas/fogefoge/fogefoge.rb:59:in `<': comparison of String with 0 failed (ArgumentError)
o meu código esta assim:
main.rb
require_relative "fogefoge"
inicia_jogo
fogefoge.rb
require_relative "ui"
def inicia_jogo
nome = da_boas_vindas
joga nome
end
def joga nome
mapa = le_mapa 2
while true
desenha mapa
direcao = pede_movimento
heroi = encontra_jogador mapa
posicao_atual = nova_posicao heroi,direcao
if !posicao_valida? mapa, posicao_atual
next
end
mapa[heroi[0]][heroi[1]] = " "
mapa[posicao_atual[0]][posicao_atual[1]] = "H"
move_fantasmas mapa
end
end
def le_mapa numero
arquivo = "mapa#{numero}.txt"
texto = File.read arquivo
mapa = texto.split("\n")
end
def encontra_jogador mapa
heroi = "H"
mapa.each_with_index do |linha_atual,linha|
coluna_do_heroi = linha_atual.index heroi
if coluna_do_heroi
return [linha,coluna_do_heroi]
end
end
end
def nova_posicao heroi, direcao
heroi = heroi.dup
movimentos = {
"W" => [-1,0],
"S" => [+1,0],
"A" => [0,-1],
"D" => [0,+1]
}
movimento = movimentos[direcao]
heroi[0] += movimento[0]
heroi[1] += movimento[1]
heroi
end
def posicao_valida? mapa,posicao_atual
linhas = mapa.size
colunas = mapa[0].size
estorou_linha = posicao_atual[0] < 0 || posicao_atual[0] >= linhas
estorou_coluna = posicao_atual[1] < 0 || posicao_atual[1] >= colunas
nova_posicao = mapa[posicao_atual[0]][posicao_atual[1]]
if nova_posicao == "X" || nova_posicao == "F"
return false
end
if estorou_linha || estorou_coluna
return false
end
true
end
def move_fantasmas mapa
fantasma = "F"
mapa.each_with_index do |linha_atual, linha|
linha_atual.chars.each_with_index do |caracter_atual, caracter|
eh_fantasma = caracter_atual == fantasma
if eh_fantasma
move_fantasma mapa,[linha,caracter]
end
end
end
end
def move_fantasma (mapa,posicao)
posicoes = posicoes_validas_a_partir_de mapa, posicao
return if posicoes.empty?
posicao = posicoes[0]
mapa[linha][coluna] = " "
mapa[posicao[0]][posicao[1]] = "F"
end
def soma_de_vetores (vetor1,vetor2)
soma = [vetor1[0]+vetor2[0],vetor1[1]+vetor2[1]]
end
def posicoes_validas_a_partir_de(mapa, posicao)
posicoes = []
baixo = mapa[posicao[0] + 1][posicao[1]]
if posicao_valida? mapa,baixo
posicoes << baixo
end
direita = mapa[posicao[0]][posicao[1] + 1]
if posicao_valida? mapa,direita
posicoes << direita
end
cima = mapa[posicao[0] - 1][posicao[1]]
if posicao_valida? mapa,cima
posicoes << cima
end
esquerda = mapa[posicao[0]][posicao[1] - 1]
if posicao_valida? mapa,esquerda
posicoes << esquerda
end
posicoes
end
ui.rb
def da_boas_vindas
puts "Bem vindo ao Foge Foge"
puts "Qual seu nome jogador?"
nome = gets.strip
puts "\n\n\n\n"
puts "Começaremos o jogo para você, #{nome}"
nome
end
def pede_movimento
puts "para onde deseja ir?"
movimento = gets.strip
movimento.upcase
end
def desenha mapa
puts mapa
end