Advertisement
vacnoa

minar

Apr 28th, 2025 (edited)
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 8.18 KB | Gaming | 0 0
  1. -- Programa de minería para Turtle de ComputerCraft
  2. -- Autor: ChatGPT + Vacnoa
  3. -- Funciones mejoradas de entrada, inventario y recuperación
  4.  
  5. -- Variables de posición
  6. local posX = 0
  7. local posY = 0
  8. local posZ = 0
  9. local dir = 0 -- 0 adelante, 1 derecha, 2 atrás, 3 izquierda
  10. local input = read()
  11.  
  12. local giro = ""
  13. local direccionAltura = ""
  14.  
  15. -- Función para pedir giro (derecha/izquierda)
  16. local function pedirGiro()
  17.     while true do
  18.         print("¿Girar a la derecha o izquierda al final de cada fila? (derecha/izquierda)")
  19.         local entrada = string.lower(read())
  20.         if entrada == "derecha" or entrada == "izquierda" then
  21.             return entrada
  22.         else
  23.             print("Por favor escribe 'derecha' o 'izquierda'.")
  24.         end
  25.     end
  26. end
  27.  
  28. -- Función para pedir dirección de altura (arriba/abajo)
  29. local function pedirDireccionAltura()
  30.     while true do
  31.         print("¿Minar hacia arriba o hacia abajo? (arriba/abajo)")
  32.         local entrada = string.lower(read())
  33.         if entrada == "arriba" or entrada == "abajo" then
  34.             return entrada
  35.         else
  36.             print("Por favor escribe 'arriba' o 'abajo'.")
  37.         end
  38.     end
  39. end
  40.  
  41. -- Función para avanzar y actualizar coordenadas
  42. local function avanzar()
  43.     while not turtle.forward() do
  44.         turtle.dig()
  45.         sleep(0.5)
  46.     end
  47.     if dir == 0 then posX = posX + 1
  48.     elseif dir == 1 then posZ = posZ + 1
  49.     elseif dir == 2 then posX = posX - 1
  50.     elseif dir == 3 then posZ = posZ - 1
  51.     end
  52. end
  53.  
  54. -- Funciones de movimiento vertical
  55. local function moverAltura()
  56.     if direccionAltura == "abajo" then
  57.         while not turtle.down() do
  58.             turtle.digDown()
  59.             sleep(0.5)
  60.         end
  61.         posY = posY - 1
  62.     else
  63.         while not turtle.up() do
  64.             turtle.digUp()
  65.             sleep(0.5)
  66.         end
  67.         posY = posY + 1
  68.     end
  69. end
  70.  
  71. -- Funciones de giro
  72. local function girarDerecha()
  73.     turtle.turnRight()
  74.     dir = (dir + 1) % 4
  75. end
  76.  
  77. local function girarIzquierda()
  78.     turtle.turnLeft()
  79.     dir = (dir + 3) % 4
  80. end
  81.  
  82. local function girar(direccion)
  83.     if giro == "derecha" then
  84.         if direccion == "inicial" then
  85.             girarDerecha()
  86.         elseif direccion == "final" then
  87.             girarDerecha()
  88.         end
  89.     else
  90.         if direccion == "inicial" then
  91.             girarIzquierda()
  92.         elseif direccion == "final" then
  93.             girarIzquierda()
  94.         end
  95.     end
  96. end
  97.  
  98. -- Verificar si el inventario está lleno
  99. local function inventarioLleno()
  100.     for i = 1, 16 do
  101.         if turtle.getItemCount(i) == 0 then
  102.             return false
  103.         end
  104.     end
  105.     return true
  106. end
  107.  
  108. -- Vaciar inventario en cofre o al suelo
  109. local function vaciarInventario()
  110.     print("Vaciando inventario en cofre o al suelo...")
  111.     for i = 1, 16 do
  112.         turtle.select(i)
  113.         if not turtle.dropDown() then
  114.             turtle.turnLeft()
  115.             turtle.turnLeft()
  116.             turtle.drop()
  117.             turtle.turnLeft()
  118.             turtle.turnLeft()
  119.         end
  120.     end
  121.     turtle.select(1)
  122. end
  123.  
  124. -- Función para ir al origen
  125. local function irAlOrigen()
  126.     -- Ajustar altura
  127.     while posY > 0 do
  128.         while not turtle.down() do
  129.             turtle.digDown()
  130.             sleep(0.5)
  131.         end
  132.         posY = posY - 1
  133.     end
  134.     while posY < 0 do
  135.         while not turtle.up() do
  136.             turtle.digUp()
  137.             sleep(0.5)
  138.         end
  139.         posY = posY + 1
  140.     end
  141.  
  142.     -- Ajustar X
  143.     if posX > 0 then
  144.         while dir ~= 2 do girarDerecha() end
  145.         for i = 1, posX do avanzar() end
  146.     elseif posX < 0 then
  147.         while dir ~= 0 do girarDerecha() end
  148.         for i = 1, -posX do avanzar() end
  149.     end
  150.  
  151.     -- Ajustar Z
  152.     if posZ > 0 then
  153.         while dir ~= 3 do girarDerecha() end
  154.         for i = 1, posZ do avanzar() end
  155.     elseif posZ < 0 then
  156.         while dir ~= 1 do girarDerecha() end
  157.         for i = 1, -posZ do avanzar() end
  158.     end
  159. end
  160.  
  161. -- Función para volver a una posición guardada
  162. local function volverAPosicion(destX, destY, destZ, destDir)
  163.     -- Ajustar Z
  164.     local dz = destZ - posZ
  165.     if dz > 0 then
  166.         while dir ~= 1 do girarDerecha() end
  167.         for i = 1, dz do avanzar() end
  168.     elseif dz < 0 then
  169.         while dir ~= 3 do girarDerecha() end
  170.         for i = 1, -dz do avanzar() end
  171.     end
  172.  
  173.     -- Ajustar X
  174.     local dx = destX - posX
  175.     if dx > 0 then
  176.         while dir ~= 0 do girarDerecha() end
  177.         for i = 1, dx do avanzar() end
  178.     elseif dx < 0 then
  179.         while dir ~= 2 do girarDerecha() end
  180.         for i = 1, -dx do avanzar() end
  181.     end
  182.  
  183.     -- Ajustar Y
  184.     local dy = destY - posY
  185.     if dy > 0 then
  186.         for i = 1, dy do
  187.             while not turtle.up() do
  188.                 turtle.digUp()
  189.                 sleep(0.5)
  190.             end
  191.             posY = posY + 1
  192.         end
  193.     elseif dy < 0 then
  194.         for i = 1, -dy do
  195.             while not turtle.down() do
  196.                 turtle.digDown()
  197.                 sleep(0.5)
  198.             end
  199.             posY = posY - 1
  200.         end
  201.     end
  202.  
  203.     -- Restaurar orientación
  204.     while dir ~= destDir do
  205.         girarDerecha()
  206.     end
  207. end
  208.  
  209. -- Función para minar una capa
  210. local function minarCapa()
  211.     for a = 1, ancho do
  212.         for l = 1, largo - 1 do
  213.             turtle.dig()
  214.             avanzar()
  215.  
  216.             if inventarioLleno() then
  217.                 print("Inventario lleno. Volviendo al origen para descargar...")
  218.                 local saveX, saveY, saveZ, saveDir = posX, posY, posZ, dir
  219.                 irAlOrigen()
  220.                 vaciarInventario()
  221.                 volverAPosicion(saveX, saveY, saveZ, saveDir)
  222.                 print("Regresando a minar...")
  223.             end
  224.         end
  225.         if a < ancho then
  226.             if a % 2 == 1 then
  227.                 girar("inicial")
  228.                 turtle.dig()
  229.                 avanzar()
  230.                 girar("inicial")
  231.             else
  232.                 girar("final")
  233.                 turtle.dig()
  234.                 avanzar()
  235.                 girar("final")
  236.             end
  237.         end
  238.     end
  239. end
  240.  
  241. -- Verificar combustible suficiente
  242. local function verificarCombustible(pasosNecesarios)
  243.     local fuelLevel = turtle.getFuelLevel()
  244.     if fuelLevel == "unlimited" then return true end
  245.     if fuelLevel < pasosNecesarios then
  246.         print("¡Combustible insuficiente!")
  247.         print("Se necesitan al menos " .. pasosNecesarios .. " de combustible.")
  248.         print("Por favor, recarga y presiona Enter...")
  249.         read()
  250.         return verificarCombustible(pasosNecesarios)
  251.     end
  252. end
  253.  
  254. -- ==== Inicio del programa ====
  255.  
  256. -- Solicitar dimensiones y direcciones
  257. print("Introduce el largo:")
  258. local input = read()
  259. local largo = tonumber(input)
  260.  
  261. -- Verifica que sea un número válido
  262. if not largo or largo < 1 then
  263.     print("Por favor, introduce un número válido mayor que 0.")
  264.     return
  265. end
  266. print("Introduce el ancho:")
  267. local input = read()
  268. local ancho = tonumber(input)
  269.  
  270. -- Verifica que sea un número válido
  271. if not ancho or ancho< 1 then
  272.     print("Por favor, introduce un número válido mayor que 0.")
  273.     return
  274. end
  275. print("Introduce el alto:")
  276. local input = read()
  277. local alto = tonumber(input)
  278.  
  279. -- Verifica que sea un número válido
  280. if not alto or alto < 1 then
  281.     print("Por favor, introduce un número válido mayor que 0.")
  282.     return
  283. end
  284.  
  285. -- Verificar que las variables son números válidos
  286. if type(largo) ~= "number" or type(ancho) ~= "number" or type(alto) ~= "number" then
  287.     print("Error: Las dimensiones deben ser números válidos.")
  288.     return
  289. end
  290.  
  291. giro = pedirGiro()
  292. direccionAltura = pedirDireccionAltura()
  293.  
  294. -- Estimar pasos y comprobar combustible
  295. local pasosPorCapa = (largo * ancho) + (ancho - 1)
  296. local pasosTotales = (pasosPorCapa * alto) + (alto - 1)
  297.  
  298. if pasosTotales and type(pasosTotales) == "number" then
  299.     verificarCombustible(pasosTotales * 3)
  300. else
  301.     print("Error con los cálculos de pasos.")
  302.     return
  303. end
  304.  
  305. -- Ejecución de minería
  306.    
  307. for h = 1, alto do
  308.     minarCapa()
  309.     if h < alto then
  310.         moverAltura()
  311.         print("Subiendo/Abajo capa " .. h .. " de " .. alto)
  312.     end
  313. end
  314.  
Tags: miner
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement