Можно код пожалуйста, просто первый раз вижу функцию.По поводу часов. Если уж так много функций, сдеалй из них thread, при помощи coroutine.create() и циклом их гоняй. Псевдораспаралелливание ёпт.
[1.7.10] ComputerCraft [1.74]
#2101
Написал 19.06.2013 - 16:28
#2102
Написал 19.06.2013 - 17:12
one = coroutine[paste][/paste]create( function() print("1") end)two = coroutine[paste][/paste]create( function() print("2") end)_rou = {one, two}while #_rou ~= 0 do for i = 1, #_rou do coroutine[paste][/paste]resume(_rou[i]) if coroutine[paste][/paste]status(_rou[i]) == "dead" then _rou[i] = nil end endend
#2103
Написал 19.06.2013 - 18:33
length=tonumber(tArgs[1]) or input_data("length")Функция input_data:
function input_data(text) print("Please enter "[paste][/paste][paste][/paste]text[paste][/paste][paste][/paste]":") input = read() if input == "exit" then error() end return tonumber(input) endТак вот, при вызове программы(без передачи параметров) пишется ошибка attempt to call nil, после одного вызова программы с передачей параметров, эта ошибка больше не появляется, переставил черепашку заново, все по новой. Очень странный баг, у кого какие идеи?
UPD: Появился еще один вопрос, я могу сделать ссылку на функцию(синоним), например a=turtle.forward, и потом везде писать а для передвижения? Если да, то могу ли я передавать turtle.forward как аргумент функции, и главное будет ли выполнятся turtle.forward при передаче\присвоении?
#2104
Написал 19.06.2013 - 19:26
Как ты переведешь строку в число? Например я напишу "This is string".
"This is string" != "Exit" => return tonumber("This is string") => FAIL
А пустота не может быть переведена в число.
Скинь полный код.
Ээм.UPD: Появился еще один вопрос, я могу сделать ссылку на функцию(синоним), например a=turtle.forward, и потом везде писать а для передвижения? Если да, то могу ли я передавать turtle.forward как аргумент функции, и главное будет ли выполнятся turtle.forward при передаче\присвоении?
function a()turtle[paste][/paste]forward()end??
#2105
Написал 19.06.2013 - 19:46
Это не то что вызвало ошибку, так как я вводил корректные данные(числа). А tonumber особой роли не играет, ну разве что выкинет из программы при инициализации(если ошибка), а не во время работы, то есть где-то будет for i=1,length do, короче он вместо отлова некорректных данных. Да и вобще, когда просят ввести длину, врятли пользователь введет "This is string".Зачем tonumber()?
Как ты переведешь строку в число? Например я напишу "This is string".
"This is string" != "Exit" => return tonumber("This is string") => FAIL
А пустота не может быть переведена в число.
У меня была задумка функции move(dir), аргументом передавалось(turtle.forward(), turtle.up() и тд), а в теле уже шла проверка горючего, проверка если мобы мешают пройти и тд. а потом dir. Я конечно понимаю что это можно сделать switch-ом(омг в луа его нет, тогда elseif), но я хочу написать все "красивее".Ээм.
UPD:
Вот, та часть что отвечает за ввод, остальное ну никак не может быть связано:Скинь полный код.
#2106
Написал 19.06.2013 - 20:23
Ну тогда кроме elseif ничего предложить не могу. Но с ним думаю сам разберешься. Вообще можно создать отдельную программу (допустим имя "t") специально для этого, и там в функцию (допустим имя "m") запихать весь этот мусор. Потом в начале основной программы написать os.loadAPI("t") и двигать черепашку уже с помощью t.m(dir) Но тогда уж проще православным turtle.forward()/back() и т.д. Строчку, на которой ошибка не пишет?У меня была задумка функции move(dir), аргументом передавалось(turtle.forward(), turtle.up() и тд), а в теле уже шла проверка горючего, проверка если мобы мешают пройти и тд. а потом dir. Я конечно понимаю что это можно сделать switch-ом(омг в луа его нет, тогда elseif), но я хочу написать все "красивее".
#2107
Написал 19.06.2013 - 20:31
Печаль, надеялся на гибкость луа. Хотя я уже придумал как оптимально обойтись без этого.Ну тогда кроме elseif ничего предложить не могу. Но с этим думаю сам разберешься.
Третья строка, то есть:Строчку, на которой ошибка не пишет?
length=tonumber(tArgs[1]) or input_data("length")UPD: Еще вопрос, я прочитал что если в while условие false, то он никогда не будет запущен:
Тогда как создать бесконечный цикл?(я планирую выход через брейк).If the condition is always false, the block will never be run
#2108
Написал 19.06.2013 - 21:16
#2109
Написал 19.06.2013 - 21:39
Можно поподробнее, как ты это реализовал? Простая проверка turtle.forward() ?проверка если мобы мешают пройти
#2110
Написал 19.06.2013 - 21:45
turtle.forward() возвращает true если действие выполнено. Вообще многие функции так делают. if turtle.forward() then i=i+1 Наиболее правильный подсчет пройденного расстояния. При выполнении этого отрезка программы, черепашка двигается.Можно поподробнее, как ты это реализовал? Простая проверка turtle.forward() ?
#2111
Написал 19.06.2013 - 21:49
Да точно, while проверяет на ложность, совсем голова не варит, пойду ка я спать)while true do?
Как и обещал выкладываю код функции move, возможны ошибки, так как я ее еще не тестировал.Можно поподробнее, как ты это реализовал? Простая проверка turtle.forward() ?
function move(dir) while true do if dir == "up" then if turtle[paste][/paste]up() then break end elseif dir == "down" then if turtle[paste][/paste]down() then break end elseif dir == "forward" then if turtle[paste][/paste]forward() then break end end if turtle[paste][/paste]getFuelLevel() == 0 then need_fuel() else sleep(1) end end endUPD:
Ну она то по любому двигается, но тут она может не пройти всё расстояние если столкнется с мобом\игроком. Данный код влияет только на "правильность" записи переменной i. И да end-ом не закрыл.При выполнении этого отрезка программы, черепашка двигается.
if turtle[paste][/paste]forward() theni=i+1
UPD2: Всё, теперь точно пойду спать.
#2112
Написал 20.06.2013 - 11:57
А вопрос интересный. Кто нибудь знает?а, ещё вот, где можно найти русификатор для ComputerCraft?
#2113
Написал 20.06.2013 - 12:08
Еще более интересный вопрос: Что там русифицировать?А вопрос интересный. Кто нибудь знает?а, ещё вот, где можно найти русификатор для ComputerCraft?
#2115
Написал 20.06.2013 - 12:12
Хмм...функции и апи
если черепаха[paste][/paste]видитНаверху() тогда черепаха[paste][/paste]копатьНаверху()конец
#2116
Написал 20.06.2013 - 12:26
Да, просто выводить символы кирилицей. У меня, например, только знаки вопроса вылазят.Еще более интересный вопрос: Что там русифицировать?
print("Привет")
Вот так сделать можно?
#2117
Написал 20.06.2013 - 12:32
#2118
Написал 20.06.2013 - 12:40
#2119
Написал 20.06.2013 - 13:22
#2120
Написал 20.06.2013 - 13:36
Количество пользователей, читающих эту тему: 5
0 пользователей, 2 гостей, 0 анонимных
-
Yandex