вторник, 1 марта 2016 г.

Кодим в ComputerCraft. Refuel. Черепашка. Part 4.

Какая замечательная команда refuel . Можно заправить черепашку этой командой прямо с консоли. И она будет заправляться из любого слота инвентаря, если есть там топливо. Но по одному предмету, например будет использовать только один уголь. А вот если написать программку,

  1. turtle.select( 1 )
  2. turtle.refuel()

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


Добро пожаловать на техно-сервер майнкрафт https://vk.com/e_n_e_r_gy_s_y_s_t_e_m

В программе заложен бесконечный цикл заправки топливом золотой черепашки до максимума, для наглядности значение указано как 100 000, а не turtle.getFuelLimit.
Кроме того, черепашка проверяет все слоты в инвентаре и заправляется, если там обнаружено топливо.


  1. while turtle.getFuelLevel() < 100000 do - пока уровень топлива меньше 100000 выполнять
  2.         print( "I need "..( 100000 - turtle.getFuelLevel() ).." more fuel" )
  3.         print( "Checking for fuel..." )
  4.         for i = 1, 16 do -- для переменной i от 1 до 16 выполнять
  5.           turtle.select( i ) -- выбрать i-ый слот
  6.           turtle.refuel() -- заправить черепашку
  7.         end -- конец цикла for
  8.         print( "Checked for fuel...")
  9.   end -- конец цикла while
  10.   print( "I have got enough fuel...") когда цикл while будет завершен пишем " Мне досточно топлива...")
Скажем прямо, не всегда хочется ждать пока заправиться черепашка. Теперь программа будет заправлять черепашку только на 10 000 единиц. Это сократит время запрвки, а может этого просто достаточно. Следующая инициированная заправка тоже будет на 10 000 единиц.

  1. local a = turtle.getFuelLevel() + 10000 -- присвоим переменной а значение существующего
  2. уровня топлива черепашки + 10 000  единиц 
  3. while turtle.getFuelLevel() < a do -- пока уровень топлива черепашки меньше значения переменной a выполнять:
  4.         print( "I need "..( a - turtle.getFuelLevel() ).." more fuel" )
  5.         print( "Checking for fuel..." )
  6.         for i = 1, 16 do
  7.           turtle.select( i )
  8.           turtle.refuel()
  9.         end -- конец цикла for
  10.         print( "Checked for fuel...")
  11.   end -- конец цикла while
  12.   print( "I have got enough fuel...")
http://pastebin.com/XRVHfUGM


Теперь я хочу заправить черепашку до желаемого уровня как на заправочной станции.

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

 При достижении заправленного или максимального уровня, программа прекратит работу и выдаст об этом сообщение.

  1. term.clear()
  2. term.setCursorPos(1, 1)
  3. print("Fuel level: ", turtle.getFuelLevel())
  4. term.setCursorPos(1, 2)
  5. print("Fuel max level: ", turtle.getFuelLimit())
  6. term.setCursorPos(1, 3)
  7. term.write("Please write the new level fuel ")
  8. term.setCursorPos(1, 4)
  9. term.write("Level:")
  10. local b = read()
  11. if b*1 > turtle.getFuelLimit() then
  12. term.clear()
  13. term.setCursorPos(1, 1)
  14. term.write("You can not write a value ! ")
  15. term.setCursorPos(1, 2)
  16. print("The value must be <= ", turtle.getFuelLimit())
  17. return
  18. end
  19. while turtle.getFuelLevel() < b*1 do
  20.         print( "I need "..( b - turtle.getFuelLevel() ).." more fuel" )
  21.         for i = 1, 16 do
  22.           turtle.select( i )
  23.           turtle.refuel()
  24.         end
  25.         print( "Checked for fuel...")
  26.   end
  27.   print( "I have got enough fuel...")













запускаем еще раз













http://pastebin.com/0ciNQa5S

Хм... почему то я запрашивал 72 000 единиц топлива, а получил 82 720, это происходит потому что, заявленное топливо не кратно которому может быть заправлено, поэтому  в
данном случае надо закладывать топливо не все сразу, а поэтапно. Скажем так, есть повод  для размышлений.

На сегодня все. Удачи в освоении миров.

Комментариев нет:

Отправить комментарий