Advertisement
PeKlim

zelva s navratem

Jul 2nd, 2015
260
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 10.19 KB | None | 0 0
  1. local dlimit = 5
  2. local px, py = 0, 0
  3. local smer = 0
  4. local patro, startpatro, navx, navy, navpatro, navsmer, plno
  5. local nebrat = {"minecraft:stone", "minecraft:dirt", "minecraft:gravel", "minecraft:sand", "minecraft:cobblestone", "minecraft:sandstone", "minecraft:bedrock"}
  6.  
  7. function resetScreen()
  8.    term.clear()
  9.    term.setCursorPos(1,1)
  10. end
  11.  
  12. function otoc(okolik)
  13.    smer = smer + okolik
  14.    if smer > 3 then
  15.       smer = smer - 4
  16.    end
  17.    if smer < 0 then
  18.       smer = smer + 4
  19.    end
  20. end
  21.  
  22. function kopejKolem()
  23.    local tezit = true
  24.    local success, data = turtle.inspectUp()
  25.    local hore = data.name
  26.    for ki=1, #nebrat, 1 do
  27.       if nebrat[ki] == hore then
  28.          tezit=false
  29.          break
  30.       end
  31.    end
  32.    if tezit then
  33.       turtle.digUp()
  34.       aaa()
  35.    end
  36.  
  37.    tezit = true
  38.    local success, data = turtle.inspectDown()
  39.    local dole = data.name
  40.  
  41.    for ki=1, #nebrat, 1 do
  42.       if nebrat[ki] == dole then
  43.          tezit=false
  44.          break
  45.       end
  46.    end
  47.    if tezit then
  48.       turtle.digDown()
  49.       aaa()
  50.    end
  51. end
  52.  
  53. function urobmisto(posice)
  54.    turtle.select(posice)
  55.    for hledam = posice-1, 1, -1 do
  56.       if turtle.compareTo(hledam) or turtle.getItemCount(hledam) == 0 then
  57.          turtle.transferTo(hledam)
  58.          if turtle.getItemCount() == 0 then
  59.             return true
  60.          end
  61.       end
  62.    end
  63.    return false
  64. end
  65.  
  66. function jemisto2()
  67.    if turtle.getItemCount(16) > 0 then
  68.    if plno then
  69.       turtle.select(16)
  70.  
  71. -- pokud je 16 bordel, vyhod to
  72.  
  73.       local data = turtle.getItemDetail()
  74.       for ki=1, #nebrat, 1 do
  75.          if nebrat[ki] == data.name then
  76.             turtle.drop()
  77.             turtle.select(1)
  78.             return(0)
  79.          end
  80.       end
  81.  
  82. -- nejde vyhodit? Zkus ho pridat na jiny stack
  83.  
  84.       for i = 1, 15, 1 do
  85.          if turtle.compareTo(i) then
  86.             turtle.transferTo(i)
  87.             if turtle.getItemCount() == 0 then
  88.                turtle.select(1)
  89.                return(0)
  90.             end
  91.          end
  92.       end
  93.  
  94.       turtle.select(1)
  95.       return(turtle.getItemCount(16))
  96.  
  97.    else
  98.  
  99. -- Vyhazej vsechen bordel
  100.  
  101.       for i=1, 16, 1 do
  102.          local data = turtle.getItemDetail(i)
  103.          if data then
  104.             for ki=1, #nebrat, 1 do
  105.                if nebrat[ki] == data.name then
  106.                   turtle.select(i)
  107.                   turtle.drop()
  108.                   break
  109.                end
  110.             end
  111.          end
  112.       end
  113.  
  114.       defrag()
  115.       local citac = 1
  116.       while citac < 16 and turtle.getItemCount(citac) > 0 do
  117.          if turtle.getItemSpace(citac) > 0 then
  118.             for i=citac+1, 16, 1 do
  119.                turtle.select(i)
  120.                if turtle.compareTo(citac) then
  121.                   turtle.transferTo(citac)
  122.                   if turtle.getItemSpace(citac) == 0 then
  123.                      break
  124.                   end
  125.                end
  126.             end
  127.          end
  128.          citac=citac+1
  129.       end
  130.       if defrag() == 15 then
  131.          plno = true
  132.          print("PLNO!")
  133.       end
  134.    end
  135.    else
  136.       turtle.select(1)
  137.       return(0)
  138.    end
  139.    turtle.select(1)
  140.    return(turtle.getItemCount(16))
  141. end
  142.  
  143. function defrag()
  144.    local nenasel
  145.    local pplny = 0
  146.    for i=1, 15, 1 do
  147.       if turtle.getItemCount(i) == 0 then
  148.          nenasel = true
  149.          for j=i+1, 16, 1 do
  150.             if turtle.getItemCount(j) > 0 then
  151.                turtle.select(j)
  152.                turtle.transferTo(i)
  153.                pplny = i
  154.                nenasel = false
  155.                break
  156.             end
  157.          end
  158.          if nenasel then return(pplny) end
  159.       else
  160.          pplny = i
  161.       end
  162.    end
  163.    return(pplny)
  164. end
  165.  
  166. function jemisto()
  167.    local dira, slt
  168.    if turtle.getItemCount(16) > 0 then
  169.       vyhod()
  170.       if turtle.getItemCount(16) == 0 then
  171.          return(0)
  172.       end
  173.       repeat
  174.          dira = true
  175.          if not urobmisto(16) then
  176.             for slt=15, 2, -1 do
  177.                if urobmisto(slt) then
  178.                   dira = false
  179.                   break
  180.                end
  181.             end
  182.          end
  183.       until dira
  184.    end
  185.    return turtle.getItemCount(16)
  186. end
  187.  
  188. function vratit()
  189.    for i = px, 1, -1 do
  190.       krok(-1, 0, false)
  191.    end
  192.    turtle.turnLeft()
  193.    otoc(-1)
  194.    for i = py, 1, -1 do
  195.       krok(0, -1, false)
  196.    end
  197.    turtle.turnRight()
  198.    otoc(1)
  199.    turtle.turnRight()
  200.    otoc(1)
  201.    repeat
  202.       krokUp()
  203.       patro = patro+1
  204.    until patro >= startpatro
  205.    turtle.turnRight()
  206.    otoc(1)
  207.    for i=1, 16, 1 do
  208.       turtle.select(i)
  209.       turtle.drop()
  210.    end
  211.    plno = false
  212.    turtle.turnLeft()
  213.    otoc(-1)
  214.    print("Stav paliva: " .. turtle.getFuelLevel() .. "/" .. turtle.getFuelLimit())
  215.    chybi = turtle.getFuelLimit() - turtle.getFuelLevel()
  216.    print("Je mozno nacerpat " .. chybi .. " jednotek paliva.")
  217.    uhli = math.floor(chybi/80)
  218.    print("Naberu " .. uhli .. " uhli.")
  219.    turtle.turnLeft()
  220.    otoc(-1)
  221.    turtle.select(16)
  222.    while uhli > 64 do
  223.       turtle.suck(64)
  224.       uhli = uhli - 64
  225.       turtle.refuel()
  226.    end
  227.    turtle.suck(uhli)
  228.    turtle.refuel()
  229.    print("Stav paliva: " .. turtle.getFuelLevel() .. "/" .. turtle.getFuelLimit())
  230.    turtle.turnRight()
  231.    otoc(1)
  232.    turtle.select(1)
  233.    while patro > navpatro do
  234.       while turtle.detectDown() do
  235.          turtle.digDown()
  236.       end
  237.       turtle.down()
  238.       patro = patro-1
  239.    end
  240.    print("Stojim na: " .. px .. ", " .. py)
  241.    print("Vracim se na: " .. navx .. ", " .. navy)
  242.    for i=py, navy-1, 1 do
  243.       krok(0, 1, false)
  244.    end
  245.    turtle.turnRight()
  246.    otoc(1)
  247.    for i=px, navx-1, 1 do
  248.       krok(1, 0, false)
  249.    end
  250.    if navsmer == 2 then
  251.       turtle.turnRight()
  252.       otoc(1)
  253.    end
  254.    if navsmer == 3 then
  255.       turtle.turnRight()
  256.       otoc(1)
  257.       turtle.turnRight()
  258.       otoc(1)
  259.    end
  260.    if navsmer == 0 then
  261.       turtle.turnLeft()
  262.       otoc(-1)
  263.    end
  264.    turtle.select(1)
  265. end
  266.  
  267. function aaa()
  268.    if jemisto2() > 0 then
  269.       print("Vracim se...")
  270.       print("SMER: " .. smer)
  271.       navx = px
  272.       navy = py
  273.       navpatro = patro
  274.       navsmer = smer
  275.       if smer == 0 then
  276.          print("SMER: testovany - 0")
  277.          turtle.turnLeft()
  278.          otoc(-1)
  279.          vratit()
  280.       elseif smer == 2 then
  281.          print("SMER: testovany - 2")
  282.          turtle.turnRight()
  283.          otoc(1)
  284.          vratit()
  285.       elseif smer == 3 then
  286.          print("SMER: testovany - 3")
  287.          turtle.turnRight()
  288.          otoc(1)
  289.          turtle.turnRight()
  290.          otoc(1)
  291.          vratit()
  292.       else
  293.          print("SMER: testovany - 1")
  294.          vratit()
  295.       end
  296.    end
  297. end
  298.  
  299. function krok(dx, dy, tst)
  300.    while turtle.detect() do
  301.       turtle.dig()
  302.       if tst then aaa() end
  303.    end
  304.    while not turtle.forward() do
  305.       print("NEPODARIL SE KROK")
  306.       sleep(0.3)
  307.    end
  308.    px = px+dx
  309.    py = py+dy
  310.    if tst then kopejKolem() end
  311. end
  312.  
  313. function kopejrovne(delka, dx, dy, tst)
  314.    for i=1, delka, 1 do
  315.       krok(dx, dy, tst)
  316.    end
  317. end
  318.  
  319. function vyhod()
  320.    turtle.select(16)
  321.    local data = turtle.getItemDetail()
  322.    for ki=1, #nebrat, 1 do
  323.       if nebrat[ki] == data.name then
  324.          turtle.drop()
  325.          return
  326.       end
  327.    end
  328.  
  329.    for dolni=1, 15, 1 do  
  330.       coje = turtle.getItemDetail(dolni)
  331.       if coje then
  332.          for horni=1, #nebrat, 1 do
  333.             if coje.name == nebrat[horni] then
  334.                turtle.select(dolni)
  335.                turtle.drop()
  336.                break
  337.             end
  338.          end
  339.       end
  340.    end
  341.    turtle.select(1)
  342. end
  343.  
  344. function zatocvpravo()
  345.    turtle.turnRight()
  346.    otoc(1)
  347.    krok(1, 0, true)
  348.    turtle.turnRight()
  349.    otoc(1)
  350. end
  351.  
  352. function zatocvlevo()
  353.    turtle.turnLeft()
  354.    otoc(-1)
  355.    krok(1, 0, true)
  356.    turtle.turnLeft()
  357.    otoc(-1)
  358. end
  359.  
  360. function krokUp()
  361.    while turtle.detectUp() do
  362.       turtle.digUp()
  363.    end
  364.    turtle.up()
  365. end
  366.  
  367. --- ZACINAME ---
  368.  
  369. resetScreen()
  370. print("Stav paliva: " .. turtle.getFuelLevel() .. "/" .. turtle.getFuelLimit())
  371.  
  372. write("Startovni Y souradnice zelvy: ")
  373. startpatro = tonumber(read())
  374. write("Velikost hrany dolu: ")
  375. local hrana = tonumber(read())
  376.  
  377. local nst = ((startpatro-dlimit)*2 + hrana*2)
  378. print("Nejkratsi smysluplna trasa - dolu a chodba a zpet = " .. nst .. " bloku")
  379. print("Budu potrebovat nejmene " .. nst .. " jednotek paliva = " .. math.ceil(nst/80) .. " uhli.")
  380. print("Celkovou spotrebu odhaduji na: " .. math.ceil( ((startpatro-dlimit)*2) + (((startpatro-dlimit)/3) * (hrana*hrana)) ) .. " jednotek paliva = " .. math.ceil( (((startpatro-dlimit)*2) + (((startpatro-dlimit)/3) * (hrana*hrana)) )/80) .. " uhli" )
  381. print("Stav paliva: " .. turtle.getFuelLevel() .. "/" .. turtle.getFuelLimit())
  382. read()
  383.  
  384. turtle.select(16)
  385. turtle.refuel()
  386.  
  387. patro = startpatro
  388. turtle.select(1)
  389.  
  390. local soubor = io.open("dibag.txt", "w")
  391. plno = false
  392.  
  393. -- Sjede dolu
  394.  
  395. while patro > dlimit do
  396.    while turtle.detectDown() do
  397.       turtle.digDown()
  398.    end
  399.    turtle.down()
  400.    patro = patro-1
  401. end
  402.  
  403. print("Dole: " .. px .. ", " .. py .. ", " .. patro)
  404. soubor:write("Dole: " .. px .. ", " .. py .. ", " .. patro .. "\n")
  405. while patro < startpatro do
  406.  
  407. -- Kopej plochu
  408.  
  409. local jkoncove
  410. local smery = 1
  411. for j=1, hrana, 1 do
  412.    kopejrovne(hrana-1, 0, smery, true)
  413.    soubor:write("rada " .. j .. " - " .. px .. ", " .. py .. ", " .. patro .. "\n")
  414.    if j < hrana then
  415.       if j%2 > 0 then
  416.          zatocvpravo()
  417.      smery = -1
  418.       else
  419.          zatocvlevo()
  420.          smery = 1
  421.       end
  422.    end
  423.    jkoncove = j
  424. end
  425. --print("Konec patra: " .. px .. ", " .. py .. ", " .. patro)
  426.  
  427. -- Na konci plochy
  428.  
  429. if jkoncove%2 > 0 then
  430.    turtle.turnLeft()
  431.    otoc(-1)
  432.    turtle.turnLeft()
  433.    otoc(-1)
  434.    kopejrovne(hrana-1, 0, -1, false)
  435. end
  436. turtle.turnRight()
  437. otoc(1)
  438. kopejrovne(hrana-1, -1, 0, false)
  439.  
  440. turtle.turnRight()
  441. otoc(1)
  442. if px == 0 and py == 0 then
  443.    print("Pujdu vyse: " .. px .. ", " .. py .. ", " .. patro)
  444. else
  445.    print("ERROR: Mám být 0, 0 a jsem: " .. px .. ", " .. py)
  446.    read()
  447. end
  448.  
  449. -- Vystoupej nahoru
  450.  
  451. krokUp()
  452. patro = patro+1
  453. if patro < startpatro then
  454.    krokUp()
  455.    patro = patro+1
  456. end
  457. if patro < startpatro then
  458.    krokUp()
  459.    patro = patro+1
  460. end
  461. end
  462. soubor:close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement