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


Фотография

[1.7.10] ComputerCraft [1.74]


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

#2101 Xytabich

Xytabich

    Странник

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

Написал 19.06.2013 - 16:28

По поводу часов. Если уж так много функций, сдеалй из них thread, при помощи coroutine.create() и циклом их гоняй. Псевдораспаралелливание ёпт.

Можно код пожалуйста, просто первый раз вижу функцию.

#2102 Apokalypsys

Apokalypsys

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

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

Написал 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 Ukrainian

Ukrainian

    Странник

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

Написал 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 Cyxapuk

Cyxapuk

     

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

Написал 19.06.2013 - 19:26

Скрытый текст

Зачем tonumber()?
Как ты переведешь строку в число? Например я напишу "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
??

V6xCzSN.png


#2105 Ukrainian

Ukrainian

    Странник

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

Написал 19.06.2013 - 19:46

Зачем tonumber()?
Как ты переведешь строку в число? Например я напишу "This is string".
"This is string" != "Exit" => return tonumber("This is string") => FAIL
А пустота не может быть переведена в число.

Это не то что вызвало ошибку, так как я вводил корректные данные(числа). А tonumber особой роли не играет, ну разве что выкинет из программы при инициализации(если ошибка), а не во время работы, то есть где-то будет for i=1,length do, короче он вместо отлова некорректных данных. Да и вобще, когда просят ввести длину, врятли пользователь введет "This is string".

Ээм.

У меня была задумка функции move(dir), аргументом передавалось(turtle.forward(), turtle.up() и тд), а в теле уже шла проверка горючего, проверка если мобы мешают пройти и тд. а потом dir. Я конечно понимаю что это можно сделать switch-ом(омг в луа его нет, тогда elseif), но я хочу написать все "красивее".
UPD:

Скинь полный код.

Вот, та часть что отвечает за ввод, остальное ну никак не может быть связано:
Скрытый текст


#2106 Cyxapuk

Cyxapuk

     

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

Написал 19.06.2013 - 20:23

У меня была задумка функции move(dir), аргументом передавалось(turtle.forward(), turtle.up() и тд), а в теле уже шла проверка горючего, проверка если мобы мешают пройти и тд. а потом dir. Я конечно понимаю что это можно сделать switch-ом(омг в луа его нет, тогда elseif), но я хочу написать все "красивее".

Ну тогда кроме elseif ничего предложить не могу. Но с ним думаю сам разберешься. Вообще можно создать отдельную программу (допустим имя "t") специально для этого, и там в функцию (допустим имя "m") запихать весь этот мусор. Потом в начале основной программы написать os.loadAPI("t") и двигать черепашку уже с помощью t.m(dir) Но тогда уж проще православным turtle.forward()/back() и т.д.  Строчку, на которой ошибка не пишет?

V6xCzSN.png


#2107 Ukrainian

Ukrainian

    Странник

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

Написал 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 Cyxapuk

Cyxapuk

     

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

Написал 19.06.2013 - 21:16

while true do?

V6xCzSN.png


#2109 RP2Crafter

RP2Crafter

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

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

Написал 19.06.2013 - 21:39

проверка если мобы мешают пройти

Можно поподробнее, как ты это реализовал? Простая проверка turtle.forward() ?

Изображение


#2110 Dartolomey

Dartolomey

    Странник

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

Написал 19.06.2013 - 21:45

Можно поподробнее, как ты это реализовал? Простая проверка turtle.forward() ?

turtle.forward() возвращает true если действие выполнено. Вообще многие функции так делают. if turtle.forward() then i=i+1 Наиболее правильный подсчет пройденного расстояния. При выполнении этого отрезка программы, черепашка двигается.

#2111 Ukrainian

Ukrainian

    Странник

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

Написал 19.06.2013 - 21:49

while true do?

Да точно, while проверяет на ложность, совсем голова не варит, пойду ка я спать)

Можно поподробнее, как ты это реализовал? Простая проверка turtle.forward() ?

Как и обещал выкладываю код функции move, возможны ошибки, так как я ее еще не тестировал.
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	end
UPD:

При выполнении этого отрезка программы, черепашка двигается.

if turtle[paste][/paste]forward() theni=i+1

Ну она то по любому двигается, но тут она может не пройти всё расстояние если столкнется с мобом\игроком. Данный код влияет только на "правильность" записи переменной i. И да end-ом не закрыл.
UPD2: Всё, теперь точно пойду спать.

#2112 Dimus

Dimus

    Странник

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

Написал 20.06.2013 - 11:57

а, ещё вот, где можно найти русификатор для ComputerCraft?

А вопрос интересный. Кто нибудь знает?

#2113 RP2Crafter

RP2Crafter

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

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

Написал 20.06.2013 - 12:08

а, ещё вот, где можно найти русификатор для ComputerCraft?

А вопрос интересный. Кто нибудь знает?

Еще более интересный вопрос: Что там русифицировать?

Изображение


#2114 Storm Whisper

Storm Whisper

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

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

Написал 20.06.2013 - 12:10

функции и апи -_-

#2115 RP2Crafter

RP2Crafter

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

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

Написал 20.06.2013 - 12:12

функции и апи -_-

Хмм...
если черепаха[paste][/paste]видитНаверху() тогда черепаха[paste][/paste]копатьНаверху()конец

Изображение


#2116 Dimus

Dimus

    Странник

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

Написал 20.06.2013 - 12:26

Еще более интересный вопрос: Что там русифицировать?

Да, просто выводить символы кирилицей. У меня, например, только знаки вопроса вылазят.
print("Привет")

Вот так сделать можно?

#2117 RP2Crafter

RP2Crafter

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

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

Написал 20.06.2013 - 12:32

Обычный русификатор для русского ввода стоит?

Изображение


#2118 Dimus

Dimus

    Странник

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

Написал 20.06.2013 - 12:40

Да, весь майнкрафт на русском и только компьютеркрафт со знаками "?????"А что за руссификатор?

#2119 Storm Whisper

Storm Whisper

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

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

Написал 20.06.2013 - 13:22

При вводе "привет" будет выводиться "п р и в е т " или "привет ", точно не знаю. Насколько я знаю, лекарства этому нет.

#2120 Dimus

Dimus

    Странник

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

Написал 20.06.2013 - 13:36

Если бы! У меня при вводе "Привет" появляется "??????????"Может старая версия крафта?


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

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