Перейти к содержимому


Фотография

[1.7.10] ComputerCraft [1.74]


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 2863

#2161 RP2Crafter

RP2Crafter

    Добытчик камня

  • Пользователи
  • Сообщений: 217

Написал 24.06.2013 - 15:06

Хочу услышать конструктивную критику к своему коду.
Скрытый текст
Скрытый текст
По сути программа работает хорошо и 3-5 черепах копают отличные туннели по которым можно пройтись с киркой и обглодать стенки, но хочу послушать критику более опытных программистов.

Изображение


#2162 Apokalypsys

Apokalypsys

    Добытчик дерева

  • Пользователи
  • Сообщений: 183

Написал 24.06.2013 - 15:51

function mdig() while turtle[paste][/paste]detectUp() do turtle[paste][/paste]digUp() end if turtle[paste][/paste]detectDown() then turtle[paste][/paste]digDown() end while turtle[paste][/paste]detect() do turtle[paste][/paste]dig() endend
Парень, ты пьян!
local mdrop=false for j=1,14 do   if turtle[paste][/paste]getItemCount(j)==0 then     mdrop=false     break   else     mdrop=true   end end
Замменил бы на
local mdrop = truefor i = 14, 1, -1 do	if turtle[paste][/paste]fetItemCount(i) == 0 then		mdrop = false		break	endend
Потому что, на каждом шаге цикл i = 1, 14 как-то глупо, не? Если проверять в обратном порядке, то проверка начинается с последних "самых пустых" слотов, и во всех случаях, кроме последнего, не будет превышать 1 итерации. Это если в конце mtorch и mchest поставить turtle.select(1) (чтобы предметы слаживались по порядку, от 1 слота к 14). + мелкие недочёты и неоптимизорванный код. Ну, работает же? ;)

#2163 RP2Crafter

RP2Crafter

    Добытчик камня

  • Пользователи
  • Сообщений: 217

Написал 24.06.2013 - 15:57

Потому что, на каждом шаге цикл i = 1, 14 как-то глупо, не? Если проверять в обратном порядке, то проверка начинается с последних "самых пустых" слотов, и во всех случаях, кроме последнего, не будет превышать 1 итерации. Это если в конце mtorch и mchest поставить turtle.select(1) (чтобы предметы слаживались по порядку, от 1 слота к 14).

Приму к сведению. А что с mdig() не так? While ... do ... end там что-бы гравий разбивала сверху и спереди. Работает, но хочется совершенствоваться и исправлять свои ошибки.

Изображение


#2164 Storm Whisper

Storm Whisper

    Зачарователь

  • Пользователи
  • Сообщений: 1554
  • Откуда: Убежище 13

Написал 24.06.2013 - 16:00

while turtle.digUp() do end

#2165 Apokalypsys

Apokalypsys

    Добытчик дерева

  • Пользователи
  • Сообщений: 183

Написал 24.06.2013 - 17:09

А что с mdig() не так? While ... do ... end там что-бы гравий разбивала сверху и спереди.

А... не понял сразу. Каюсь.

#2166 Storm Whisper

Storm Whisper

    Зачарователь

  • Пользователи
  • Сообщений: 1554
  • Откуда: Убежище 13

Написал 24.06.2013 - 19:20

Ну я бы всё равно не советовал использовать детекты перед копанием, ведь сама функция копания возвращает boolean. Насколько я помню, детект занимает время, а оно так драгоценно.if turtle.detectDown() then turtle.digDown() end лучше заменить на turtle.digDown(), а в циклах на место условия поставить тело, как я уже писал выше.

#2167 Apokalypsys

Apokalypsys

    Добытчик дерева

  • Пользователи
  • Сообщений: 183

Написал 24.06.2013 - 19:30

Я ж уже писал turtle.detect быстрее даже холостого turtle.dig.

#2168 Storm Whisper

Storm Whisper

    Зачарователь

  • Пользователи
  • Сообщений: 1554
  • Откуда: Убежище 13

Написал 24.06.2013 - 19:35

Ок..RP2Crafter, ещё тебе подсказка. Я не знаю, проверял ли ты, по идее из-за этой проблемы у тебя должен быть баг.На падение песка и гравия уходит время, так что в тот момент, когда ты после выкапывания проверяешь наличие блока, он его может не обнаружить, или может, я вот хз, как на это реагирует .detect.Падающий блок это же, вроде, entity? Если да, то не сработает. sleep() тебе поможет (хотел найти самую норм частоту, но я не помню, где это писал... Так что придётся тебе самому вычислять).Хотя я очень давно не прогил СС, так что не исключено, что это просто бред =)

