Advertisement
MasterCheats

Mario Bros mini

Feb 10th, 2025 (edited)
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JavaScript 18.07 KB | Gaming | 0 0
  1. -- CONFIGURAÇÕES INICIAIS
  2. largura = 17         -- Largura do viewport (área visível)
  3. altura = 6           -- Altura do viewport
  4. nivel = 1
  5. pontuacao = 0
  6. vidas = 3
  7. gameOver = false
  8.  
  9. -- CONFIGURAÇÕES DO MUNDO
  10. worldWidth = 100     -- Largura total do cenário (pode aumentar conforme nível)
  11. world = {}           -- Matriz do MUNDO
  12.  
  13. -- VARIÁVEIS DO JOGADOR
  14. player = {
  15.     x = 1,          -- Posição inicial X
  16.     y = altura - 1, -- Posição inicial Y (logo acima do chão)
  17.     icon = "🕺"
  18. }
  19.  
  20. -- VARIÁVEIS DE ITEM MÁGICO
  21. itemMagico = ""     -- Ícone do item mágico coletado (ex: "💣", "⚡", "🔥")
  22. magicalShots = 0    -- Número de disparos disponíveis com o poder MÁGICO
  23. -- VARIÁVEIS DE CONTROLE DE CÂMERA (viewport)
  24. viewportOffsetX = 100
  25. -- EMOJIS USADOS NO JOGO
  26. chaoIcon = "🟫"               -- Chão
  27. holeIcon = "🕳️"              -- Buraco no chão
  28. coinIcon = "🪙"               -- Moeda (coletável normal)
  29. specialBlockIcon = "🟩"       -- Bloco especial (gera item mágico)
  30. flagIcon = "🚩"               -- Bandeira para avançar de nível
  31. cloudIcon = "☁️"              -- Céu
  32.  
  33. -- Inimigos e Itens
  34. enemyIcons = {"🤡", "😈", "👽", "👹", "👾"}
  35. itemIcons = {"🍎", "🍇", "🍔", "🧃", "🍹"}  -- (não serão usados, pois substituímos por moedas)
  36. magicIcons = {"🔥", "⚡", "💣"}  -- Itens mágicos
  37.  
  38. -- TABELA DE INIMIGOS
  39. inimigos = {}  -- Cada inimigo: {x, y, icon, vida}
  40.  
  41. ----------------------------------------------------------------
  42. -- FUNÇÃO AUXILIAR: Reposicionar o jogador ao cair no buraco
  43. ----------------------------------------------------------------
  44. function cairNoBuraco()
  45.     vidas = vidas - 1
  46.     gg.alert("Você caiu em um buraco e perdeu 1 vida! Vidas restantes: " .. vidas, "OK")
  47.     if vidas <= 0 then
  48.         gg.alert("Você perdeu todas as vidas! Game Over!", "OK")
  49.         os.exit()
  50.     else
  51.         player.x = 1
  52.         player.y = altura - 1
  53.     end
  54. end
  55. ----------------------------------------------------------------
  56. -- FUNÇÃO: Gerar o cenário (mundo) para o nível atual
  57. ----------------------------------------------------------------
  58. function gerarMundo(nivel)
  59.     worldWidth = 100
  60.     world = {}
  61.     for r = 1, altura do
  62.         world[r] = {}
  63.         for c = 1, worldWidth do
  64.             world[r][c] = "⬛"  -- Espaço vazio
  65.         end
  66.     end
  67.     -- Céu: primeira linha com nuvens
  68.     for c = 1, worldWidth do
  69.         if math.random() < 0.4 then
  70.             world[1][c] = cloudIcon
  71.         end
  72.     end
  73.     -- Chão: última linha com chance de buraco (evitando buracos consecutivos)
  74.     for c = 1, worldWidth do
  75.         if c > 1 and world[altura][c-1] == holeIcon then
  76.             world[altura][c] = chaoIcon
  77.         elseif math.random() < 0.1 then
  78.             world[altura][c] = holeIcon
  79.         else
  80.             world[altura][c] = chaoIcon
  81.         end
  82.     end
  83.     -- Garantir spawn seguro: célula de spawn (coluna 1) deve ser segura
  84.     world[altura][1] = chaoIcon
  85.     if world[altura - 1][1] == holeIcon or world[altura - 1][1] == coinIcon or world[altura - 1][1] == specialBlockIcon then
  86.         world[altura - 1][1] = "⬛"
  87.     end
  88.     -- Gerar coletáveis na linha altura - 2 (100% de chance)
  89.     for c = 3, worldWidth - 2 do
  90.         if math.random() < 0.3 then
  91.             -- Forçamos que o bloco especial sempre gere poder
  92.             if math.random() < 0.2 then
  93.                 world[altura - 2][c] = specialBlockIcon  
  94.             else
  95.                 world[altura - 2][c] = coinIcon        
  96.             end
  97.         end
  98.     end
  99.     -- Gerar coletáveis na linha altura - 3 (opcional, 50% de chance)
  100.     for c = 1, worldWidth do
  101.         if math.random() < 0.05 then
  102.             world[altura - 3][c] = coinIcon
  103.         end
  104.     end
  105.     -- Gerar escadinha final para a bandeira
  106.     local stairs = 4  -- Número de degraus
  107.     -- Preenche os degraus na parte final do cenário (nas últimas colunas)
  108.     if altura >= 5 then
  109.         -- Linha 1 (topo da escada): apenas a bandeira
  110.         world[1][worldWidth] = flagIcon
  111.         -- Linha 2: 1 bloco (na última coluna)
  112.         world[2][worldWidth] = chaoIcon
  113.         -- Linha 3: 2 blocos (nas duas últimas colunas)
  114.         world[3][worldWidth-1] = chaoIcon
  115.         world[3][worldWidth]   = chaoIcon
  116.         -- Linha 4: 3 blocos (nas três últimas colunas)
  117.         world[4][worldWidth-2] = chaoIcon
  118.         world[4][worldWidth-1] = chaoIcon
  119.         world[4][worldWidth]   = chaoIcon
  120.         -- Linha 5: 4 blocos (nas quatro últimas colunas)
  121.         world[5][worldWidth-3] = chaoIcon
  122.         world[5][worldWidth-2] = chaoIcon
  123.         world[5][worldWidth-1] = chaoIcon
  124.         world[5][worldWidth]   = chaoIcon
  125.     end
  126.     -- Gerar inimigos na linha do jogador (acima do chão)
  127.     inimigos = {}
  128.     local quantidade = math.floor(nivel * 2)  -- Exemplo: nível 1 = 2, nível 2 = 4, etc.
  129.     for i = 1, quantidade do
  130.         local posX = math.random(10, worldWidth - 10)
  131.         local posY = altura - 1  -- Mesma linha que o jogador
  132.         local enemy = {
  133.             x = posX,
  134.             y = posY,
  135.             icon = enemyIcons[math.random(#enemyIcons)],
  136.             vida = nivel * 1  -- A vida aumenta com o nível
  137.         }
  138.         table.insert(inimigos, enemy)
  139.     end
  140. end
  141. ----------------------------------------------------------------
  142. -- FUNÇÃO: Desenhar o cenário (viewport)
  143. ----------------------------------------------------------------
  144. function desenharMundo()
  145.     local header = "❤️Vidas: " .. vidas .. ""..string.rep(" ", 20).."💥Item Mágico: " .. (itemMagico ~= "" and itemMagico or " ") .. " " .. magicalShots .. "\n📶Nível: " .. nivel .. ""..string.rep(" ", 22).."🪙Pontuação: " .. pontuacao .. "\n\n"
  146.     local tela = header
  147.     viewportOffsetX = math.max(1, player.x - math.floor(largura/2))
  148.     if viewportOffsetX + largura - 1 > worldWidth then
  149.         viewportOffsetX = worldWidth - largura + 1
  150.     end
  151.     for r = 1, altura do
  152.         local linha = ""
  153.         for c = viewportOffsetX, viewportOffsetX + largura - 1 do
  154.             local ch = world[r][c] or " "
  155.             if r == player.y and c == player.x then
  156.                 ch = player.icon
  157.             end
  158.             for _, enemy in ipairs(inimigos) do
  159.                 if r == enemy.y and c == enemy.x then
  160.                     ch = enemy.icon
  161.                     break
  162.                 end
  163.             end
  164.             linha = linha .. ch
  165.         end
  166.         tela = tela .. linha .. "\n"
  167.     end
  168.     return tela
  169. end
  170. ----------------------------------------------------------------
  171. -- FUNÇÃO: Aplicar Gravidade – se o jogador estiver sobre um buraco ou sem suporte, perde vida e é reposicionado
  172. ----------------------------------------------------------------
  173. function aplicarGravidade()
  174.     if world[player.y][player.x] == holeIcon then
  175.         cairNoBuraco()
  176.     elseif player.y < altura then
  177.         local celulaAbaixo = world[player.y + 1][player.x]
  178.         if celulaAbaixo ~= chaoIcon and celulaAbaixo ~= coinIcon and celulaAbaixo ~= specialBlockIcon then
  179.             player.y = altura - 1
  180.         end
  181.     end
  182. end
  183. ----------------------------------------------------------------
  184. -- FUNÇÃO: Processar o pulo e atualização do mundo
  185. -- puloTipo: "reto" ou "diagonal2"
  186. -- Permite alcançar até 2 linhas acima
  187. ----------------------------------------------------------------
  188. function atualizarMundoPulo(puloTipo)
  189.     if puloTipo == "reto" then
  190.         local tx = player.x
  191.         local ty1 = player.y - 1
  192.         local ty2 = player.y - 2
  193.        
  194.         if ty1 >= 1 then
  195.             local bloco1 = world[ty1][tx]
  196.             if bloco1 == coinIcon then
  197.                 pontuacao = pontuacao + 100
  198.                 world[ty1][tx] = "⬛"  -- Remove o coletável
  199.                 gg.toast("Você coletou uma moeda! (+100 pts)")
  200.                 return
  201.             elseif bloco1 == specialBlockIcon then
  202.                 local magia = magicIcons[math.random(#magicIcons)]
  203.                 if itemMagico == magia then
  204.                     magicalShots = magicalShots + 9
  205.                 else
  206.                     itemMagico = magia
  207.                     magicalShots = 9
  208.                 end
  209.                 pontuacao = pontuacao + 500
  210.                 world[ty1][tx] = "✅"
  211.                 gg.toast("Bloco mágico! Você coletou " .. magia .. " com 9 disparos! (+500 pts)")
  212.                 return
  213.             end
  214.         end
  215.         if ty2 >= 1 then
  216.             local bloco2 = world[ty2][tx]
  217.             if bloco2 == coinIcon then
  218.                 pontuacao = pontuacao + 100
  219.                 world[ty2][tx] = "⬛"
  220.                 gg.toast("Você coletou uma moeda! (+100 pts)")
  221.                 return
  222.             elseif bloco2 == specialBlockIcon then
  223.                 local magia = magicIcons[math.random(#magicIcons)]
  224.                 if itemMagico == magia then
  225.                     magicalShots = magicalShots + 9
  226.                 else
  227.                     itemMagico = magia
  228.                     magicalShots = 9
  229.                 end
  230.                 pontuacao = pontuacao + 500
  231.                 world[ty2][tx] = "✅"
  232.                 gg.toast("Bloco mágico! Você coletou " .. magia .. " com 9 disparos! (+500 pts)")
  233.                 return
  234.             end
  235.         end
  236.     elseif puloTipo == "diagonal2" then
  237.         -- Pulo diagonal: o jogador coleta o item na célula intermediária e aterrissa na célula seguinte.
  238.         -- Exemplo: se o jogador está na célula 1, o coletável está na célula 2 e ele deve cair na célula 3.
  239.         local intX = player.x + 1       -- Célula intermediária (possível coletável)
  240.         local intY = player.y - 1       -- Um nível acima
  241.         local tx = player.x + 2         -- Célula de aterrissagem
  242.         local ty = player.y - 1         -- Mesmo nível que a célula intermediária
  243.        
  244.         -- Verifica se os índices estão válidos
  245.         if tx > worldWidth or ty < 1 or intX > worldWidth or intY < 1 then
  246.             return
  247.         end
  248.         -- Coleta o item na célula intermediária, se houver
  249.         local coletavel = world[intY][intX]
  250.         if coletavel == coinIcon then
  251.             pontuacao = pontuacao + 100
  252.             world[intY][intX] = "⬛"
  253.             gg.toast("Você coletou uma moeda! (+100 pts)")
  254.         elseif coletavel == specialBlockIcon then
  255.             local magia = magicIcons[math.random(#magicIcons)]
  256.             if itemMagico == magia then
  257.                 magicalShots = magicalShots + 9
  258.             else
  259.                 itemMagico = magia
  260.                 magicalShots = 9
  261.             end
  262.             pontuacao = pontuacao + 500
  263.             world[intY][intX] = "✅"
  264.             gg.toast("Bloco mágico! Você coletou " .. magia .. " com 9 disparos! (+500 pts)")
  265.         end
  266.         -- Verifica a célula de aterrissagem
  267.         if world[ty][tx] == holeIcon then
  268.             cairNoBuraco()
  269.             return
  270.         else
  271.             player.x = tx
  272.             player.y = ty
  273.         end
  274.        
  275.         aplicarGravidade()
  276.     end
  277. end
  278. ----------------------------------------------------------------
  279. -- FUNÇÃO: Atacar com o item mágico
  280. ----------------------------------------------------------------
  281. function atacar()
  282.     if itemMagico == "" or magicalShots <= 0 then
  283.         gg.toast("Você não possui um item mágico para disparar!")
  284.         return
  285.     end
  286.     local dx = 1
  287.     local x = player.x + dx
  288.     local y = player.y
  289.     local atingiu = false
  290.     while x <= worldWidth do
  291.         for i, enemy in ipairs(inimigos) do
  292.             if enemy.x == x and enemy.y == y then
  293.                 enemy.vida = enemy.vida - 1
  294.                 if enemy.vida <= 0 then
  295.                     pontuacao = pontuacao + 500
  296.                     table.remove(inimigos, i)
  297.                     gg.toast("Você destruiu um inimigo com seu ataque mágico! (+500 pts)")
  298.                 else
  299.                     gg.toast("Você atingiu um inimigo! (-1 de vida)")
  300.                 end
  301.                 atingiu = true
  302.                 break
  303.             end
  304.         end
  305.         if atingiu then break end
  306.         local celula = world[y][x]
  307.         if celula == coinIcon then
  308.             world[y][x] = "⬛"  --
  309.             pontuacao = pontuacao + 100
  310.             gg.toast("Seu ataque mágico coletou uma moeda! (+100 pts)")
  311.             atingiu = true
  312.             break
  313.         elseif celula == specialBlockIcon then
  314.             local magia = magicIcons[math.random(#magicIcons)]
  315.             if itemMagico == magia then
  316.                 magicalShots = magicalShots + 9
  317.             else
  318.                 itemMagico = magia
  319.                 magicalShots = 9
  320.             end
  321.             pontuacao = pontuacao + 500
  322.             world[y][x] = "✅"
  323.             gg.toast("Seu ataque mágico destruiu um bloco mágico e coletou " .. magia .. " (+500 pts)! Disparos: " .. magicalShots, "")
  324.             atingiu = true
  325.             break
  326.         end
  327.         x = x + dx
  328.     end
  329.     if not atingiu then
  330.         gg.alert("Seu ataque mágico não atingiu nada.", "OK")
  331.     end
  332.     magicalShots = magicalShots - 1
  333.     if magicalShots <= 0 then
  334.         itemMagico = ""
  335.     end
  336. end
  337. ----------------------------------------------------------------
  338. -- FUNÇÃO: Mover o jogador com verificação de colisão com coletáveis e buracos
  339. ----------------------------------------------------------------
  340. function moverJogador(direcao)
  341.     if direcao == "direita" then
  342.         if player.x < worldWidth then
  343.             local novoX = player.x + 1
  344.             local celulaDestino = world[player.y][novoX]
  345.             if celulaDestino == holeIcon then
  346.                 cairNoBuraco()
  347.                 return
  348.             elseif celulaDestino == coinIcon or celulaDestino == specialBlockIcon then
  349.                 -- Impede movimento horizontal; o jogador deve pular para coletar
  350.                 return
  351.             else
  352.                 player.x = novoX
  353.             end
  354.         end
  355.     elseif direcao == "esquerda" then
  356.         if player.x > 1 then
  357.             local novoX = player.x - 1
  358.             local celulaDestino = world[player.y][novoX]
  359.             if celulaDestino == holeIcon then
  360.                 cairNoBuraco()
  361.                 return
  362.             elseif celulaDestino == coinIcon or celulaDestino == specialBlockIcon then
  363.                 return
  364.             else
  365.                 player.x = novoX
  366.             end
  367.         end
  368.     end
  369. end
  370. ----------------------------------------------------------------
  371. -- FUNÇÃO: Mover os inimigos (movimento horizontal simples)
  372. ----------------------------------------------------------------
  373. function moverInimigos()
  374.     for _, enemy in ipairs(inimigos) do
  375.         if math.random() < 0.5 then
  376.             local dir = math.random(1, 2) == 1 and -1 or 1
  377.             local novoX = enemy.x + dir
  378.             if novoX >= 1 and novoX <= worldWidth then
  379.                 enemy.x = novoX
  380.             end
  381.         end
  382.     end
  383. end
  384. ----------------------------------------------------------------
  385. -- FUNÇÃO: Verificar colisões (jogador com inimigos e buracos)
  386. ----------------------------------------------------------------
  387. function checarColisoes()
  388.     for _, enemy in ipairs(inimigos) do
  389.         if player.x == enemy.x and player.y == enemy.y then
  390.             return true
  391.         end
  392.     end
  393.     if world[player.y][player.x] == holeIcon then
  394.         return true
  395.     end
  396.     return false
  397. end
  398. ----------------------------------------------------------------
  399. -- FUNÇÃO: Menu de Ações (controles integrados)
  400. ----------------------------------------------------------------
  401. function menuAcoes()
  402.     local opcoes = {
  403.         string.rep(" ", 30).."➡️ Direita",
  404.         string.rep(" ", 10).."⬅️ Esquerda",
  405.         string.rep(" ", 60).."🧍‍♂️ Pular",
  406.         string.rep(" ", 60).."🤸‍♂️ Saltar",
  407.         string.rep(" ", 60).."💥 Atacar",
  408.         "❌ Desistir!😪"
  409.     }
  410.     local textoTela = desenharMundo() .. "\nℹ️Missão: Colete moedas use poderes contra inimigos evite os buracos no chão e chegue a Bandeira🚩"
  411.     local escolha = gg.choice(opcoes, nil, textoTela)
  412.     return escolha
  413. end
  414. ----------------------------------------------------------------
  415. -- FUNÇÃO: Gerar novo cenário ao avançar de nível com escadinha
  416. ----------------------------------------------------------------
  417. function avancarNivel()
  418.     local opcao = gg.alert("🚩 Bandeira Conquistada! \nVocê avançou para o próximo nível com mais desafios!", "OK")
  419.     if opcao == 1 then
  420.         nivel = nivel + 1
  421.         gerarMundo(nivel)
  422.         player.x = 1
  423.         player.y = altura - 1
  424.     end
  425. end
  426. ----------------------------------------------------------------
  427. -- FUNÇÃO: Menu Principal do Jogo
  428. ----------------------------------------------------------------
  429. function iniciarJogo()
  430.     gerarMundo(nivel)
  431.     while not gameOver do
  432.         local escolha = menuAcoes()
  433.         if not escolha then break end
  434.         if escolha == 1 then
  435.             moverJogador("direita")
  436.         elseif escolha == 2 then
  437.             moverJogador("esquerda")
  438.         elseif escolha == 3 then
  439.             atualizarMundoPulo("reto")
  440.         elseif escolha == 4 then
  441.             atualizarMundoPulo("diagonal2")
  442.         elseif escolha == 5 then
  443.             atacar()
  444.         elseif escolha == 6 then
  445.             gg.alert("Você desistiu do jogo!", "OK")
  446.             os.exit()
  447.         end
  448.         moverInimigos()
  449.         aplicarGravidade()
  450.        
  451.         if checarColisoes() then
  452.             vidas = vidas - 1
  453.             if vidas <= 0 then
  454.                 gg.alert("💥 Você colidiu e perdeu sua última vida! Game Over!", "OK")
  455.                 os.exit()
  456.             else
  457.                 gg.alert("💥 Você foi atingido! Vidas restantes: " .. vidas, "OK")
  458.                 player.x = 1
  459.                 player.y = altura - 1
  460.             end
  461.         end
  462.         if player.x >= worldWidth then
  463.             avancarNivel()
  464.         end
  465.         gg.sleep(100)
  466.     end
  467. end
  468. ----------------------------------------------------------------
  469. -- INICIA O JOGO
  470. ----------------------------------------------------------------
  471. iniciarJogo()
  472.  
  473.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement