Guest User

oofogefoge.rb

a guest
Mar 6th, 2018
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.52 KB | None | 0 0
  1. require_relative 'ui'
  2. require_relative 'heroi'
  3.  
  4. def posicao_valida? (mapa, nova_posicao)
  5. linhas = mapa.size
  6. colunas = mapa[0].size
  7. return false if estoura_linhas = (nova_posicao[0]< 0 )||(nova_posicao[0]>= linhas)
  8. return false if estoura_colunas = (nova_posicao[1]<0 )|| (nova_posicao[1]>= colunas)
  9. colide_parede = mapa[nova_posicao[0]][nova_posicao[1]]=="X"
  10. colide_fantasma = mapa[nova_posicao[0]][nova_posicao[1]]=="F"
  11. if colide_parede||colide_fantasma
  12. return false
  13. end
  14.  
  15. true
  16. end
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23. def soma_vetor (movimento, posicao)
  24. [posicao[0]+movimento[0],posicao[1]+movimento[1]]
  25. end
  26.  
  27. def posicoes_validas_a_partir_de (mapa,novo_mapa, posicao)
  28. posicoes=[]
  29. if !posicao.empty?
  30. #versão 2
  31. movimentos = [[+1,0],[0,+1],[-1,0],[0,-1]]
  32. movimentos.each do |movimento|
  33. nova_posicao = soma_vetor(movimento,posicao)
  34. if posicao_valida?(mapa, nova_posicao) && posicao_valida?(novo_mapa, nova_posicao)
  35. posicoes<<nova_posicao
  36. end
  37. end
  38.  
  39.  
  40. end
  41. posicoes
  42. end
  43.  
  44. def copia_mapa (mapa)
  45.  
  46. #versão 3
  47. novo_mapa = mapa.join("\n").tr("F"," ").split "\n"
  48.  
  49.  
  50.  
  51.  
  52. end
  53.  
  54.  
  55. def move_fantasma mapa,novo_mapa, linha, coluna
  56. posicoes = posicoes_validas_a_partir_de mapa,novo_mapa, [linha, coluna]
  57. if posicoes.empty?
  58. return
  59. end
  60.  
  61. posicao = posicoes[rand(posicoes.size)]
  62. mapa[linha][coluna]=" "
  63. novo_mapa[posicao[0]][posicao[1]]="F"
  64. end
  65.  
  66. def move_fantasmas mapa
  67. caracter_do_fantasma = "F"
  68. novo_mapa = copia_mapa mapa
  69. mapa.each_with_index do |linha_atual,linha|
  70. linha_atual.chars.each_with_index do |caractere_atual,coluna|
  71. eh_fantasma = caractere_atual==caracter_do_fantasma
  72. if eh_fantasma
  73. move_fantasma mapa, novo_mapa, linha, coluna
  74.  
  75. end
  76. end
  77. end
  78. novo_mapa
  79. end
  80.  
  81. def encontra_jogador mapa
  82.  
  83. caracter_do_heroi = "H"
  84. mapa.each_with_index do |linha_atual,linha|
  85. coluna_do_heroi = linha_atual.index caracter_do_heroi
  86. if coluna_do_heroi
  87. jogador = Heroi.new
  88. jogador.linha = linha
  89. jogador.coluna = coluna_do_heroi
  90. return jogador
  91. end
  92.  
  93. end
  94. nil
  95. end
  96.  
  97.  
  98. def le_mapa numero
  99. arquivo = "mapa#{numero}.txt"
  100. texto = File.read arquivo
  101. mapa = texto.split "\n"
  102. end
  103.  
  104. def jogador_perdeu? mapa
  105.  
  106. perdeu = !encontra_jogador(mapa)
  107.  
  108. end
  109.  
  110. def executa_remocao mapa, posicao, quantidade
  111. if mapa[posicao.linha][posicao.coluna]=="X"
  112. return
  113. end
  114. posicao.remove_do mapa
  115. remove mapa, posicao, quantidade-1
  116. end
  117.  
  118. def remove (mapa, posicao, quantidade)
  119. #outra maneira seria
  120. #return unless quantidade>0
  121. #não execute se for maior que zero
  122. if quantidade ==0
  123. return
  124. end
  125. executa_remocao mapa, posicao.direita, quantidade
  126. executa_remocao mapa, posicao.acima, quantidade
  127. executa_remocao mapa, posicao.esquerda, quantidade
  128.  
  129. executa_remocao mapa, posicao.abaixo, quantidade
  130. end
  131. def joga nome
  132. mapa = le_mapa 4
  133. while true
  134. desenha_mapa mapa
  135. direcao = pede_movimento
  136. heroi = encontra_jogador mapa
  137. nova_posicao = heroi.calcula_nova_posicao(direcao)
  138. if !posicao_valida?(mapa, nova_posicao.to_array)
  139. next
  140. end
  141. heroi.remove_do mapa
  142. if mapa[nova_posicao.linha][nova_posicao.coluna]=="*"
  143. remove mapa, nova_posicao, 4
  144. end
  145. nova_posicao.coloca_no mapa
  146.  
  147. mapa = move_fantasmas mapa
  148. if jogador_perdeu? mapa
  149. game_over
  150. break;
  151. end
  152. end
  153. end
  154.  
  155. def inicia_fogefoge
  156. nome = da_boas_vindas
  157. joga nome
  158. end
Advertisement
Add Comment
Please, Sign In to add comment