Advertisement
Guest User

Untitled

a guest
Jul 25th, 2014
228
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- Information sur le programme "Quarry"
  2. -- Codeur : DeusXIII
  3. -- Version : beta R3
  4. -- Dernière modification : 27/12/12
  5.  
  6.  
  7. -- Initialisation des variables
  8. carburant = 1 -- Slot du fuel dans l'inventaire de la turtle
  9. x = 1 -- Variable de suivi des lignes (1er bloc)
  10. y = 1 -- Variable de suivi des colonnes (1ere colonne)
  11. z = 1 -- Variable de suivi de la hauteur (1ere hauteur)
  12. impair = true -- Permet de savoir si la turtle doit tourner à gauche ou à droite en fin de ligne
  13. --Fin d'initialisation des variables
  14.  
  15.  
  16. -- Déclaration des fonctions du programme
  17. function verifFuel() -- Fonction de vérification du niveau de carburant et réapprovisionnement si besoin
  18.     turtle.select(carburant)
  19.     while turtle.getFuelLevel() < 200 do -- 200 est une valeur de sécurité estimée, elle peut être modifiée si besoin
  20.         if not turtle.refuel(1) then
  21.             return false
  22.         end
  23.     end
  24.     turtle.select(2)
  25.     return true
  26. end
  27.  
  28. function supprLigne(...) -- Fonction de suppression de lignes inutiles à l'écran
  29.     if arg.n == 0 then
  30.         return 0
  31.     end
  32.    
  33.     for i=1,arg.n do
  34.         term.setCursorPos(1,arg[i])
  35.         term.clearLine()
  36.     end
  37. end
  38.  
  39. function verifStock() -- Vérification de l'état de l'inventaire de la turtle (si le slot 15 a au moins 1 item la fonction retourne vrai)
  40.     if turtle.getItemCount(15) > 0 then
  41.         return true
  42.     else
  43.         return false
  44.     end
  45. end
  46.  
  47. function move(direction) -- Fonction sécurisée de déplacement (devant, haut et bas)
  48.     while true do
  49.         if direction == "forward" then
  50.             if turtle.detect() then
  51.                 turtle.dig()
  52.             else
  53.                 if turtle.forward() then
  54.                     return true
  55.                 else
  56.                     turtle.attack()
  57.                 end
  58.             end
  59.         elseif direction == "up" then
  60.             if turtle.digUp() then
  61.                 os.sleep(0.4)
  62.             else
  63.                 if turtle.up() then
  64.                     return true
  65.                 else
  66.                     turtle.attackUp()
  67.                 end
  68.             end
  69.         elseif direction == "down" then
  70.             if turtle.detectDown() then
  71.                 turtle.digDown()
  72.             else
  73.                 if turtle.down() then
  74.                     return true
  75.                 else
  76.                     turtle.attackDown()
  77.                 end
  78.             end
  79.         end
  80.     end
  81. end
  82.            
  83. function vidageInventaire(x,y,z,impair) -- Fonction de remontée de la turtle, de vidage de l'inventaire, puis de redescente
  84.    
  85.     -- Remontée de la turtle jusqu'au coffre
  86.     for i=z-1,1,-1 do
  87.         move("up")
  88.     end
  89.    
  90.     if impair then
  91.         turtle.turnLeft()
  92.     else
  93.         turtle.turnRight()
  94.     end
  95.    
  96.     for i=y-1,1,-1 do
  97.         move("forward")
  98.     end
  99.    
  100.     turtle.turnLeft()
  101.    
  102.     if impair then
  103.         for i=x-1,1,-1 do
  104.             move("forward")
  105.         end
  106.     else
  107.         for i=x,taille_quarry-1,1 do
  108.             move("forward")
  109.         end
  110.     end
  111.     -- Fin de la remontée
  112.    
  113.     -- Dêpot de l'inventaire dans le coffre
  114.     for i=2,16,1 do
  115.         if turtle.getItemCount(i) > 0 then
  116.             turtle.select(i)
  117.             turtle.drop(64)
  118.         end
  119.     end
  120.     turtle.turnRight()
  121.     turtle.select(1)
  122.     turlte.suck()
  123.    
  124.     turtle.select(2) -- Repositionnement sur le 1er slot de minage (slot 2)
  125.     --Fin du dépot
  126.    
  127.     -- Redescente de la turtle à la position initiale
  128.     turtle.turnLeft()
  129.     for i=1,y-1 do
  130.         move("forward")
  131.     end
  132.     turtle.turnLeft()
  133.     if impair then
  134.         for i=1,x-1 do
  135.             move("forward")
  136.         end
  137.     else
  138.         for i=taille_quarry-1,x,-1 do
  139.             move("forward")
  140.         end
  141.         turtle.turnLeft()
  142.         turtle.turnLeft()
  143.     end
  144.     for i=1,z-1 do
  145.         move("down")
  146.     end
  147.     -- Fin de la redescente
  148.    
  149. end
  150. -- Fin des fonctions
  151.  
  152.  
  153. -- Début du programme
  154. term.clear()
  155. term.setCursorPos(1,1)
  156. print("Programme de quarry/turtle automatique")
  157.  
  158. while true do -- Boucle de vérification de la présence de carburant dans le slot 1 de la turtle
  159.     supprLigne(3,4,5)
  160.     term.setCursorPos(1,3)
  161.     write("Mettez du carburant dans le slot 1 de la turtle...")
  162.     io.read()
  163.    
  164.     if turtle.getItemCount(carburant) > 0 then
  165.         break
  166.     else
  167.         term.setCursorPos(1,5)
  168.         write("Aucun item dans le slot 1")
  169.         io.read()
  170.     end
  171. end
  172.  
  173. while true do -- Boucle de saisie de la taille de la quarry
  174.     supprLigne(3,4)
  175.     term.setCursorPos(1,3)
  176.     write("Largeur de la quarry : ")
  177.     taille_quarry = io.read()
  178.     taille_quarry = tonumber(taille_quarry)
  179.  
  180.     if taille_quarry == nil then
  181.         term.setCursorPos(1,5)
  182.         print("Erreur de saisie")
  183.         io.read()
  184.         supprLigne(5)
  185.     else
  186.         break
  187.     end
  188. end
  189.  
  190. while true do -- Postionnement du coffre à carburant pour le réapprovisionnement (pas implanté actuellement)
  191.     supprLigne(3,4,5,6)
  192.     term.setCursorPos(1,3)
  193.     print("Placez 1 coffre à ma gauche avec du carburant...")
  194.     io.read()
  195.     turtle.turnLeft()
  196.     if turtle.detect() then
  197.         turtle.turnRight()
  198.         term.setCursorPos(1,6)
  199.         write("N'oubliez pas de remplir ce coffre de carburant")
  200.         io.read()
  201.         break
  202.     else
  203.         turtle.turnRight()
  204.         term.setCursorPos(1,6)
  205.         write("Aucun coffre detecté")
  206.         io.read()
  207.     end
  208. end
  209.  
  210. while true do -- Positionnement du coffre de récupération des blocs minés
  211.     supprLigne(3,4,5,6,7)
  212.     term.setCursorPos(1,3)
  213.     print("Placez 1 coffre derrière moi pour les bloc minés...")
  214.     io.read()
  215.     turtle.turnLeft()
  216.     turtle.turnLeft()
  217.     if turtle.detect() then
  218.         turtle.turnRight()
  219.         turtle.turnRight()
  220.         break
  221.     else
  222.         turtle.turnRight()
  223.         turtle.turnRight()
  224.         term.setCursorPos(1,6)
  225.         write("Aucun coffre detecté")
  226.         io.read()
  227.     end
  228. end
  229.  
  230. while true do -- Confirmation du lancement du minage
  231.     supprLigne(3,4,5)
  232.     term.setCursorPos(1,3)
  233.     print("Récapitulatif :")
  234.     print("1 - Coffre à charbon OK")
  235.     print("2 - Coffre à blocs minés OK")
  236.     print("Quarry de : "..taille_quarry.." x "..taille_quarry)
  237.     write('Appuyez sur "Y" pour confirmer ou "N" pour annuler')
  238.     event, param1 = os.pullEvent("char")
  239.     if param1 == "y" then
  240.         break
  241.     elseif param1 == "n" then
  242.         os.reboot()
  243.     end
  244. end
  245.  
  246. while true do  -- Boucle principale du programme
  247.     if not verifFuel() then
  248.         print("Arrêt du programme...")
  249.         io.read()
  250.         break -- Si la turtle n'a plus de craburant,le programme s'arrête (fonction de réapprovisionnement à venir)
  251.     end
  252.    
  253.     supprLigne(3,4,5,6,7,8)
  254.     term.setCursorPos(1,3)
  255.     -- Indication temps réel du positionnement de la turtle par rapport à la position de départ
  256.     print("Position de la turtle :")
  257.     print("Bloc : "..x)
  258.     print("Rangée : "..y)
  259.     print("Couche : "..z)
  260.    
  261.     while turtle.digUp() do
  262.         os.sleep(0.4)
  263.     end
  264.  
  265.     if turtle.detectDown() then
  266.         turtle.digDown()
  267.     end
  268.    
  269.     if verifStock() then
  270.         vidageInventaire(x,y,z,impair)
  271.     end
  272.    
  273.     if x == taille_quarry then
  274.    
  275.         if y == taille_quarry then
  276.        
  277.             if impair then
  278.                 turtle.turnLeft()
  279.                 for i=1,taille_quarry-1 do
  280.                     move("forward")
  281.                 end
  282.                 turtle.turnLeft()
  283.                 for i=1,taille_quarry-1 do
  284.                     move("forward")
  285.                 end
  286.                 turtle.turnLeft()
  287.                 turtle.turnLeft()
  288.             else
  289.                 turtle.turnRight()
  290.                 for i=1,taille_quarry-1 do
  291.                     move("forward")
  292.                 end
  293.                 turtle.turnRight()
  294.             end
  295.             for i =1,3 do  -- Descente de 3 blocs
  296.                 move("down")
  297.                 z = z + 1
  298.             end
  299.             x = 1
  300.             y = 1
  301.             impair = true
  302.            
  303.         else
  304.        
  305.             if impair then
  306.                 turtle.turnRight()
  307.                 move("forward")
  308.                 turtle.turnRight()
  309.                 impair = false
  310.             elseif not impair then
  311.                 turtle.turnLeft()
  312.                 move("forward")
  313.                 turtle.turnLeft()
  314.                 impair = true
  315.             end
  316.             x = 1
  317.             y = y + 1
  318.         end
  319.     else
  320.         move("forward")
  321.         x = x + 1
  322.     end
  323. end
  324.  
  325. -- Fin du programme
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement