Advertisement
Eshkation-

Tarefa semanal III

Mar 16th, 2018
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.03 KB | None | 0 0
  1. --[[
  2. Tarefa III - interação com coordenadas
  3. 05/03/2018 - 09/03/2018
  4. Dificuldade:
  5.     ★★★★☆ (+20 / -5 pontos de glória)
  6. Descrição:
  7.     Crie um código que gere uma textArea a cada novo mapa em uma coordenada x,y aleatória, mas com altura (100px) e largura (300px) fixas. Ela possui as seguintes propriedades:
  8.     - Objetos de shaman não podem permanecer dentro da área da textArea, sendo removidos imediatamente;
  9.     - Ratos sem queijo são lançados para fora dela;
  10.     - Ratos com queijo recebem toca automáticamente ao entrar na área da textArea.
  11. ]]--
  12.  
  13. -- Vamos começar criando uma tabela para armazenar as coordenadas atuais da textArea:
  14. local coordenadas = {
  15.     x = 0,
  16.     y = 0
  17. }
  18.  
  19. -- Ao iniciar um novo mapa, vamos definir as novas posições da textArea, pra isso utilizamos a função eventNewGame
  20. function eventNewGame()
  21.     -- a função math.random gera um número aleatório baseado em dois argumentos: mínimo e máximo
  22.     coordenadas.x = math.random(0, 800)
  23.     coordenadas.y = math.random(0, 400)
  24.    
  25.     -- Agora mostramos a textArea com as novas coordenadas
  26.     ui.addTextArea(0, '', nil, coordenadas.x, coordenadas.y, 300, 100, 0xFF2F2D, 0xFF2F2D, 1, false)
  27.     --0x324650,0x324650
  28. end
  29.  
  30. -- Precisamos checar as condições dadas na tarefa semanal, então usamos a função eventLoop, uma função que é chamada a cada 0.5s e permite trabalhar com as coordenadas em quase tempo real.
  31. function eventLoop()
  32.     -- Definimos uma tabela chamada ids, ela irá armazenar os ids dos objetos que deverão ser removidos
  33.     local ids = {}
  34.    
  35.     -- Vamos checar se existe algum objeto dentro da textArea, utilizando a tabela tfm.get.room.objectList
  36.     for index, objeto in pairs(tfm.get.room.objectList) do
  37.         -- vamos checar se objeto.x está dentro das coordenadas horizontais da textArea, não esquecendo de adicionar a largura da textArea:
  38.         if (coordenadas.x <= objeto.x and objeto.x <= coordenadas.x+300) then
  39.             -- Agora basta checar se objeto.y também está dentro das coordenadas verticais da textArea:
  40.             if (coordenadas.y <= objeto.y and objeto.y <= coordenadas.y+100) then
  41.                 -- Se está, adicionamos o objeto a tabela ids
  42.                 table.insert(ids, objeto.id)
  43.             end
  44.         end
  45.     end
  46.    
  47.     -- Agora removemos todos os ids adicionados a tabela
  48.     for _, objeto in pairs(ids) do
  49.         tfm.exec.removeObject(objeto)
  50.     end
  51.    
  52.     -- Para os ratinhos, vamos utilizar o mesmo código de coordenadas, mas utilizando tfm.get.room.objectList
  53.     for jogador, dados_jogador in pairs(tfm.get.room.playerList) do
  54.         if (coordenadas.x <= dados_jogador.x and dados_jogador.x <= coordenadas.x+300) then
  55.             if (coordenadas.y <= dados_jogador.y and dados_jogador.y <= coordenadas.y+100) then
  56.                 -- Se o jogador está dentro da textArea, mas NÃO possui queijo, ele deve ser lançado pra fora dela, caso ele possua, o rato entra na toca:
  57.                 if (dados_jogador.hasCheese) then
  58.                     tfm.exec.playerVictory(jogador)
  59.                 else
  60.                     tfm.exec.movePlayer(jogador, 0, 0, false, math.random(-1, 1)*100, -100, true)
  61.                 end
  62.             end
  63.         end
  64.     end
  65.    
  66. end
  67.  
  68. -- Agora chamamos um novo mapa:
  69. tfm.exec.newGame()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement