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

Pofigist

Пользователи
  • Публикации

    53
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные пользователем Pofigist


  1. Лазил я по стандартным либам OpenOS и понял, что ничего не понимаю. К примеру:

    component.list("screen")()

    Зачем тут вторые скобки? :/

    Но вообще вопрос вот в чем. Сталкивались ли вы с подробным описанием базовых либ OpenOS, пусть даже на английском. Хотелось бы подробненько прочитать.


  2.  

     

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

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

     

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


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

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

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

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

     

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

    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 

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


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

     

    • computer.energy(): number

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

    • computer.maxEnergy(): number

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

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

    • getStackInInternalSlot(slot:number):table

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


  5. Особо не разбирался в коде, но знаю как его улучшить.

    У тебя есть такие строки:

    function buffer.Start()
      buffer.width, buffer.height = gpu.getResolution()
    
      buffer.current = {}
      buffer.new = {}
    
      for y = 1, buffer.height do
        for x = 1, buffer.width do
          table.insert(buffer.current, 0x000000)
          table.insert(buffer.current, 0xFFFFFF)
          table.insert(buffer.current, " ")
    
          table.insert(buffer.new, 0x000000)
          table.insert(buffer.new, 0xFFFFFF)
          table.insert(buffer.new, " ")
        end
      end
    end
    

    Предлагаю их заменить на:

    function buffer.Start()
      buffer.width, buffer.height = gpu.getResolution()
    
      buffer.current = {}
      buffer.new = {}
    
      for y = 1, buffer.height do
        for x = 1, buffer.width do
          buffer.current.bac = 0x000000
          buffer.current.for = 0xFFFFFF)
          buffer.current.text = "  " --здесь находятся 2 символа. Не знаю по чему у тебя другой к этому подход.
        end
      end
    end
    

    Разбираться полностью в коде нет желания, так что извини.

     

    Но о боже, что это?

    local function CoordToIndex(x, y)
      return (buffer.width*(y-1)+x)*3-2
    end
    

    Неужели нельзя нормально пользоваться таблицей? Хранить данные вот так:

    table = {
        for = 0x000000,
        bac = 0x000000,
        text = "qwertyMAN - красавчег",
        Gagarin = "Как вы там друзья, празднуете 12 апреля?",
        new_table = {
            text = "Это таблица в таблице",
            msg = "Гравитация - сила",
            pi = 3,1415,
            black_matter = "бесконечность не предел"
        }
    }

    Но нет, ты решил на костылях использовать индексную таблицу. Нехорошо так. Иди и читай гайды о таблицах в lua. Тебе же самому будет проще программировать тогда.

    По сути у меня и была первая версия где цветам и символам была выделена отдельная таблица. Но посмотрев на одного человека(кого же?! :D ), я все же решил использовать его метод. Банально потому что Я все же думаю, что одна таблица будет меньше чем 3 таблицы в одной. Тем более что количество данных от этого не уменьшится.


  6. Проблема была решена. Ошибка закралась там где ее не ждали. Я почему-то использовал параметр высоты для преобразования координат в индекс. Хоть исправление проблемы и не говорит мне о том, почему в отрисовке появлялись клоны, но теперь меня это уже не слишком интересует. Кто ломал голову над моей проблемой(а такие врятли есть - извиняйте за мою тупость). 


  7. Все доброго времени суток. Собственно решил я заняться созданием велосипеда. Посмотрел коды одного (совсем-совсем) не известного человека и... начал писать свою либу. И все ничего... 78 строк кода написанные одним махом и не единой ошибки! Для меня это рекорд, но вот только сама программка работает как-то... Как-то не так. Проблема заключается в том, что почему-то отрисовываются копии... С объяснением тут будет сложненько потому лучше сразу скрины и саму либу.

    github: https://github.com/VladimirPruskalyow/OpenPrograms/blob/master/Library/DBuffer.lua

     

    По поводу: "Да эта либа будет сто лет отрисовывать!!1" - Я знаю, меня сейчас беспокоит не быстродействие а корректная работа.

     

    А вот это я запускал для проверки самой либы... 

    local buffer = require("DBuffer")
    
    buffer.Start()
    buffer.Square(5, 5, 10, 20, 0xFF00FF, 0xFF0000, "S")
    buffer.Draw()
    local a, b, c = buffer.Get(56, 10)
    
    io.write(a, "\n", b, "\n", c)
    

    Так же стоит отметить, что функция Get проверяет пиксель не того прямоугольника который задан, а (хз откуда взявшегося) клона. Еще я проверял Get'ом buffer.new, и там тоже обнаруживался этот прямоугольник. Соответственно проблема в записи фигуры в буфер?! Но хоть убейте, я не понимаю откуда в 9 строках кода сидит ошибка. И... еще один пунктик. Отрисовка одного пикселя данной в либе функции Set дает такой же эффект: нужный пиксель+3 клона.

     

    P.S. Скрин сделан в Эмуляторе OC, но и в обычном майнкрафте все так же. 

     

    P.S.S. Покорно прошу вашей помощи, потому что сам, хоть убейте, ошибки не вижу...

    post-18178-0-84400600-1460360597_thumb.png


  8. Надо все методы которые должна предоставлять библиотека возвратить через return. А еще убрать вторую строку. Она преждевременно просто останавливает интерпретацию кода библиотеки

    Паника! Как вернуть метод?  :unsure:


  9. local PIF = require("PIF")
    
    io.write("Введите путь к файлу: ")
    local path = io.read()
    
    local pic = PIF.inTable(path)
    
    io.write(pic[1][1], pic[1][2], pic[1][3], pic[1][4])
    io.write(pic[2][1], pic[2][2], pic[2][3], pic[2][4])
    io.write(pic[3][1], pic[3][2], pic[3][3], pic[3][4])
    io.write(pic[4][1], pic[4][2], pic[4][3], pic[4][4])
    

    Обращается к библиотеке. А сама она - вот http://pastebin.com/UcPmkWPj


  10. Собственно занялся я одной фуфней и встретился с ошибкой которую вообще не понимаю...

     

    Функция принимает путь к файлу и читает его. Начиная с шестого бита происходит запись в двухмерную таблицу. Эту же таблицу функция возвращает... Должна возвращать. Ошибка и сама функция в скриншотах. Возможно я тупой - не серчайте.

    post-18178-0-27552600-1459095330_thumb.png

    post-18178-0-23079500-1459095355_thumb.png


  11. Зайди в папку lib при помощи команды cd lib и посмотри код набрав edit color.lua

    Можешь также в этой папке набрать ls, чтобы посмотреть список других библиотек

    И в следующий раз изучи повнимательнее компоненты OpenOS - много чего интересного найдёшь просто от прогулки по системным файлам.

     

    P.S. Насколько я знаю, понятия "двухсторонние таблицы" не существует. Бывают двухмерные, трёхмерные и прочие таблицы, но двухсторонних как то не встречал.

    И да, там не две таблицы, а одна. Библиотека возвращает лишь 1 таблицу color

    И все равно мне не ясны for в этой либе, особенно второй. Что за for _, k.... "_" - что это?

     

    Плюс если я использую таблицу где кейсы простые цифры, а значения - шестнадцатиричные 0x000000 и т.д. Все равно работать будет? :D


  12. Ходил я по стандартным API OC и нашел либу colors. Там можно обратиться к таблице colors.red и получить ее значение и наоборот - ввести colors[14] и получить red. Хотелось бы узнать как такое осуществляется. Не тупо же две таблицы одна из которых инверсированная по ключам и значениям первой.


  13. Взяв виндосовский пэинт и сделав пару скринов, могу сказать что примерно у монитора 2 уровня шаг составляет 0x33. Например цвета 0x6633cc 0xff0099 и подобные.

    Ммм... Это не так уж и много. Примерно 256 цветов :/ Ну что же... Время составлять визуальную составляющую замка XD


  14. 0x000000 — это число в 16-ричной системе счисления. Начинается обязательно с 0x и должен состоять из символов 0123456789abcdefABCDEF.

    Очень полезное применение — это цвета, так как True-color имеет ровно 16777216 цветов (24 бита), а это есть 166. Символов в 16-ричной системе счисления как раз 16. Потому используется формат RRGGBB, где RR — красный, GG — зелёный, BB — синий. Например, мой любимый цвет 0x20afff.

    Но в OC же поддерживается глубина цвета 8 байт. То-есть для местных мониторов гораздо меньше цветов? Как тогда определить какие поддерживаются а какие нет? (Понятно, что система будет "округлять" цвет до нужного, но все же хотелось бы узнать какие именно используются и их количество.


  15. У меня есть основания полагать что это была твоя прога, которая была на компе у игроков, так как там было 3 пароля: Для админа и ещё 2.

    В целом очень похоже на твою прогу. Тоже открывает двери, причём у игроков было 2 двери. И кажется 2 пароля как раз открывали эти двери по отдельности. Либо я ошибаюсь и третий пароль просто выходил из проги. Уже и не помню.

     

    Как взломал не скажу, в какой то степени потому что не помню. Но факт в том что на Ctrl+Alt+C закрыть прогу нельзя было и вызывалось сообщение об этом на компе.

    Насчёт конфигов, зачем тебе их записывать куда то? Это лишнее. Просто храни в программе всё что нужно как я показал. Так будет и проще и лучше. Я всегда в своих прогах сначала прогружаю библиотеки, потом задаю переменные, и лишь потом пишу функции. И всё что хранится в переменных у меня хранится именно в верхней части кода что очень удобно. Если вдруг кто захочет изменить параметры - сможет легко их изменить, не гуляя по коду в поисках где эта переменная была присвоена (как у тебя происходит с паролем). Так что старайся все важные переменные (которые игроки могут захотеть изменить) прописывать вначале кода. Так будет реально лучше.

     

    Ты говоришь про лень, мне кажется это отмазка. Использовать 1 и 0 вместо true и false - это плохая привычка. У всех кто более менее разбирается в lua или другом языке программирования, глаз режет подобный подход. Будешь учиться писать правильно - будешь привыкать. Привыкнешь к использованию всех типов данных по назначению - будет намного проще и удобнее программировать. Я вон за 3 часа 150 строк кода написал - в итоге рабочий кликер в майнкрафте. Для меня это уже достижение в скорости, но и это не предел.

     

    Вот тебе совет. Бери чужой код и разбирайся. В оптимизации это сильно помогает. А без оптимизации обучение стоит на месте. Тут один игрок мне подсказал как круто использовать оператор %, теперь я с радостью его использую там где мог бы быть костыль. Чужой код рулит.

    По поводу конфига. Мне просто как-то привычнее, чтобы настройки находились отдельно от всего кода. Чтоб не было лишнего повода залезать в саму программу. Так же в будущем, подобно ECS, планирую свою граф. оболочку скрутить, а там уже конфиги понадобятся. Но пока что это все в планах. На деле же изучаю чтение и запись из файла.

    Кстати, есть ли какая-нибудь информация о 0x000000 формате цвета. Я конечно покопался в твоей библиотеке conv, но хотелось бы и из источника вычитать.


  16. Это случайно не тот замок что 2-3 месяца назад я взломал и поменял пароли? Там ещё 2 игрока жили в доме.

    И заприватил тоже я, если речь идёт про тот самый комп.

    Нет, это был не мой замок :D

     

    По поводу здравой критики: Я знаю про булевые переменные, но просто было лень. Мой способ чтения конфига был тем хорош, что мог прочитать любое кол-во строк и при этом все равно состоять тупо из трех строчек, но раз уж это быдлокод - новая версия! Кстати интересно было бы узнать, как такой замок можно взломать XD


  17. Всем привет.

    Я, собственно, новичок в сфере программирования и потому выкладываю свою первую программу, коих вариации наверное дофигульки много. Просьба строго оценивать саму работоспособность программы. Поехали!

     

    Lock.lua - программа блокирующая ваш компьютер и защищающая от чужих ручонок. Ctrl+Alt+C тут не поможет. И только перезапуск кнопкой в самом системнике спасет ситуацию если вы не знаете пароля. Программа способна реагировать на события, такие как: ввод верного пароля и ввод неверного пароля - при этом она может подавать редстоун-сигнал или беспроводное сетевое сообщение(см. Конфиг)

     

    Системные требования:

    ●Процессор (1 уровень)

    ●Видеокарта (1 уровень)

    ●ОЗУ (1 уровень)

    ●Жесткий диск (1 уровень)

    Интернет карта(для загрузки)

    Дополнительно:

    ●Плата на красном камне

    ●Плата беспроводной сети

    Функционал:

    1)Подает редстоун-сигнал на указанную в конфиге сторону при верно-введенном пароле.

    2)Подает редстоун-сигнал на указанную в конфиге сторону при неверном пароле.

    3)Вещает сигнал "LockSignal" и последующие:

    "True_Pass", если был введен правильный пароль.

    "Bad_Pass", если был введен неправильный пароль.

    "Error", если вдруг что  :rolleyes: 

    Конфиг(etc/Lock.cfg):

    Конфиг настроек достаточно прост. Ниже перечислены описания строк и их возможные значения.

     

    password=1234 - основной пароль. Теперь может состоять только из цифр!

    adminPass=228228 - админский пароль состоящий из цифр. На данный момент нужен лишь на тот случай, когда основной был забыт.

    sound=true - включает звуковые оповещения, если стоит true.

    redstone=true - Если стоит true, то в системе должна быть плата на красном камне.

    RedCorr=3 - работает лишь если redstone=true и подает сигнал на сторону 3, если был введен правильный пароль.

    RedIncor=2 -работает лишь если redstone=true и подает сигнал на сторону 2, если был введен неправильный пароль.

    network=false - При true в системе нужна беспроводная сетевая плата для корректной работы.

    port=512 - номер порта на который будут распространяться сигналы от программы.

     

    Стороны и их числовые эквиваленты(для RedCorr и RedIncor):

    Низ - 0

    Верх - 1

    Тыл - 2

    Перед - 3

    Право - 4

    Лево - 5

     

    Установка:

    Простая загрузочка с пастебина.

    pastebin get -f zitiaarN Lock.lua

     

    Сам код: http://pastebin.com/zitiaarN

     

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

     

    Версии: 

    1.0 - основа основ.

    1.1 - исправлен ошибка, когда первый запуск заканчивался ошибкой, так как создавался файл конфига.

    1.2 - более читабельный конфиг.

    1.3 - добавлены звуковые оповещения при вводе верного и неверного пароля.

     

    P.S. Не вижу особого смысла в скриншотах, так как пока что используется стандартный консольный вывод(Графодрочеры, пока что вас удовлетворить не смогу. :с )

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