193 lines
3.3 KiB
Plaintext
193 lines
3.3 KiB
Plaintext
--[[
|
|
Allows a turtle to keep track of it's
|
|
location using a coordinate system.
|
|
|
|
Use the commands goForward(), goRight(),
|
|
goLeft(), goUp(), and goDown() to
|
|
control the turtle while adding to
|
|
the coordinates.
|
|
|
|
goHome() will send the turtle back to
|
|
it's origin and will point it north:
|
|
the direction it was originally facing.
|
|
|
|
A turtle always faces north when it is placed down
|
|
]]--
|
|
|
|
x = 0
|
|
y = 0
|
|
z = 0
|
|
|
|
saveX = 0
|
|
saveY = 0
|
|
saveZ = 0
|
|
|
|
ZX = 0
|
|
ZY = 0
|
|
ZZ = 0
|
|
|
|
saveDirection = NORTH
|
|
|
|
NORTH = 1
|
|
EAST = 2
|
|
SOUTH = 3
|
|
WEST = 4
|
|
|
|
UP = 5
|
|
DOWN = 6
|
|
|
|
RIGHT = 7
|
|
LEFT = 8
|
|
|
|
direction = NORTH
|
|
|
|
--[[sends a turtle forward 1 block
|
|
and adds to it's X coordinate]]--
|
|
function goForward()
|
|
if turtle.forward() then
|
|
addToCoords(direction)
|
|
return true
|
|
else return false
|
|
end
|
|
end
|
|
|
|
--[[sends a turtle up 1 block
|
|
and adds to it's Z coordinate]]--
|
|
function goUp()
|
|
if turtle.up() then
|
|
addToCoords(UP)
|
|
return true
|
|
else return false
|
|
end
|
|
end
|
|
|
|
--[[sends a turtle down 1 block
|
|
and subtracts from it's Z coordinate]]--
|
|
function goDown()
|
|
if turtle.down() then
|
|
addToCoords(DOWN)
|
|
return true
|
|
else return false
|
|
end
|
|
end
|
|
|
|
--[[turns a turtle right and changes
|
|
it's direction accordingly]]--
|
|
function goRight()
|
|
turtle.turnRight()
|
|
changeDirection(RIGHT)
|
|
end
|
|
|
|
--[[turns a turtle left and changes
|
|
it's direction accordingly]]--
|
|
function goLeft()
|
|
turtle.turnLeft()
|
|
changeDirection(LEFT)
|
|
end
|
|
|
|
--[[moves a turtle forward a specified number of blocks]]--
|
|
function move(distance)
|
|
for i=1,distance do
|
|
goForward()
|
|
end
|
|
end
|
|
|
|
--[[moves a turtle up a specified number of blocks]]--
|
|
function moveUp(distance)
|
|
for i=1,distance do
|
|
goUp()
|
|
end
|
|
end
|
|
|
|
--[[moves a turtle down a specified number of blocks]]--
|
|
function moveDown(distance)
|
|
for i=1,distance do
|
|
goDown()
|
|
end
|
|
end
|
|
|
|
--[[takes the direction of the turtle and adds 1
|
|
to the appropriate coordinate based on that direction]]--
|
|
function addToCoords(direction)
|
|
if direction == NORTH then
|
|
x = x+1
|
|
elseif direction == EAST then
|
|
y = y+1
|
|
elseif direction == SOUTH then
|
|
x = x-1
|
|
elseif direction == WEST then
|
|
y = y-1
|
|
elseif direction == UP then
|
|
z = z+1
|
|
else
|
|
z = z-1
|
|
end
|
|
end
|
|
|
|
--[[takes a direction turned (right or left) and changes the
|
|
direction of the turtle to north, south, east, or west]]--
|
|
function changeDirection(turned)
|
|
if turned == RIGHT then
|
|
if direction == NORTH then
|
|
direction = EAST
|
|
elseif direction == EAST then
|
|
direction = SOUTH
|
|
elseif direction == SOUTH then
|
|
direction = WEST
|
|
else
|
|
direction = NORTH
|
|
end
|
|
else
|
|
if direction == NORTH then
|
|
direction = WEST
|
|
elseif direction == WEST then
|
|
direction = SOUTH
|
|
elseif direction == SOUTH then
|
|
direction = EAST
|
|
else
|
|
direction = NORTH
|
|
end
|
|
end
|
|
end
|
|
|
|
--[[takes a direction (north, east, south, or west) and turns
|
|
the turtle in that direction]]--
|
|
function setDirection(newDirect)
|
|
while true do
|
|
if newDirect == direction then
|
|
break
|
|
end
|
|
goRight()
|
|
end
|
|
end
|
|
|
|
--[[This will solve a three dimensional maze]]--
|
|
|
|
WENT_DOWN = 20
|
|
WENT_UP = 21
|
|
LAST_MOVE = 0
|
|
|
|
|
|
|
|
function solve2D()
|
|
if not goForward() then
|
|
goLeft()
|
|
end
|
|
end
|
|
|
|
function solve3D()
|
|
if not goToZ() then
|
|
solve2D()
|
|
end
|
|
end
|
|
|
|
function goToZ(way)
|
|
if way = UP
|
|
goUp()
|
|
LAST_MOVE = WENT_UP
|
|
else
|
|
goDown()
|
|
LAST_MOVE = WENT_DOWN
|
|
end
|
|
end
|