среда, 6 февраля 2013 г.

Черепашья Программа



Итак давайте попробуем что нибудь более интересное, в плане программы копания.
Та программа которой я копал не так давно  позволяет выкопать параллелепипед 3 в высоту, 20 в ширину и 80 блоков в длину(при желании вы можете поменять длину и ширину ). Понятное дело что все ресурсы выкопанные на такой территории в черепаху не влезут . Отсюда следует что нам надо будет частенько возвращаться назад и сдавать все ресы в сундук.
Начнем с того что заправим черепаху
turtle.refuel()
Заправлять надо примерно 60 угля для того чтоб черепаха докопала до конца.
Когда черепаха прокапывает туннель длиной в 80 блоков, ее инвентарь почти забивается поэтому мы будем копать 20 раз по 80 блоков.

Для повторения команд используем for
for i=1,20 do
...
end
 Данная конструкция позволяет повторять команды написанные между do и end   ровно 20 раз. расположим черепаху(красный квадрат, черным показано направление) в начале коридора длинной более 20 клеток, а сзади поставим сзади поставим сундук.
Черепаха должна проехать вперед, повернуть налево, прокопать 80 клеток, вернуться назад к сундуку и сложить все вещи в него. После чего повторить все эти действия но уже со следующей линией.
Переменная i у нас обозначает номер линии которую мы копаем, значит вначале мы должны подвинуть черепаху к ней. Сделаем это с помощью другой конструкции for.

for j=1,i do
    turtle.forward()
end

Дальше мы поворачиваем черепаху
turtle.turnLeft()
 Ну а теперь копаем туннель вперед, длинной 80

  for j=1,80 do
    turtle.digUp()
    turtle.dig()
    turtle.digDown()
    while turtle.detectUp() do    
      turtle.digUp()
      os.sleep(0.5)
    end
    while turtle.detect() do
      turtle.dig()
      os.sleep(0.5)
    end
    turtle.forward()
  end
В этом куске кода у нас есть 2 проверки которые призваны убирать падающий гравий. Первая проверяет не упал ли на саму черепаху гравий , вторая не упал ли гравий перед ней.
Прокопали, отлично теперь  поворачиваемся и возвращаемся назад.Для возвращения мы ничего считать не будем , а просто будем двигаться пока не встретим блок.
  turtle.turnLeft()
  turtle.turnLeft()
  while not turtle.detect() do
    turtle.forward()
  end
Осталось повернуться направо
  turtle.turnRight()
Доехать до сундука. И так как мы знаем что между нами и сундуком никаких блоков нет, мы едем просто до препятствия.
  while not turtle.detect() do
    turtle.forward()
  end
И вот черепаха стоит перед сундуком, и самое время выложить из нее все что в ней имеется.
Мы по очереди будем выделять каждую ячейку ее инвентаря и будем выкидывать все что в ней есть.
  for j=1,16 do
    turtle.select(j)
    turtle.drop()
  end
Теперь развернем черепаху 
  turtle.turnLeft()
  turtle.turnLeft()
И поставим end который будет закрывать наш самый первый for. Как только программа дойдет до этого end, она увеличит i на единицу, и если после этого i не станет равен 21  программа проделает все действия описанные выше.
И вот что у нас получилось 

P.S. Сдесь я разбираю свою конкретную программу для черепахи, она конечно не идеальная , но этот пост написан для тех кто не понимает как все это работает. Надеюсь он вам поможет.

16 комментариев:

  1. Здорово. Спасибо за то, что подробно разписал

    ОтветитьУдалить
  2. Это интересно, но интереснее, когда сам пишешь код, а так спасибо за гайд. :)

    ОтветитьУдалить
  3. А она работает, если выйти из зоны подгрузки чанков?

    ОтветитьУдалить
    Ответы
    1. не уверен, я дальше блоков 100-150 не отходил

      Удалить
    2. между прочим если в сингле посетил зону с черепахой то эта зона не выгружается (также и с другим любым чанком в игре, если посетил и загрузил не выгрузится),но это верно только для сингла.На сервере если чанк был загружен ,но игрок покинул его зоны то он выгрузится(чтобы не перенапрягать компьютер или сервер). Чтобы решить такую проблему используют загрузчики чанков, одним из которых является карьер.

      Удалить
  4. Этот комментарий был удален автором.

    ОтветитьУдалить
  5. что то я туплю(
    как запустить эту программу на черепашке?

    ОтветитьУдалить
  6. ребят че делать написал эту программу, и когда ее запускаю она мне пишет "attempt to call nil"? я три стака угля в ниё впихал. че делать подскажите плиз

    ОтветитьУдалить
  7. Я все написал. Выдает ошибку
    bios:338: [string "Kopalka"]:23: syntax error
    Ничего не понимаю -_-

    ОтветитьУдалить
    Ответы
    1. братуха
      ты даун
      в 23 строке ошибка в синтаксисе бля

      Удалить
  8. Ну все понятно расписано. Но я тугодум, и до меня в этом плане достучаться не реально. Но все равно сенк. Буду юзать твою прогу, мне бы твой клиент...

    ОтветитьУдалить
  9. Как с компа отправить на дискету????

    ОтветитьУдалить
  10. и еще ребя отл сервак народу нет заходите и играйте полно модов и минимум запретов все мех работают от карьера до черепахи вот адрес http://fantast-server.ru заходите не пожалеете

    ОтветитьУдалить