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

Zer0Galaxy

Гуру
  • Публикации

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

  • Посещение

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

    189

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


  1.  

     

    в этот момент происходит считывание файла-скриншота с диска и восстановление той картинки, которая была отображена на рабочем столе
    т.е. ты хочешь сказать, что когда рабочий стол не активен  он полностью замораживается? А если с момента переключения на нем что то изменилось? Или приложения, открытые на неактивном столе, тоже приостанавливаются?

  2. — Вы имеете право хранить молчание. Все что вы скажете, может быть использовано против вас.

    — Арифмометр.

    — Что арифмометр?

    — Используйте против меня арифмометр.

    (старый анекдот)

     

    Что же это за штука такая, арифмометр? Немногие помнят, что до появления персональных компьютеров и даже до электронных калькуляторов, отечественной промышленностью выпускались механические вычислители – арифмометры. Наиболее массовыми представителями этих механизмов были арифмометр «Феликс» и его последующая модификация «Феликс-М», именуемые в народе «Железный Феликс».

     

    %D0%B1%D0%B0%D1%80%D0%B0%D1%85%D0%BB%D0%

     

    Позволяет эта машинка складывать, вычитать, умножать и делить, а при должной сноровке – извлекать квадратные корни.

     

    И хотя удовольствие от работы с реальным арифмометром не идет ни в какое сравнение с его виртуальной копией, представляю Вашему вниманию эмулятор данного устройства.

     

     

    g2PHPCT.png

     

    Как работать на таком арифмометре, расписывать не буду. Желающие найдут в Интернете массу информацию на эту тему.

     

    Скачать эмулятор можно по ссылке:  pastebin get HFbiHejB felix_m.lua

    Для эмулятора Вам потребуется монитор третьего уровня и библиотека forms.

    • Нравится 9

  3.  

     

    Может как-нибудь доработаю эту библиотеку
    Предлагаю хранить байты не в строке, а в таблице чисел. По восемь байт на число (или сколько там?). При этом чтобы вставить/извлечь байт перелопачивать придется не всю длиннющую строку, а один number.
    • Нравится 2

  4. На мой взгляд, разрешение ОС-монитора не такое большое, чтобы делить его на окна.

    Если бы я стал писать многозадачную операционку, разделение экрана я бы реализовал не как в Windows, а как в Androidе. Т.е. из всех запущенных приложение только одно захватывает экран, оно же обрабатывает события мыши и клавы. Остальные приложения крутятся в фоне и если что-то пишут, то на свой виртуальный экран.

    Но, это лишь мое скромное мнение.

    • Нравится 6

  5. У дебаги есть функция:

     

     

    • setBlocks(x0: number, y0:number, z0:number, x1: number, y1:number, z1:number, id:number, meta:number)

    Изменяет все блоки в области, определенной двумя угловыми точками: (x0, y0, z0) и (x1, y1, z1).

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

     

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

    • Нравится 1

  6.  

     

    Нужно написать функции getComponent и freeComponent, которые будут разрешать коллизии компонент. ( когда два окна требуют одну и ту же компоненту ) Функции должны распределять компоненты одинакового типа между окнами. Например если есть 2 редстоун-адаптера и 2 окна потребовали компонент "redstone", то каждое окно должно получить свой редстоун-адаптер  
    local components={} -- тут будем хранить занятые компоненты
    local getComponent = function(window, componentType, componentAddress)
        --[[
    window - это окно, которое потребовало компоненту
    componentType - тип компоненты ( игнорировать GPU )
    componentAddress - адрес требуемой компоненты (этот параметр, на мой взгляд, не нужен)
        ]]
    	
    	for address in component.list(componentType) do -- здесь и далее вызываем родные функции component, а не подмену
    	
          if components[address]==nil then -- если компонент не занят, занимаем его
    	    components[address]=window
    	  end
    	  
    	  if components[address]==window then -- если компонент занят этим окном,
    	    return component.proxy(address)  -- возвращаем его прокси
    	  end
    	  
    	end
        -- вернем nil, если свободных компонент не найдено
    end
     
    local freeComponent = function(componentAddress)
        -- пометить компонент <componentAddress> как незанятый
    	components[componentAddress]=nil
    end 

    как то так?


  7. 1) Используй io.open(filename), чтобы открыть файл. Например:

    file=io.open("MyFile")
    

    Функция вернет хедер файла, если он существует или nil если нет.

     

    2) Если файл существует, используй функцию file:read("*a"), чтобы прочитать содержимое файла

    text=file:read("*a")
    

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

    Не забудь закрыть открытый файл file:close(), даже если он пустой. Это правило хорошего тона.

     

    3) Если файл не существует или файл пустой, используй io.open(filename,"w"), чтобы открыть файл на запись

    file=io.open("MyFile","w")
    

    Функция вернет хедер файла или nil если файл по каким то причинам не может быть создан.

     

    4) Используй функцию file:write(data), чтобы записать данные в файл

    file:write("NewData")

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

    • Нравится 5

  8.  

     

    Нужно написать функции getComponent и freeComponent, которые будут разрешать коллизии компонент. ( когда два окна требуют одну и ту же компоненту )
    Эти функции  будут вызываться приложением или системой?

  9. * Кооперативная многозадачность потребует обязательной доработки запускаемых программ. А в случае подвисания одной из программ подвиснет вся система.

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

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

    Оборудование доступно программам через объект component. Если система подменит этот объект своим, то она сможет разруливать аппаратные коллизии. Например, если одна программа использует редстоун-карту, то другой программе можно не давать к ней доступ.

    • Нравится 1

  10. Можно разделить функцию на две:

    local function kek1()
      print('Привет') -- print надо выполнить один раз
    end
    
    local function kek2()
      if rs.getBundledInput(1,1) > 0 then
        rs.setBundledOutput(1,5,255)
      else
        rs.setBundledOutput(1,5,0)
      end
    end
     
    kek1()
    while true do
      kek2()
      os.sleep(0.5)
    end
    
    

    А можно воспользоваться флагом

    local flag=true
    
    local function kek()
      if flag then
        print('Привет') -- print надо выполнить один раз
        flag=false
      end
      if rs.getBundledInput(1,1) > 0 then
        rs.setBundledOutput(1,5,255)
      else
        rs.setBundledOutput(1,5,0)
      end
    end
     
    while true do
      kek()
      os.sleep(0.5)
    end
    
    • Нравится 1

  11. А как load задать окружение, и как ей пользоваться?

    1) Создаешь каким либо образом строку, содержащую луа-код

    script="a=1 b=2 print(a+b+с)"
    

    2) создаешь окружение выполнения этого кода. Окружение это просто таблица с функциями и переменными, которые могут быть использованы твоим луа-кодом. В примере строчкой выше неопределенными являются функция print и переменная c. Определим их в окружении.

    env={}
    env.c=3
    env.print=print 

    Если окружение оставить пустым (равняется nil), будет использовано глобальное окружение. Т.е. твоему коду будут доступны все определенные на данный момент глобальные функции и переменные.

     

    3) вызываешь функцию load

    code, reason = load(script, "", "", env) 
    

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

    Первое возвращаемое значение - функция, исполняющая код. Если оно равно nil, значит на этапе компиляции возникла ошибка. Сообщение об ошибке содержится во втором возвращаемом значении.

     

    4) проверяешь результат компиляции и выполняешь скомпилированный код

    if code then
      result=code()
    else
      print(reason)
    end
    • Нравится 2
×
×
  • Создать...