[1.7.10] ComputerCraft [1.74]
#2741
Написал 01.03.2014 - 08:50
#2742
Написал 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
Написал 01.03.2014 - 16:11
#2744
Написал 01.03.2014 - 17:02
Данная программа нет. Надо доводить до ума.А ломать древесину и листву перед установкой стекла она будет?
#2745
Написал 01.03.2014 - 19:50
Будет. Это заложено в Robust Turtle APIА ломать древесину и листву перед установкой стекла она будет?
#2746
Написал 01.03.2014 - 20:46
#2747
Написал 01.03.2014 - 23:11
#2748
Написал 01.03.2014 - 23:19
#2749
Написал 01.03.2014 - 23:33
#2750
Написал 02.03.2014 - 18:15
#2751
Написал 03.03.2014 - 02:19
Отличный код в плане удобочитаемости и устойчивости от неправильных действий. +Лично для меня стало открытием то что функцию можно вызывать из ее (функции) тела.На ванильном CC http://pastebin.com/Bj3M0xsP Ставить прямо под ноду. Все переменные в начале.
#2752
Написал 03.03.2014 - 09:07
#2753
Написал 04.03.2014 - 02:22
В общем понятии рекурсия для меня не открытие, но я не встречал ранее в просмотренных мною программах вызова функции из ее тела. Сам сталкивался ранее с ситуациями, где бы очень пригодилось это знание, но выходил из них менее красивыми методами, используя циклы.Рекурсия для тебя открытие? Наверное, стоит почитать основы программирования.
#2754
Написал 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
Написал 08.03.2014 - 17:45
#2756
Написал 09.03.2014 - 21:45
#2757
Написал 09.03.2014 - 21:57
#2758
Написал 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
Написал 30.03.2014 - 03:28
#2760
Написал 31.03.2014 - 23:18
Для форумчан можно просто Олег.
Количество пользователей, читающих эту тему: 5
0 пользователей, 5 гостей, 0 анонимных