1

Тема: Обсуждение и приёмы владения модом Computer Craft

Недавно обмазался Черепашками, запилил уже код где черепашка мне выкапывает комнатку, потом выложу сорс.
Интересует кто ещё занимается скриптованием различных функций итп.

Сейчас планирую сделать систему которая позволит управлять N количеством черепашек, выдавать им приказы в каких координатах копать, возврат на базу, дозаправку, службу дозаправщиков итп, думаю это займет много времени.

Реквестирую ваши наработки которые помогут в этом деле.

2

Re: Обсуждение и приёмы владения модом Computer Craft

вот запилил "программку" которая заставляет черепашку копать штробу вниз задаваемой глубины и ширины http://pastebin.com/rQk1SgCK

function ChkFuel()
 if turtle.getFuelLevel() == 0 then 
  turtle.select(1)
  if turtle.refuel(1) == true then 
   write('Dozapravke na ')
   write(x)
   write('x')
   print(y)
  end
 end
end

function Fwd(Int)
 a = 0
 while a < Int do
  turtle.dig()
  ChkFuel()
  turtle.forward()
  a = a + 1
 end
end

function Turn(Bool)
  if Bool == true then
  turtle.turnRight()
  Fwd(1)
  turtle.turnRight()
  return false
 else
  turtle.turnLeft()
  Fwd(1)
  turtle.turnLeft()
  return true 
  end
end

function down()
 turtle.digDown()
 turtle.down()
 turtle.turnLeft()
 turtle.turnLeft()
end

print('Vvedite Shiriny')
mX = tonumber(read())
print('Vvedite glubinu')
mY = tonumber(read())

x=0
y=0

Fwd(1)
turtle.turnLeft()
Fwd(mX/2)
turtle.turnRight()
for c=1, 3 do
 turtle.digUp()
 turtle.up()
end


turn = true


while y < mY+3 do
 if y > 0 then
  down()
 end
 x = 0
 while x < mX do
  Fwd(mX)
  x = x + 1
   if x ~= mX then
    turn = Turn(turn) 
   end 
  end
 y = y + 1
end

for b=0, mY-1 do
  turtle.digUp()
  turtle.up()
end

в самую первую клетку нужно горючку кидать, копает вначале вперёд, потом на половину ширины влево, на 3 клетки вверх и потом начинает вниз копать, по завершению поднимается вверх на изначальную высоту.

Есть небольшие недочёты, в будущем с развитием "технологии" буду совершенствовать и делать более комплексную программу.

Отредактировано MDKed (2013-07-01 19:00:10)

3

Re: Обсуждение и приёмы владения модом Computer Craft

Cледующая версия моей программки, теперь с нищебродской системой определения местоположения! (не нужно отжимать у эндера его яйцо, и ставить gps сервер) позицию в которой вы ставите черепашку считается за x=0, y=0, z=0, ну и потом она отслеживает своё положение во время движения, пока всё точно smile.
  В следующей версии подправлю систему проверки топлива(сделаю чтоб без топлива не рыпалась), также добавлю функции возврата на базу для згрузки накопанного и возврата на точку продолжения работ.
http://pastebin.com/Ljcef1bN

hOst = false
hDown = false
hNord = true


pos = vector.new(0,0,0)

function swapBool(Bool)
 if Bool then 
  return false
 else
  return true
 end
end

function chngHBool(Int)
 if Int == 1 then
  hOst = swapBool(hOst)
 elseif Int == 2 then
  hDown = swapBool(hDown)
 else 
  hNord = swapBool(hNord)
 end
end

function chngCoord(Int)
 if Int == 1 then
   if hOst then
   pos.x = pos.x + 1
  else
   pos.x = pos.x - 1
  end
 elseif Int == 2 then
   if hDown then
   pos.y = pos.y - 1
  else
   pos.y = pos.y + 1
  end
 else 
  if hNord then
   pos.z = pos.z + 1
  else
   pos.z = pos.z - 1
  end
 end
end

function ChkFuel()
 if turtle.getFuelLevel() == 0 then 
  turtle.select(1)
  if turtle.refuel(1) == true then 
   print('Dozapravke na ',pos.x, "x",pos.y, "x",pos.z)
  end
 end
end

function Fwd(Int, Bool)
  for a = 1, Int  do
   turtle.dig()
   ChkFuel()
   turtle.forward()
   if Bool then
    chngCoord(3)
   else
    chngCoord(1)
   end
   print('moving ',pos.x, "x",pos.y, "x",pos.z)
  end
end

function Turn(Bool)
  if Bool then
  turtle.turnRight()
  Fwd(1,false)
  turtle.turnRight()
   chngHBool(3)
  return false
 else
  turtle.turnLeft()
  Fwd(1,false)
  turtle.turnLeft()
   chngHBool(3)
  return true 
  end
end

function down()
 turtle.digDown()
 turtle.down()
  chngCoord(2)
 turtle.turnLeft()
 turtle.turnLeft()
  chngHBool(3)
  chngHBool(1)
end

