Nick Overdijk
13 years ago
1 changed files with 107 additions and 0 deletions
@ -0,0 +1,107 @@ |
|||||
|
-- local turtle = {} |
||||
|
-- local function placeholder() return true end |
||||
|
-- turtle.up = placeholder |
||||
|
-- turtle.down = placeholder |
||||
|
-- turtle.digUp = placeholder |
||||
|
-- turtle.digDown = placeholder |
||||
|
-- turtle.dig = placeholder |
||||
|
-- turtle.forward = placeholder |
||||
|
-- turtle.turnLeft = placeholder |
||||
|
-- turtle.turnRight = placeholder |
||||
|
|
||||
|
local tArgs = { ... } |
||||
|
|
||||
|
local height = tonumber(tArgs[1]) |
||||
|
local width = tonumber(tArgs[2]) |
||||
|
local length = tonumber(tArgs[3]) |
||||
|
|
||||
|
print("Will create chamber of "..height.."x"..width.."x"..length) |
||||
|
|
||||
|
local verbose = true |
||||
|
-- x, y |
||||
|
local difference = {0, 0} |
||||
|
|
||||
|
local function up() |
||||
|
local success = turtle.up() |
||||
|
if success then |
||||
|
difference[2] = difference[2] + 1; |
||||
|
end |
||||
|
|
||||
|
return success |
||||
|
end |
||||
|
|
||||
|
local function down() |
||||
|
local success = turtle.down() |
||||
|
if success then |
||||
|
difference[2] = difference[2] - 1; |
||||
|
end |
||||
|
|
||||
|
return success |
||||
|
end |
||||
|
|
||||
|
local function fup() |
||||
|
while not up() do turtle.digUp() end |
||||
|
end |
||||
|
|
||||
|
local function fdown() |
||||
|
while not down() do turtle.digDown() end |
||||
|
end |
||||
|
|
||||
|
local function fdig() |
||||
|
while turtle.detect() do turtle.dig() end |
||||
|
end |
||||
|
|
||||
|
local function fforward() |
||||
|
while not turtle.forward() do turtle.dig() end |
||||
|
end |
||||
|
|
||||
|
-- direction = 0 -> up |
||||
|
-- direction = 1 -> down |
||||
|
local function dig(height, direction) |
||||
|
local df = nil |
||||
|
if direction == 0 then df = fup else df = fdown end |
||||
|
for h = 2,height do |
||||
|
df() |
||||
|
end |
||||
|
end |
||||
|
|
||||
|
-- Digs a hall |
||||
|
-- height height of the hall |
||||
|
-- length length of the hall |
||||
|
-- starting_direction 0 start going up, 1 start going down |
||||
|
local function hall(height, length, starting_direction) |
||||
|
local direction = starting_direction |
||||
|
for l = 1,length do |
||||
|
dig(height, direction) |
||||
|
if direction == 0 then direction = 1 else direction = 0 end |
||||
|
if l < length then fforward() end |
||||
|
end |
||||
|
|
||||
|
return direction |
||||
|
end |
||||
|
|
||||
|
local function repeate(number, f) |
||||
|
for i = 2,number do f() end |
||||
|
end |
||||
|
|
||||
|
-- Creates a chamber where he stands, starts at the bottom, rotates to the right |
||||
|
-- height height of the chamber |
||||
|
-- width width of the chamber |
||||
|
-- length length of the chamber |
||||
|
local function chamber(height, width, length) |
||||
|
local location = 0 -- 0 == "should go up" |
||||
|
local rotation = 0 -- 0 == "should turn left" |
||||
|
for w = 1,width do |
||||
|
location = hall(height, length, location) |
||||
|
local rf = nil |
||||
|
if rotation == 0 then rf = turtle.turnLeft; rotation = 1 else rf = turtle.turnRight; rotation = 0 end |
||||
|
rf() |
||||
|
if w < width then fforward() end |
||||
|
rf() |
||||
|
end |
||||
|
|
||||
|
if location == 1 then repeate(height, down) end |
||||
|
end |
||||
|
|
||||
|
chamber(height, width, length) |
||||
|
print("Ended at difference of " .. tostring(difference)) |
Reference in new issue