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

Простейший Miner

Рекомендуемые сообщения

Привет ребят, хочу показать вам мою первую адекватную программу для OC.(Hello world не в счет)
С lua знакомлюсь 2-й день. И мне пришла в голову идея сделать подобие карьера из BC(вроде из него)
Получился "говнокод" но рабочий.

Вот ссылка http://pastebin.com/81NPj2fi

У этого шахтера есть несколько недостатков, и все они вытекают из моего незнания.
Например если энергия кончится то он просто остановится.
Поэтому просто хотя-бы немного поведать о ивентах, например подходит к концу заряд робота.
Или инструмент сломался.
Спасибо за просмотр :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В общем для новичка код норм, но есть над чем поработать.

 

1. Добавь очистку экрана, там где она нужна:

local term = require("term")
term.clear() -- очистка экрана

2. Используй отступы, вот пример на твоём коде:

function cir()
	for i=1,3 do -- этот цикл я добавил от себя. У тебя почему-то всё было вручную вбито.
		for i=1, widthC do -- так как i - локальная переменная, всё должно корректно работать с циклом в цикле.
			mine()
		end
		robot.turnRight()
	end
	widthD = widthD-1
	widthC = widthC-1
	for i=1, widthD do
		dcir()
	end
end

3. Не пиши в ручную то что помещается в цикл - рассмотрено в коде ранее.

 

4. Используй локальные переменные вместо глобальных, когда объявляешь переменную:

--объявление переменной
local width = 0
local height = 0
local widthC = 0
local heightC = 0
local function start()
	robot.forward()
	robot.swingDown()
	robot.down()
	robot.swingDown()
	robot.down()
	robot.swingDown()
end
--использование
width = width + 1
start()

Пока что это все советы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

По поводу энергии. Возвращает количество энергии. 

 

  • computer.energy(): number

Ну и вот для получения максимального количества возможной энергии.

  • computer.maxEnergy(): number

Далее. По поводу износа предметов. Нужен "Апдейт - контроллер инвентаря". Название компонента - inventory_controller

А вот эта функция возвращает данные о выбранном слоте

  • getStackInInternalSlot(slot:number):table

Возвращается таблица с данными о предмете. Не помню какие именно данные, но метаданные(износ) там точно есть. Разбирайся, короче  ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Про отступы да, это я знаю.
А зачем нужна очистка?
Локальные переменные да, тоже понимаю
А т.е не писать в ручную то что помещается в цикл?

В смысле не так:
for i=1, 3 do r.forward()

end

r.turnLeft()

for i=1, 3 do r.forward()

end
r.turnLeft

 

а так?
for i=1, 2 do

    for i=1, 3 do r.forward()

      r.turnLeft()

end

Изменено пользователем RinKirin

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Про отступы да, это я знаю.

А зачем нужна очистка?

Локальные переменные да, тоже понимаю

А т.е не писать в ручную то что помещается в цикл?

 

В смысле не так:

for i=1, 3 do r.forward()

end

r.turnLeft()

for i=1, 3 do r.forward()

end

r.turnLeft

 

а так?

for i=1, 2 do

    for i=1, 3 do r.forward()

      r.turnLeft()

end

Да, это значительно удобнее. Символы тоже место в памяти занимают и чем их меньше тем лучше, особенно когда это не влияет на читаемость кода. И раз уж говорим о читаемости, то после do идет перенос строки.

for i=1, 3 do
  for i=1, 3 do
    r.forward()
  end
  r.turnLeft()
end 

Плюс я немного подправил пример. Тебе ведь, я так понимаю, нужно чтобы робот сделал три шага вперед, а потом повернул влево?

Изменено пользователем Pofigist

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А зачем нужна очистка?

Чтобы очищать экран от всякого мусора который мог накопится (записаться на экране). Хотя конечно это не обязательно. Но очистка экрана в начале программы как правило полезна.

 

 

 

А т.е не писать в ручную то что помещается в цикл?

Да, верно понимаешь. Это нужно чтобы повысить читаемость кода, ну и за одно оптимизации его. 

Изменено пользователем qwertyMAN

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

А зачем нужна очистка?
 

Очистка term.clear() просто очищает экран и возвращает курсор в самое начало(Верхний левый угол).

 

Кстати, я все же открыл твою программу. Было бы не плохо называть функции не rep, fin и т.д. а полностью, типа final и т.д. Еще еще встречный вопрос. Зачем создавать переменную, аля height и потом присваивать ее схожей переменной(heightC)? :/

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

цикл против тупого набора

; этот код делает ничего 10 раз
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
; этот тоже
mov ecx, 9
lp:
nop
loop lp

решай сам

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...