print('Vvedite Shiriny')
mX = tonumber(read())
print('Vvedite glubinu')
mY = tonumber(read())

print('  Starting at ',pos.x, "x",pos.y, "x",pos.z)

Fwd(1,true)
turtle.turnLeft()
Fwd(mX/2,false)
 chngHBool(1)
turtle.turnRight()


for c=1, 2 do
 turtle.digUp()
 turtle.up()
  chngCoord(2)
end
 chngHBool(2)

print('  Dig down at ',pos.x, "x",pos.y, "x",pos.z)

turn = true


for y = 1, mY+3 do
 if y > 1 then
  down()
 end
  for x = 1,  mX do
   if mX > 1 then
    Fwd(mX - 1,true)
   else
    Fwd(mX,true)
   end
   if x ~= mX then
    turn = Turn(turn) 
   end 
  end
 end

print('Begin dig up, steps up = ', mY + 3, "\n   ", pos.x, "x",pos.y, "x",pos.z)

 chngHBool(2)
for b=1, mY do
  turtle.digUp()
  turtle.up()
   chngCoord(2)
end
print('Ending operation ', pos.x, "x",pos.y, "x",pos.z)

Отредактировано MDKed (2013-07-02 20:32:54)

4

Re: Обсуждение и приёмы владения модом Computer Craft

Это все круто, и я сам с удовольствием такое бы поделал (делал, умею). Но без чанклоадинга придется за ними ходить, т.к. того, что загружено вокруг тебя, как-то мало.

Отредактировано pss (2013-07-02 22:26:53)

5

Re: Обсуждение и приёмы владения модом Computer Craft

MDKed пишет

Cледующая версия моей программки, теперь с нищебродской системой определения местоположения! (не нужно отжимать у эндера его яйцо, и ставить gps сервер) позицию в которой вы ставите черепашку считается за x=0, y=0, z=0, ну и потом она отслеживает своё положение во время движения, пока всё точно smile.
  В следующей версии подправлю систему проверки топлива(сделаю чтоб без топлива не рыпалась), также добавлю функции возврата на базу для згрузки накопанного и возврата на точку продолжения работ.

Добавь возможность ручного ввода координат, а так же снятие данных с gps, если оно имеется.
И необходим возврат на базу, в случае если топливо кончается. причем надо обсчитывать оставшиеся запасы, чтобы их хватило на возврат.

6

Re: Обсуждение и приёмы владения модом Computer Craft

Сделал что черепашка накопав 600 > блоков идёт на разгрузку, и возвращается на работу, по завершению идёт на место откуда начала, пока не делал дозаправку(но сейчас уже можно засыпать  magma cell или половинкой стака угля(поидее сама себя подпитывает накопанным)), работу с gps, и прочее. ща в игре буду переезжать, немного отдохну от "кодинга", а так буду писать сюда если сделаю ещё чонить. http://pastebin.com/pNEtNz5e

heading = 1
rHeading = 1

pos = vector.new(0,0,0)
lPos = vector.new(0,0,0)

tgted = false
unloading = false
tgt = vector.new(0,0,0)

waypoints = {}
waypoints['dockUnl'] = vector.new(-2,0,2)
waypoints['unload'] = vector.new(-2,0,1)
waypoints['retP'] = vector.new(0,0,1) 

function chkInv()
if unloading ~= true then

itmQ = 0
 for a = 2, 16 do
  itmQ = itmQ + turtle.getItemCount(a) 
 end
print(' item count = ', itmQ)
 if itmQ > 600 then
  print('  returning to unload')
  lPos = vector.new(pos.x, pos.y, pos.z)
  rHeading = heading
  unloadTime()
 end 
end
end

function unloadTime()
 unloading = true
 moveToTgt(waypoints['dockUnl'])
 moveToTgt(waypoints['unload'])
 for a = 2, 16 do
  turtle.select(a) 
  turtle.drop()
 end
 moveToTgt(waypoints['dockUnl'])
  print('returning to ', lPos.x, "x",lPos.y, "x",lPos.z)
 moveToTgt(lPos)
 rot(rHeading)
 unloading = false
end

function moveToTgt(Vector) 
 tgt = Vector
 tgted = true
 while (pos.x ~= tgt.x) or (pos.y ~= tgt.y) or (pos.z ~= tgt.z) do
  if pos.x > tgt.x then
   move(4)
  elseif pos.x < tgt.x then
   move(2)
  end
  if pos.y > tgt.y then
   move(5)
  elseif pos.y < tgt.y then
   move(6)
  end
  if pos.z > tgt.z then
   move(3)
  elseif pos.z < tgt.z then
   move(1)
  end
 end
end

function move(Int)
 
 if (Int > 0) and (Int < 5) then
  rot(Int)
  Fwd(1)
 elseif Int == 5 then
  chkInv()
  ChkFuel()
  turtle.digDown()
  turtle.down()
  chngCoord(5)
 elseif Int == 6 then
  chkInv()
  ChkFuel()
  turtle.digUp()
  turtle.up()
  chngCoord(6)
 end