#2169 RP2Crafter

RP2Crafter

    Добытчик камня

  • Пользователи
  • Сообщений: 217

Написал 24.06.2013 - 19:39

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

Бывает и такое...Если черепаха копает блок над которым стоит песок(или гравий), то она его действительно не успевает детектить и едет дальше. Но это не критично.

Изображение


#2170 Storm Whisper

Storm Whisper

    Зачарователь

  • Пользователи
  • Сообщений: 1554
  • Откуда: Убежище 13

Написал 24.06.2013 - 19:42

Ну вот юзай sleep. В голове крутятся числа в промежутке [0.3;0.5], но не факт =)

#2171 RP2Crafter

RP2Crafter

    Добытчик камня

  • Пользователи
  • Сообщений: 217

Написал 24.06.2013 - 19:45

Ну вот юзай sleep. В голове крутятся числа в промежутке [0.3;0.5], но не факт =)

Черепаха за второй проход натыкается на такие места и убирает их.

Изображение


#2172 RP2Crafter

RP2Crafter

    Добытчик камня

  • Пользователи
  • Сообщений: 217

Написал 25.06.2013 - 14:01

Во времена 1.2.5 черепаха била перед собой на 2 или 3 блока, сейчас(mc1.4.7; cc1.5) не больше одного. Это баг или понерфили?

Изображение


#2173 Cyxapuk

Cyxapuk

     

  • Главные модераторы
  • Сообщений: 8706
  • Ник в Minecraft:
    Meegoo

Написал 25.06.2013 - 14:26

Я не помню, что бы черепаха могла копать больше, чем на 1 блок.

V6xCzSN.png


#2174 RP2Crafter

RP2Crafter

    Добытчик камня

  • Пользователи
  • Сообщений: 217

Написал 25.06.2013 - 14:27

Я не помню, что бы черепаха могла копать больше, чем на 1 блок.

Не копать, а атаковать(turtle.attack())

Изображение


#2175 Lexor

Lexor

    Добытчик угля

  • Пользователи
  • Сообщений: 399
  • Откуда: Иркутская область

Написал 25.06.2013 - 17:36

Во времена 1.2.5 черепаха била перед собой на 2 или 3 блока, сейчас(mc1.4.7; cc1.5) не больше одного. Это баг или понерфили?

Раньше был баг, когда могла атаковать более чем на блок перед собой, пофиксили.

#2176 Dimus

Dimus

    Странник

  • Пользователи
  • Сообщений: 89

Написал 26.06.2013 - 12:50

Пакетные файлы в ComputerCraft
Задавались ли вы вопросом, а возможны ли они?
К примеру, у черепашки есть такие замечательные программы как go и turn. С их помощью можно легко перемещать черепашку ничего не зная о программировании. Но запуск на выполнение очередной программы возможен только после завершения предыдущей. Значит нужно следовать за черепашкой чтобы запустить очередной go или turn? Не нужно! Просто создаем пакетный файл, в народе - батник,
edit travel.bat
записываем в него необходимую последовательность движений, например так
go forward 25turn left 2go forward 25
и запускаем
travel.bat
Разумеется, всё сказанное выше касается не только go и turn, а всех доступных системе программ.
О том как сделать так, чтоб всё это работало следующий пост

#2177 RP2Crafter

RP2Crafter

    Добытчик камня

  • Пользователи
  • Сообщений: 217

Написал 26.06.2013 - 12:54

У меня была идея сделать подобное, даже начал делать, но потом понял что на деле не пригодится.

Изображение


#2178 Storm Whisper

Storm Whisper

    Зачарователь

  • Пользователи
  • Сообщений: 1554
  • Откуда: Убежище 13

Написал 26.06.2013 - 13:00

для этого или придётся писать ОС, или всё равно запускать такой батник через прогу. Других вариантов не вижу.

#2179 RP2Crafter

RP2Crafter

    Добытчик камня

  • Пользователи
  • Сообщений: 217

Написал 26.06.2013 - 13:01

В lua-же есть библиотеки. Цепляешь библиотеку с функциями в начале bat-ника и потом используешь их. Или в CC-lua они не поддерживаются?

Изображение


#2180 Storm Whisper

Storm Whisper

    Зачарователь

  • Пользователи
  • Сообщений: 1554
  • Откуда: Убежище 13

Написал 26.06.2013 - 13:06

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


Количество пользователей, читающих эту тему: 3

0 пользователей, 3 гостей, 0 анонимных