Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require_relative 'ui'
- require_relative 'heroi'
- def posicao_valida? (mapa, nova_posicao)
- linhas = mapa.size
- colunas = mapa[0].size
- return false if estoura_linhas = (nova_posicao[0]< 0 )||(nova_posicao[0]>= linhas)
- return false if estoura_colunas = (nova_posicao[1]<0 )|| (nova_posicao[1]>= colunas)
- colide_parede = mapa[nova_posicao[0]][nova_posicao[1]]=="X"
- colide_fantasma = mapa[nova_posicao[0]][nova_posicao[1]]=="F"
- if colide_parede||colide_fantasma
- return false
- end
- true
- end
- def soma_vetor (movimento, posicao)
- [posicao[0]+movimento[0],posicao[1]+movimento[1]]
- end
- def posicoes_validas_a_partir_de (mapa,novo_mapa, posicao)
- posicoes=[]
- if !posicao.empty?
- #versão 2
- movimentos = [[+1,0],[0,+1],[-1,0],[0,-1]]
- movimentos.each do |movimento|
- nova_posicao = soma_vetor(movimento,posicao)
- if posicao_valida?(mapa, nova_posicao) && posicao_valida?(novo_mapa, nova_posicao)
- posicoes<<nova_posicao
- end
- end
- end
- posicoes
- end
- def copia_mapa (mapa)
- #versão 3
- novo_mapa = mapa.join("\n").tr("F"," ").split "\n"
- end
- def move_fantasma mapa,novo_mapa, linha, coluna
- posicoes = posicoes_validas_a_partir_de mapa,novo_mapa, [linha, coluna]
- if posicoes.empty?
- return
- end
- posicao = posicoes[rand(posicoes.size)]
- mapa[linha][coluna]=" "
- novo_mapa[posicao[0]][posicao[1]]="F"
- end
- def move_fantasmas mapa
- caracter_do_fantasma = "F"
- novo_mapa = copia_mapa mapa
- mapa.each_with_index do |linha_atual,linha|
- linha_atual.chars.each_with_index do |caractere_atual,coluna|
- eh_fantasma = caractere_atual==caracter_do_fantasma
- if eh_fantasma
- move_fantasma mapa, novo_mapa, linha, coluna
- end
- end
- end
- novo_mapa
- 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
- jogador = Heroi.new
- jogador.linha = linha
- jogador.coluna = coluna_do_heroi
- return jogador
- end
- end
- nil
- end
- def le_mapa numero
- arquivo = "mapa#{numero}.txt"
- texto = File.read arquivo
- mapa = texto.split "\n"
- end
- def jogador_perdeu? mapa
- perdeu = !encontra_jogador(mapa)
- end
- def executa_remocao mapa, posicao, quantidade
- if mapa[posicao.linha][posicao.coluna]=="X"
- return
- end
- posicao.remove_do mapa
- remove mapa, posicao, quantidade-1
- end
- def remove (mapa, posicao, quantidade)
- #outra maneira seria
- #return unless quantidade>0
- #não execute se for maior que zero
- if quantidade ==0
- return
- end
- executa_remocao mapa, posicao.direita, quantidade
- executa_remocao mapa, posicao.acima, quantidade
- executa_remocao mapa, posicao.esquerda, quantidade
- executa_remocao mapa, posicao.abaixo, quantidade
- end
- def joga nome
- mapa = le_mapa 4
- while true
- desenha_mapa mapa
- direcao = pede_movimento
- heroi = encontra_jogador mapa
- nova_posicao = heroi.calcula_nova_posicao(direcao)
- if !posicao_valida?(mapa, nova_posicao.to_array)
- next
- end
- heroi.remove_do mapa
- if mapa[nova_posicao.linha][nova_posicao.coluna]=="*"
- remove mapa, nova_posicao, 4
- end
- nova_posicao.coloca_no mapa
- mapa = move_fantasmas mapa
- if jogador_perdeu? mapa
- game_over
- break;
- end
- end
- end
- def inicia_fogefoge
- nome = da_boas_vindas
- joga nome
- end
Advertisement
Add Comment
Please, Sign In to add comment