4
respostas

Escolher mapas de uma pasta

Oi tudo joia? Eu fiz meu jogo com 4 mapas e eles tão dentro da pasta "mapas", porém quero que o jogador possa escolher qual ele vai jogar, só que não estou conseguindo abrir o 2 e 3 mapa, apenas o primeiro e ultimo usando esse codigo:

def le_mapa(numero)

    arquivo = "mapa#{numero}.txt" #arquivo
    path = Dir.glob('mapas/*.txt').last #usar o ultimo ou first para o primeiro
    texto = File.read(path) #ler o texto
    mapa = texto.split "\n" #separar cada linha
end

Poderiam me ajudar a fazer a pessoa escolher? obs: Estou usando 1 "if" para selecionar os mapas. exemplo:

escolha = gets.to_i
if(escolha == 1)
    arquivo = "mapa#{numero}.txt" 
    path = Dir.glob('mapas/*.txt').first
    texto = File.read(path) 
    mapa = texto.split "\n" 
end

if(escolha ==4)
arquivo = "mapa#{numero}.txt" 
    path = Dir.glob('mapas/*.txt').last
    texto = File.read(path) 
    mapa = texto.split "\n" 
end
4 respostas

Oi Igor, o método glob retorna um array, então você pode usar o método size e fazer uma verificação só. Olha o exemplo aqui pra ver se dá pra entender melhor:

mapas = Dir.glob('mapas/*.txt')
puts "escolha o mapa de 1 à #{mapas.size}"
escolha = gets.to_i

if(escolha < mapas.size)
    path = mapas[escolha - 1]
    texto = File.read(path) 
    mapa = texto.split "\n" 
end

Como o Array começa pelo zero, a gente precisa subtrair 1 ali por que ao selecionar o mapa 1, estaremos acessando o índice zero do Array. Faz sentido?

Muito obrigado, por algum motivo do qual não sei o último mapa não estava sendo carregado ai eu coloquei assim o if:

if(escolha < mapas.size+1) 
        path = mapas[escolha - 1] #c
        texto = File.read(path) 
        mapa = texto.split "\n" 
    end

poderia me explicar o porque assim ta funcionando?

Igor, é que dessa forma

if(escolha < mapas.size)

você está exigindo que a escolha tem que ser menor que a quantidade de mapas. Ou seja, se há quatro mapas, a escolha tem que ser, no máximo 3. Você pode deixar do jeito que deixou ou alterar para

if(escolha <= mapas.size)

que vai incluir o último mapa também! :)

Opa Igor, isso mesmo que o Yan comentou acima. Desculpa, eu devia ter prestado atenção nisso antes e mencionado no primeiro post.