Zer0Galaxy
Гуру-
Публикации
1 220 -
Зарегистрирован
-
Посещение
-
Победитель дней
189
Тип публикации
Блоги
Профили
Форум
Багтрекер
Магазин
Все публикации пользователя Zer0Galaxy
-
Совершенно верно. Дело в том, что вся работа библиотеки выполняется внутри функции run, а stop просто прерывает это выполнение.
-
@Oleshe, приведи пример кода, который выполняется на роботе и ПК. Какие сетевые платы ты используешь? Я помню обнаруживал, что беспроводные платы первого уровня не работали даже на дистанции в 1 блок, хотя платы 2-го уровня на том же месте работали прекрасно. Объяснения этому я не нашел.
-
Добавлю русскоязычный источник: https://minecraft.fandom.com/ru/wiki/OpenComputers/Робот https://minecraft.fandom.com/ru/wiki/OpenComputers/Robot_API
- 2 ответа
-
- 1
-
-
А чего так сложно? А как он доберется, если посреди комнаты препятствие? "Ищем в массиве" это поиск в памяти. Тут никуда добираться не надо. А вот что бы проложить к ней путь и потребуется А*, не спорю. Так мы просканируем только контуры комнаты. На сколько я понял задачу, необходимо изучить всю комнату.
-
В таком случае предлагаю следующий алгоритм: 1. Создаем массив 100х160, который будет хранить статусы блоков в нашей комнате. Статусы могут быть следующие: -2 (неинтересно) - такой статус имеет блок, о котором пока не известно, находится ли он в пределах комнаты -1 (неизвестно) - такой статус имеет еще неисследованный блок, но о котором известно, что он в комнате или является ее стенкой 0 (пусто) - пустое пространство внутри комнаты >0 - исследованный блок внутри комнаты или ее стенка. Может принимать значение равное номеру слота робота, с которым выполнилось сравнение. 2. Заполняем массив статусом "неинтересно". Считаем что робот находится в позиции X=80, Y=50 (центр нашего массива). 3. Присваиваем этой клетке статус "пусто". Просматриваем четыре, граничащие с ней клетки. Если они находятся в пределах массива и имеют статус "неинтересно", присваиваем им статус "неизвестно". 4. Ищем в массиве ближайшую клетку со статусом "неизвестно". Если таких клеток нет - конец работы 5. Иначе, перемещаемся к ней и исследуем. 6. Если она пустая, переходим к пункту 3 7. Иначе, присваиваем клетке тип блока. Переходим к пункту 4 Понятно, что под словами "просматриваем", "ищем", "перемещаемся" может скрываться довольно сложный код, но я, по крайней мере, начал дробить сложную задачу на задачи меньшего размера.
-
Предлагаю сделать предположение, что размеры комнаты не превышают 100х160. Если какой либо участок комнаты вылезет за эти рамки, робот его проигнорирует. Почему именно 100х160? Да просто такую комнату можно будет отрисовать полупикселями на мониторе 3-его уровня.
-
Почему вообще возникла такая задача? Имеется практическая цель или академический интерес? Должен ли робот сканировать блоки, находящиеся над/под ним или только в плоскости перемещения?
-
Тут про ComputerCraft уже никто не помнит. Давай на OpenComputers переходи.
-
Вот здесь Томат подробно описал последовательность действий. Повторять их не вижу смысла. Если какое либо действие вызывает вопросы, говори какое.
-
@Fingercomp Опыт подтверждает твои выводы: local uptime=require("computer").uptime local function round1(num) return num + (2 ^ 52 + 2 ^ 51) - (2 ^ 52 + 2 ^ 51) end local huge = 2 ^ 52 + 2 ^ 51 local function round2(num) return num + huge - huge end n = 1000000 start=uptime() for i=1,n do round1(1.234) end print("Constant ",uptime()-start) start=uptime() for i=1,n do round2(1.234) end print("Upvalue ",uptime()-start) start=uptime() for i=1,n do math.floor(1.234+0.5) end print("math.floor ",uptime()-start) Предложенный топикстартером вариант эффективнее и моего и floor()
-
1) Другого способа сравнения двух таблиц, кроме как поэлементного, не существует. Ты не можешь использовать операторы ">" и "<" для таблиц. Можешь, правда, сравнивать на "равно-не равно", но сравнение всегда вернет falsh, если это разные таблицы, даже если они содержат одинаковые элементы. Другими словами, сравниваются не таблицы, а их адреса. Так что, смирись и брутфорси.
- 2 ответа
-
- 2
-
-
-
Это обсуждение было отпочковано от темы Майнинг OpenComputer. local function round(num) return num + (2 ^ 52 + 2 ^ 51) - (2 ^ 52 + 2 ^ 51) end Вот мне просто интересно, каждый раз при вызове функции двойка будет четыре раза возводиться в степень? Не будет ли эффективнее сделать так? local huge = 2 ^ 52 + 2 ^ 51 local function round(num) return num + huge - huge end Да и подход к округлению странный. Чем не устраивает math.floor(num+0.5) ? Зачем для получения timeDifference нужно реальное время? Измерять временнЫе интервалы в OpenOS можно не пропиливая жесткий диск. И самый главный вопрос: откуда будут сыпаться биткойны и много ли уже насыпалось?
-
Добавил в свое прежнее сообщение про таймер. Так же рекомендую ознакомиться с какой либо из GUI-библиотек на форуме.
- 4 ответа
-
- 2
-
-
-
Если дело только в надписи, то sleep() нужно делать после обновления надписи: if tButtons.text == "start" then tButtons.text = "stop" refresh(i) os.sleep(120) rs.setOutput(1,15) goto continue end Если же нужно делать еще что либо в течении этих 120-ти секунд, используйте event.timer
- 4 ответа
-
- 2
-
-
-
Ребят, вы внимательно читали первый пост? Топикстартер не ищет мануалы и не спрашивает как управлять реактором. Он ищет друга по интересам. Молодой крокодил хочет завести себе друзей. OFgRc, извини, не удержался.
-
А портативный терминал не пробовал?
-
@daniilFigaSystem, мне вот просто интересно, что ты понимаешь под "ос для винды"? Винда сама по себе это операционка и ни в каких других осях не нуждается. А под чем твоя ФигаОС будет работать на опенкомпах? Там винды нет. Ну, разве что MineOS.
-
Ну, это придется собирать RAID из EEPROM
-
А как на счет такого варианта? a,b = b,a На сколько это более/менее производительней чем пример с XORом? Во всяком случае это на много понятней и занимает меньше букв, что существенно, если программа лежит в EEPROM.
- 18 ответов
-
- lua 5.3
- opencomputers
-
(и ещё 1 )
Теги:
-
В последней в реализации OpenNet уже использовались сервера. Вот только мне помнится, что я вставлял по три связанных карты в сервер. Таким образом один кубик серверной стойки объединял до двенадцати связанных карт. Ах да, я же использовал креативные сервера.
-
Крутая идея. Видосик бы не помешал.
