SHOW:
|
|
- or go back to the newest paste.
| 1 | os.loadAPI("robot")
| |
| 2 | ||
| 3 | function init() | |
| 4 | term.write('Neue Position? [j/n]')
| |
| 5 | i = read() | |
| 6 | if i == 'j' then | |
| 7 | robot.initGPS() | |
| 8 | elseif i == 'n' then | |
| 9 | robot.load() | |
| 10 | else | |
| 11 | term.clear() | |
| 12 | term.setCursorPos(0, 0) | |
| 13 | init() | |
| 14 | end | |
| 15 | end | |
| 16 | init() | |
| 17 | ||
| 18 | IGNORE_COUNT = 4 | |
| 19 | ||
| 20 | CHUNKS = 1 | |
| 21 | MIN_HEIGHT = 8 | |
| 22 | MAX_HEIGHT = 38 | |
| 23 | Y_STEPS = 3 | |
| 24 | LAYERS = math.floor((MAX_HEIGHT - MIN_HEIGHT) / Y_STEPS) | |
| 25 | ||
| 26 | STEPS_PER_CHUNK = 16 | |
| 27 | ||
| 28 | LENGTH = CHUNKS * STEPS_PER_CHUNK | |
| 29 | STEPS = LENGTH - 1 | |
| 30 | ||
| 31 | X_START = robot.getX() | |
| 32 | Y_START = robot.getY() | |
| 33 | Z_START = robot.getZ() | |
| 34 | DIR_START = robot.getDirection() | |
| 35 | ||
| 36 | current_layer = 0 | |
| 37 | ||
| 38 | moves_per_layer = LENGTH * LENGTH + LENGTH - 2 | |
| 39 | moves_y = (Y_START - (MAX_HEIGHT - MIN_HEIGHT)) * LAYERS * 2 | |
| 40 | moves = moves_per_layer * LAYERS + moves_y | |
| 41 | fuel_level_start = turtle.getFuelLevel() | |
| 42 | ||
| 43 | function checkDown() | |
| 44 | for i = 1, IGNORE_COUNT do | |
| 45 | if robot.compareDownTo(i) then | |
| 46 | return false | |
| 47 | end | |
| 48 | end | |
| 49 | return true | |
| 50 | end | |
| 51 | ||
| 52 | function checkUp() | |
| 53 | for i = 1, IGNORE_COUNT do | |
| 54 | if robot.compareUpTo(i) then | |
| 55 | return false | |
| 56 | end | |
| 57 | end | |
| 58 | return true | |
| 59 | end | |
| 60 | ||
| 61 | function compare() | |
| 62 | if checkUp() then turtle.digUp() end | |
| 63 | if checkDown() then turtle.digDown() end | |
| 64 | end | |
| 65 | ||
| 66 | function mine() | |
| 67 | for current_layer = 0, LAYERS - 1 do | |
| 68 | ||
| 69 | robot.moveToY(MIN_HEIGHT + current_layer * Y_STEPS) | |
| 70 | ||
| 71 | for i = 1, LENGTH / 2 do | |
| 72 | robot.moveZ(STEPS, compare) | |
| 73 | robot.moveX(1, compare) | |
| 74 | robot.moveZ(-STEPS, compare) | |
| 75 | ||
| 76 | if i < LENGTH / 2 then | |
| 77 | robot.moveX(1, compare) | |
| 78 | end | |
| 79 | for j = 1, IGNORE_COUNT do | |
| 80 | robot.drop(j, -1) | |
| 81 | for k = IGNORE_COUNT + 1, 16 do | |
| 82 | if robot.compareItems(j, k) then | |
| 83 | robot.drop(k) | |
| 84 | end | |
| 85 | end | |
| 86 | end | |
| 87 | end | |
| 88 | ||
| 89 | robot.moveToX(X_START) | |
| 90 | robot.moveToZ(Z_START) | |
| 91 | ||
| 92 | robot.turnTo(DIR_START) | |
| 93 | ||
| 94 | robot.moveToY(Y_START) | |
| 95 | ||
| 96 | term.clear() | |
| 97 | term.setCursorPos(1, 1) | |
| 98 | cur_layer = current_layer + 1 | |
| 99 | moves_done = fuel_level_start - turtle.getFuelLevel() | |
| 100 | print("layer "..cur_layer.."/"..LAYERS)
| |
| 101 | print(moves_done.."/"..moves.." moves") | |
| 102 | ||
| 103 | for j = IGNORE_COUNT+1, 16 do | |
| 104 | robot.drop(j) | |
| 105 | end | |
| 106 | end | |
| 107 | end | |
| 108 | ||
| 109 | term.clear() | |
| 110 | term.setCursorPos(1, 1) | |
| 111 | print("Total moves: " .. moves)
| |
| 112 | print("Fuel: " .. fuel_level_start)
| |
| 113 | fuel = fuel_level_start - moves | |
| 114 | ||
| 115 | if fuel < 0 then | |
| 116 | fuel = math.abs(fuel) | |
| 117 | coal_needed = math.ceil(fuel/80) | |
| 118 | print("Not enough fuel - "..fuel.." fuel needed. ("..coal_needed.." coal)")
| |
| 119 | else | |
| 120 | os.sleep(3) | |
| 121 | mine() | |
| 122 | end |