[1.7.10] ComputerCraft [1.74]
#2741
Posted 01.03.2014 - 08:50
#2742
Posted 01.03.2014 - 14:18
Не знаю, что такое ноды таумкрафта, но вот что то набросалПрошу программу для черепашки. Цель-захват нод таумкрафта в банку.
-- Для работы программы требуется Robust Turtle API --(см[paste][/paste] http://www[paste][/paste]computercraft[paste][/paste]info/wiki/Robust_Turtle_API)-- Черепаху устанавливаем на один слой ниже ноды лицом к нейglass=1 --Стекло кладем в первый слотtile=2 -- плитку - во второйt[paste][/paste]place(glass) --ставим стекло под нодуt[paste][/paste]right() t[paste][/paste]forward()--ставим стекло вокруг нодыfor i=1,3 do t[paste][/paste]up() for j=1,4 do t[paste][/paste]left() for k=1,2 do t[paste][/paste]placeDown(glass) t[paste][/paste]forward() end end end--ставим стекло на нодуt[paste][/paste]back() t[paste][/paste]left() t[paste][/paste]forward()t[paste][/paste]placeDown(glass)--ставим плиткуt[paste][/paste]up() t[paste][/paste]placeDown(tile)t[paste][/paste]back() t[paste][/paste]right() t[paste][/paste]forward() for j=1,4 do t[paste][/paste]left() for k=1,2 do t[paste][/paste]placeDown(tile) t[paste][/paste]forward() end endЗаправлять черепаху ручками. Программу не тестировал, поэтому вопросы будут. Обращайся.
#2743
Posted 01.03.2014 - 16:11
#2744
Posted 01.03.2014 - 17:02
Данная программа нет. Надо доводить до ума.А ломать древесину и листву перед установкой стекла она будет?
#2745
Posted 01.03.2014 - 19:50
Будет. Это заложено в Robust Turtle APIА ломать древесину и листву перед установкой стекла она будет?
#2746
Posted 01.03.2014 - 20:46
#2747
Posted 01.03.2014 - 23:11
#2748
Posted 01.03.2014 - 23:19
#2749
Posted 01.03.2014 - 23:33
#2750
Posted 02.03.2014 - 18:15
#2751
Posted 03.03.2014 - 02:19
Отличный код в плане удобочитаемости и устойчивости от неправильных действий. +Лично для меня стало открытием то что функцию можно вызывать из ее (функции) тела.На ванильном CC http://pastebin.com/Bj3M0xsP Ставить прямо под ноду. Все переменные в начале.
#2752
Posted 03.03.2014 - 09:07
#2753
Posted 04.03.2014 - 02:22
В общем понятии рекурсия для меня не открытие, но я не встречал ранее в просмотренных мною программах вызова функции из ее тела. Сам сталкивался ранее с ситуациями, где бы очень пригодилось это знание, но выходил из них менее красивыми методами, используя циклы.Рекурсия для тебя открытие? Наверное, стоит почитать основы программирования.
#2754
Posted 07.03.2014 - 13:03
На самом деле, как раз таки боле эффективное решение - развернуть рекурсию в цикл.но выходил из них менее красивыми методами, используя циклы.
Естественно, есть случаи где сделать это затруднительно, и приходится использовать рекурсию.
Кстати, таблица может содержать в себе себя, а функция может принять себя в качестве собственного аргумента. А еще таблицу можно использовать как функцию (функтор), а функцию как таблицу (ну почти).
---
Я тут заглянул в гайд по луа, и обнаружил несколько недочетов:
[*] nil - это не значение, а тип переменной.
[*] table - не массив. Это таблица. А уже использовать ее можно и как массив, и как ассоциативный массив, и как структуры, объекты. Она же используется в качестве метатаблиц и пространств имен.
Так же с ее помощью реализуют ссылки, списки, очереди, и другие структуры данных.
[*] Индеком таблицы может быть любой тип за исключением nil. Даже функции и другие таблицы.
Помимо этого, строковые индексы могут содержать пробелы в любом количестве, или даже не содержать ничего кроме пробела. Если сказать более обще, любая строка в принципе может быть индексом.
[*] Забыт унарный оператор #. Он возвращает длину для строк и размер для таблиц с числовыми индексами без дыр.
[*] Забыто elseif для условий.
[*] Забыта такая важная вешь, как local. По умолчанию все переменные в луа - глобальные. Даже те, которые инициированы внутри функций или других файлах.
[*] Забыт цикл for in do end.
[*] Казалось бы нонсенс, но функции в lua не имеют имени.
Все дело в том, что функции в lua - так называемые объекты первого класса. С ними можно выполнять такие же действия, как и с другими значениями. Т.е. их можно присваивать, передавать в качестве аргумента в функцию (и возвращать тоже), и использовать их в качестве индексов таблицы.
Мы вполне можем сделать так:
function foo() endbar = foobar()Сама функция при этом остается анонимной (безымянной), просто на нее указывает переменная, которая как раз и обладает именем.
function foo() end-- это равноценноfoo = function() end[*]Есть еще множество вещей, вроде метатаблиц (metatable), метасобытий (metaevent), окружения (enviroment), объектно ориентированные фичи, замыкания, хуки, и т.д.
Не уверен только, что все из этого доступно в CC.
Из более общего пропущены комментарии, разные способы написания строковых литералов, и переменное число аргументов функций.
[/list]
Для форумчан можно просто Олег.
#2755
Posted 08.03.2014 - 17:45
#2756
Posted 09.03.2014 - 21:45
#2757
Posted 09.03.2014 - 21:57
#2758
Posted 10.03.2014 - 16:07
Наоборот. Скорее всего в СС Lua урезан в сравнении с чистой версией. Просто документацию читали невнимательно, там все это есть.Получается, луа в CC более развит, чем по документации?
Кстати, еще не известно, какой версии Lua используется в СС. 5.1 или 5.2. А возможно и более старые.
Добавлено спустя 51 минуту 23 секунды:
Итак, немного покопался в CC последней версии. Он использует Добавлено спустя 5 минут 27 секунд:
С разбегу не достучался до функции require, таблицам debug, package, зато есть coroutine.
Добавлено спустя 34 минуты 5 секунд:
Полный список функций и библиотек доступных в Lua в CC 1.58:
Для форумчан можно просто Олег.
#2759
Posted 30.03.2014 - 03:28
#2760
Posted 31.03.2014 - 23:18
Для форумчан можно просто Олег.
4 user(s) are reading this topic
0 members, 4 guests, 0 anonymous users