Olá pessoal!
Estou abrindo um novo tópico, pois a partir do Vídeo 8 ou 9, meu programa começou a não funcionar, ele fica assim:
Como funciona o erro:
-> Primeiro movimento, apaga o espaço
-> Segundo movimento, apaga o X
-> Assim, ele segue até erro quando estou saindo do mapa
C:/rubyIII/logic_game.rb:62:in []=': index 4 out of string (IndexError)
from C:/rubyIII/logic_game.rb:62:in
def_game'
from C:/rubyIII/logic_game.rb:68:in init_game'
from main.rb:3:in
'
Segue o código da lógica:
require_relative 'ui'
def read_map(number)
arquivo = "mapa#{number}.txt"
texto = File.read(arquivo)
map = texto.split "\n"
end
def find_player(map)
letter_hero = "H"
map.each_with_index do |line_actual , line|
column = line_actual.index letter_hero
if column
return [line, column]
end
end
end
def calc_new_position(hero, direction)
hero = hero.dup
case direction
when "W"
hero[0] -= 1
when "S"
hero[0] += 1
when "A"
hero[1] -= 1
when "D"
hero[1] += 1
end
hero
end
def position_valid?(map, position)
lines = map.size
column = map[0].size
after_map_lines = (position[0] < 0) || (position[0] >= lines)
after_map_column = (position[1] < 0) || (position[1] >= column)
if map[position[0]][position[1]] == "X"
return false
end
if after_map_lines || after_map_column
return false
end
true
end
def def_game(name)
map = read_map 1
while true
draw_map map
direction = moviment_user
hero = find_player map
new_position = calc_new_position hero, direction
if !position_valid? map, new_position
next
end
map[hero[0]][hero[1]] = ""
map[new_position[0]][new_position[1]] = "H"
end
end
def init_game
name = welcome_game
def_game name
end
Segue o ui.rb
def welcome_game
puts "Seja bem vindo ao Pacman do Ruby"
puts "Qual é o seu nome?"
name = gets.strip
puts "\n\n\n\n"
puts "O jogo está sendo iniciado, #{name}\n"
name
end
def draw_map(map)
puts map
end
def moviment_user
puts "Para onde deseja ir?"
moviment = gets.strip
moviment
end