end

function rotB(Bool)
 if Bool then
  turtle.turnRight()
  heading = heading + 1
 else 
  turtle.turnLeft()
  heading = heading - 1
 end
 if heading > 4 then
   heading = 1
  elseif heading < 1 then
   heading = 4
  end
end

function rot(Int)
a = heading - 1
 if a < 1 then
   a = 4
  end
if a == int then
 turtle.turnLeft()
 heading = heading - 1
end
a = heading + 1
 if a > 4 then
   a = 1
  end
if a == int then
 turtle.turnRight()
 heading = heading + 1
end
  if heading > 4 then
   heading = 1
  elseif heading < 1 then
   heading = 4
  end
while Int ~= heading do
  turtle.turnRight()
  heading = heading + 1
  if heading > 4 then
   heading = 1
  elseif heading < 1 then
   heading = 4
  end
 end
end

function swapBool(Bool)
 if Bool then 
  return false
 else
  return true
 end
end

function chngCoord(Int)
 if Int == 1 then
   pos.z = pos.z + 1
 elseif Int == 2 then
   pos.x = pos.x + 1
 elseif Int == 3 then
   pos.z = pos.z - 1
 elseif Int == 4 then
   pos.x = pos.x - 1
 elseif Int == 5 then 
   pos.y = pos.y - 1
 elseif Int == 6 then
   pos.y = pos.y + 1
 end
end

function ChkFuel()
 if turtle.getFuelLevel() == 0 then 
  turtle.select(1)
  if turtle.refuel(1) == true then 
   print('Dozapravke na ',pos.x, "x",pos.y, "x",pos.z)
  end
 end
end

function Fwd(Int)
  for a = 1, Int  do
   chkInv()
   turtle.dig()
   ChkFuel()
   if turtle.forward() then
    chngCoord(heading)
   end
  end
end

function Turn(Bool)
  if Bool then
   rotB(true)
  Fwd(1)
   rotB(true)
  return false
 else
   rotB(false)
  Fwd(1)
   rotB(false)
  return true 
  end
end

function down()
 move(5)
 rotB(false)
 rotB(false)
end

print('Vvedite Shiriny')
mX = tonumber(read())
print('Vvedite glubinu')
mY = tonumber(read())

print('  Starting at ',pos.x, "x",pos.y, "x",pos.z)

Fwd(1)
 rotB(false)
Fwd(mX/2)
 rotB(true)

for c=1, 2 do
 move(6)
end

print('  Dig down at ',pos.x, "x",pos.y, "x",pos.z)

turn = true

for y = 1, mY+3 do
 if y > 1 then
  down()
 end
  for x = 1,  mX do
   if mX > 1 then
    Fwd(mX - 1)
   else
    Fwd(mX)
   end
   if x ~= mX then
    turn = Turn(turn) 
   end 
  end
 end

print('Begin dig up, steps up = ', mY, "\n   ", pos.x, "x",pos.y, "x",pos.z)


for b=1, mY do
 move(6)
end
unloadTime()
moveToTgt(waypoints['retP'])
moveToTgt(vector.new(0,0,0))
print('Ending operation ', pos.x, "x",pos.y, "x",pos.z)

http://cs312731.vk.me/v312731845/2350/xwIypa3WRZY.jpg
так нужно ставить черепашку и ящик в который она будет это скидывать(это скриншот когда черепаха уже вернулась)

7

Re: Обсуждение и приёмы владения модом Computer Craft

Мдкид ты вернулся чтоли ?? :))

Отредактировано ratoalien (2013-07-04 12:44:14)

8

Re: Обсуждение и приёмы владения модом Computer Craft

MDKed пишет

Сделал что черепашка накопав 600 > блоков идёт на разгрузку, и возвращается на работу, по завершению идёт на место откуда начала, пока не делал дозаправку(но сейчас уже можно засыпать  magma cell или половинкой стака угля(поидее сама себя подпитывает накопанным)), работу с gps, и прочее. ща в игре буду переезжать, немного отдохну от "кодинга", а так буду писать сюда если сделаю ещё чонить. http://pastebin.com/pNEtNz5e

Имхо, не работает. Ставлю, как на картинке, но черепаха сходит с ума и ломает ящик. Не мог бы ты описать поподробней, как использовать?

9

Re: Обсуждение и приёмы владения модом Computer Craft

Erick пишет

Имхо, не работает. Ставлю, как на картинке, но черепаха сходит с ума и ломает ящик. Не мог бы ты описать поподробней, как использовать?

черепаха должна от тебя смотреть, через один куб в лево ставишь ящик, загружаешь в черепаху уголь, пастишь код, всё работает.

10

Re: Обсуждение и приёмы владения модом Computer Craft

MDKed пишет

черепаха должна от тебя смотреть, через один куб в лево ставишь ящик, загружаешь в черепаху уголь, пастишь код, всё работает.

лучше схемку набросай.

11

Re: Обсуждение и приёмы владения модом Computer Craft

Ах, точно, это просто скриншот с передней стороны сделан. Не заметил.