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

JaggerDer

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

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

  • Посещение

  • Победитель дней

    6

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


  1. Хочу реализовать в своей программке "кое что". Мне нужно распараллелить энное число подобных инструкций id, msg = rednet.receive(). Как это сделать с помощью coroutine?

    Я просто хочу научиться использовать coroutine. Сколько не втыкал в это, понять не могу, как оно работает.


  2. Кстати, когда я узнал о таких шаблонах наворотил такую шнягу:
     

        arg = { ... }
         
        local function man(algo)
         for v in string.gmatch(algo, "%a") do
          if (v == "l") then turtle.turnLeft()
          elseif (v == "r") then turtle.turnRight()
          elseif (v == "f") then turtle.forward()
          elseif (v == "u") then turtle.up()
          elseif (v == "d") then turtle.down()
          elseif (v == "b") then turtle.back()
          elseif (v == "p") then print("lol")
          else print("Impossible algorithm.") return false
          end
         
         end
         
         return true
        end
         
        man(tostring(arg[1]))
    
    
    

    Мне такая штука показалась достаточно удобна. Просто задаем алгоритм телодвижений черепашки одной строкой, например fffllffrfffb.

    • Нравится 1

  3. Итак, добавил пару штук в свой API:

     -Можно сохранять слой в файл или же загружать из файла(буду благодарен если кто подскажет как можно сжимать информацию о пикселах слоев).

     -Теперь можно сдвигать слои по x, y(не путать со сдвигом по z).


  4. Это что-то вроде графического редактора для CC?

    Можно будет сохранять и загружать готовые рисунки?

    Есть ли ограничение на размер рисунка и количество слоев?

    Нет, это не графический редактор. Я хотел сделать библиотеку для работы со слоями куда можно записать и откуда можно прочитать информацию о тексте, цвете - нужно было для чего то, т.к. в СС нельзя получить эту инфу, только нарисовать.

     

    Размер любого слоя ограничен самим окном СС компьютера, можно сделать меньше, но не больше(вроде можно задать размер при создании слоя). А кол-во слоев вроде неограниченное(ну насколько памяти хватит).


  5. Смысл

    Написал программку из двух файлов для CC1.6 которая позволяет создавать слои, на которых можно "рисовать".
    Пока реализовал основной задуманный функционал, позже напишу еще пару плюшек.

    Что есть:
    -Независимые слои
    -Псевдопрозрачность
    -Базовые функции для операций над слоями

    Что хочу добавить:
    -Удаление всех пикселов слоя, не задевая вышестоящих слоев.
    -Выборачная отрисовка пикселов слоев.
    -Функционал для рисования(линии, боксы и т.п) <частично реализовано>
    -Возможность заблокировать, скрыть, перемещать пикселы слоя.
     

    Описание функций layerobj

    -Init(anWidth, anHeight, asName, abVis, abLck) - инициализирует объект и позволяет задать начальные параметры, что то вроде конструктора в ООП:
     -anWidth - ширина матрицы слоя.
     -anHeight - высота матрицы слоя.
     -asName - название слоя.
     -abVis - не используется.
     -abLck - не используется.
    -Remove() - деструктор.
    -SetPixel(anX, anY, asText, anTextColor, anColor) - записывает символ\цвет символа\цвет фона в соотв. матрицы:
     -anX - ордината точки.
     -anY - абцисса точки.
     -asText - символ или строка, в случае со строкой все ее символы принимают цвет и фон первого.
     -anTextColor - цвет символа.
     -anColor - цвет фона.
    -GetParameters() - возвращает основные параметры слоя: <Обновлено>
     -sName - имя слоя.
     -nWidth - ширина матрицы слоя.
     -nHeight - высота матрицы слоя.

     -nShiftX, nShiftY

    -Shift(anShiftX, anShiftY) - установка смещения слоя по X и Y соответственно. <Добавлено>
    -GetPixel(anX, anY) - возвращает информацию о пиксле по координатам anX и anY:
     -sText - символ.
     -nTextColor - цвет символа.
     -nColor - цвет фона.
    -ClearLayer() - очищает все матрицы слоя.
     

    Описание функций layermanager

    -RegisterLayer(aloLayer) - регестрирует слой в очереди для отрисовки, возвращает его ID.
    -UnregisteLayer(anID) - удаляет слой из очереди по ID.
    -DrawLayers() - отрисовывает поочередно все слои.
    -DrawLayer(aloLayer) - рисует определенный слой.
    -ShiftLayer(anID, asDir, anStep) - меняет ID слоя, а собственно и очередь прорисовки:
     -anID - смещаемый слой.
     -asDir - направление смещения(left и right)
     -anStep - на сколько ед. сместить слой.
    -LayerClick(anX, anY) - возвращает название слоя и инф-ию о пикселе по заданным координатам:
     -sName - ...
     -sText - ...
     -nTextColor - ...
     -nColor - ...
    -Info() - дебаговая информация.
    -Ряд пока незадействованных функций. <Удалено/Перемещено>

     

    LAPIShell

    Содержит функции рисования линии и бокса:

     -DrawLine(anX1, anY1, anX2, anY2, asChar, anCharColor, anColor, aloLayer) <Добавлено>

     -DrawBox(anX1, anY1, anX2, anY2, asChar, anCharColor, anColor, aloLayer) <Добавлено>

     

    FIO

    Содержит функции для сохранения\загрузки слоя:

     -SaveToFile(asFilename, aloLayer) <Добавлено>

     -ReadFromFile(asFilename, aloLayer) <Добавлено>
     

    Установка

    Качаем с pastebin на компьютер файл: http://pastebin.com/Nekd2WRU. Используем с помощью os.loadAPI.

    Для тех кто зачем-то будет читать мой код:
    Аргументы функций: a<type>VarName
    Переменная: <type>VarName
    Временная переменная: _<type>VarName
    <type> - просто сокаращения: n - number, s - string и т.д
    Все это дело нужно было только чтобы не путаться с переменными(было такое).

    • Нравится 3

  6. Что это?

    Как то гуляя по бескрайней пустоши ютуба увидал видео с ОС для СС. Там было всплывающее меню, которое выползает при нажатии ПКМ; я неплохо вдохновился(аж так что довел дело до конца, что редко со мной бывает) и написал свой "велосипед" - ведь наверняка уже таких штук много.

    Сам не знаю где это дело может пригодится, но это моя первая законченная и работающая писанина на CC/Lua - я доволен :)

     

    Описание.

    AddItem(id, text, func) - добавляет пункт меню, где

    id - идентификатор пункта;

    text - текст, который выведется в меню;

    func - выполняемая функция, при щелчке ЛКМ на пункте.

     

    RemoveItem(id) - удаляет пункт id из меню.

     

    Update() - обрабатывает меню(не могу нормально сформулировать).

     

    В самом коде имеются три константы:

    -MAXCHAR - максимальная длина текста пункта меню,

    -MAXITEMS - максимальное кол-во пунктов меню,

    -BLINKTIME - сколько времени работает подсветка выбранного пункта.

     

    Как использовать.

    Для начала нужно скачать два файла с pastebin: rcmenu и utils

    (Ссылки на них ниже)

     

    Затем создается отдельный файл, например test, а в нем пишем примерно следующее:

     

    os.loadAPI("rcmenu")
      info = function(a, b)
       return function() print(a+b) end
      end
      rcmenu.AddItem(1, "Hello", function() print("Hello, world!") end)
      rcmenu.AddItem(2, "5+10", info(5, 10))
    
    while true do
      rcmenu.Update()
    end

    Где взять.

    Взять можно на Pastebin:

    -rcmenu: http://pastebin.com/MMnNpjvE

    -utils: http://pastebin.com/azd4ZR3h

     

    Вроде все.

    Мне бы еще хотелось, чтобы меню после закрытия восстанавливало фон. Пока не знаю, что с этим можно сделать.

     

    P.S. За английский просьба не бить. Пользовался translate.google.ru.

    • Нравится 2
×
×
  • Создать...