Olá, estou com um problema em meu código que parece não ter muito nexo. Ao invés de mover meu herói para qualquer lugar, quantas vezes eu quiser (menos onde há os muros), ele apenas faz uma cópia do herói e limita-me à apenas duas jogadas. O código está abaixo:
require_relative 'ui'
def le_mapa(numero)
    arquivo = "mapa#{numero}.txt"
    texto = File.read arquivo
    mapa = texto.split "\n"
end
def encontra_jogador(mapa)
    caractere_do_heroi = "H"
    mapa.each_with_index do |linha_atual, linha|
        coluna_do_heroi = linha_atual.index caractere_do_heroi
        if coluna_do_heroi
            return [linha, coluna_do_heroi]
        end    
    end    
    #não achei!    
end
def calcula_nova_posição(heroi, direção)
    case direção
        when "W"
            heroi[0] -= 1
        when "S"
            heroi[0] += 1
        when "A"
            heroi[1] -= 1
        when "D"
            heroi[1] += 1
    end    
    heroi
end
def joga(nome)
    mapa = le_mapa 1
    while true
        desenha mapa
        direção = pede_movimento
        heroi = encontra_jogador mapa
        nova_posição = calcula_nova_posição heroi, direção    
        if nova_posição[0] < 0
            next
        end
        if nova_posição[1] < 0
            next
        end
        if nova_posição[0] >= mapa.size
            next
        end
        if nova_posição[1] >= mapa[0].size
            next
        end
        if mapa[nova_posição[0]] [nova_posição[1]] == "X"
            next
        end
        mapa[heroi[0]][heroi[1]] = " "
        mapa[nova_posição[0]] [nova_posição[1]] = "H"
    end
end
def inicia_fogefoge
    nome = da_boas_vindas
    joga nome
end
Já agradeço de antemão a qualquer um que queira tentar ajudar.
Obrigado pela atenção.