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

Zer0Galaxy

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

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

  • Посещение

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

    189

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


  1. Когда-то давным-давно, когда в майне были только компьютеркрафтовые компы, а метанума и в помине не было, реализовывал я RSA-подобный алгоритм похожим образом. Тогда помню была проблема не с TLWY, а с банальным переполнением, тем не менее ее как то удалось решить. Если в руинах старого хлама найду тот жесткий диск, выложу.


  2.  

    Привет! Поясните как должен выглядеть вызов функции по кнопке.

     

    Так

     

    Form:addButton(20,5,"Open file",function() Моя функция() end)
    

    или так?

    Form:addButton(20,5,"Open file", Моя функция())
    

    Вот так:

    function My_func()
    -- что-то там
    end
    
    Form:addButton(20,5,"Open file", My_func) -- без скобочек
    

    Но можно и анонимной функцией

    Form:addButton(20,5,"Open file", function () -- что-то там -- end)
    

  3.  

     

    Все уже написано. Даже для мода на майнкрафт. Я разочаровался :с И что, нет никаких нереализованных проблем? Серьезно?
      Я как-то порывался сделать игру - симулятор хакера на подобии Uplink. Только многопользовательскую и ориентированную на Луа, разумеется. Хочешь - сделай.

  4.   if errorCode == 0 then
        return "Code is valid"
      elseif errorCode > 0 then
        return "Error: Opening bracket(s) missing"
      elseif errorCode < 0 then
        return "Error: Closing bracket(s) missing"
      else
        return "Error: Unknown error"
      end
    

    Вспомнился анекдот:

     

     

    Если выпадет орел, идем пить пиво, если решка – идем в кино, а если монета встанет на ребро, то пойдем учиться.
    • Нравится 5
    • Ха-ха 1
    • Грусть 1

  5. Короутины сами по себе - довольно сложная для понимания тема (по сравнению с фанкшионами, к примеру). А тут так мало букв использовано для описания библиотеки. Попытался вкурить, что значит "проскочить" несколько подпрограмм и зачем это нужно. Не получилось. Видать, старею :(

    • Нравится 1

  6. ссылка поломались

    Держателем опеннета на облаке С9 был Крутой. Похоже он удалился с облака или его удалили. В любом случае, кому интересна эта тема, рекомендую не ворошить дела давно минувших дней, а написать свою Сеть.


  7. Её функции возможно переделать так, что бы название файла, порта вбивать в программе? Да и вообще что бы при вызове функции это всё срабатывало и не нужно было в терминале вбивать?  

     

    (Очень хочу, но не позволяет барьер написания)

    Вопрос не совсем понятен. О какой программе и функции идет речь? Можно пример?


  8. Параметр state отвечает за непосредственное отображение брайль-пикселя, т.е. будет ли вообще этот брайль-пиксель рисоваться на экране. А color - это цвет текущей группы из 2x4 брайль-пикселей (обычный цвет текста пикселя gpu)

    Это я, в общем то, понял из твоей замечательной документации (не сарказм, дока реально отпадная) .  Но вопрос мой о другом. Вот нарисовал я на холсте какой-то рисунок и хочу его часть или даже весь стереть. Если весь, то вопросов нет - стираю попиксельно любым цветом (хотя функция brailleCanvas:clear не помешала бы).

     

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


  9. У меня вопрос по виджету brailleCanvas, точнее по его функции setint x, int y, boolean state, int color )

    Какую информационную нагрузку несет значение параметра color в случае, когда state=false?

    Дело в том, что в текущей реализации виджета, для снятия установленного пикселя необходимо помнить цвета соседних пикселей. В противном случае они могут измениться. Если же вызвать функцию set без параметра color, получаем ошибку.

     

    И еще: 

    Какой есть способ выхода из container:startEventHandling() ?

    Неужели Ctrl + Alt + C единственный способ выхода из программы?


  10. Минус её, на больших скоростях физика не работает, топорно очень, примитивно.

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

    Есть такое. Сказывается квантование времени. Также очень маленькие предметы даже на малых скоростях не всегда правильно взаимодействуют

    • Нравится 1

  11. А нельзя ли функции перемещения u(), d(), fw(), bw() сделать с параметром на сколько блоков переместиться?

     И еще, рекурсия в данном случае не самое лучшее решение.

    function robolib.u()
      while r.detectUp() do
        r.swingUp()
      end
      if r.up() then
        if waySw then
          way = way.."U"
        end
      else
        robolib.u()
      end
      z = z + 1
    end
    

  12. Сначала глянул на новую аву photo-thumb-16095.jpg?_r=1509333782

    Затем прочитал этот абзац:

     

     

    Но всё осложняется тем, что у нас нет нЕ функций, нЕ циклов, нЕ умножения, нЕ деления, нЕ функций возведения модуля, нЕ даже возможности указывать свои произвольные условия

    Потом подумал: "У Квертика что ли новая ава?"

    Потом глянул, кто автор темы и всё понял.

    Кверти, ты когда правильно НЕ / НИ писать научишься?

     

    А за игрушку спасибо. Всегда любил подобные игры. А эта, похоже, и под Андроид есть, хоть и платная. Надо поискать халяву.

    • Нравится 3

  13. Сравнение скорости обращения к элементам обычного трехмерного массива и линейного массива, построенного по предлагаемой схеме

     

     

    uptime=require("computer").uptime
    --Создадим два трехмерных массива, один обычный вида M[x][y][z]
    --другой линейный, в котором общий индекс будет вычисляться по формуле вида id=x+y*80+z*80*64
    --Функция для вычисления общего индекса
    --Частные индексы x,y,z могут изменяться в диапазонах 1-XX, 1-YY, 1-ZZ соответственно
    --Общий индекс изменяется в диапазоне 1 - XX*YY*ZZ
    function id(x,y,z) return x+XX*(y-1)+XX*YY*(z-1) end
    
    --Изначально массивы будут заполнены нулями, чтобы создание элементов массивов не повлияло на результат
    --Затем  заменим все элементы каждого массива на другие числа
    --Размерность массивов
    XX, YY, ZZ=80, 64, 20
    --количество повторов
    N=100
    
    --Обычный трехмерный массив
    Arr1={}
    for i=1,XX do
      Arr1[i]={}
      for j=1,YY do
        Arr1[i][j]={}
    	  for k=1,ZZ do
    	    Arr1[i][j][k]=0
    	  end
      end
    end
    
    --Линейный массив
    Arr2={}
    for i=1,XX do
      for j=1,YY do
        for k=1,ZZ do
    	  Arr2[id(i,j,k)]=0
    	end
      end
    end
    
    --Произведем измерение времени, необходимого для изменения всех элементов массива
    --Для повышения точности замера изменение проведем N раз
    start=uptime()
    for m=1,N do
     for i=1,XX do
      for j=1,YY do
    	  for k=1,ZZ do
    	    Arr1[i][j][k]=m
    	  end
      end
     end
    end
    print("Обычный массив "..uptime()-start.." секунд")
    
    start=uptime()
    for m=1,N do
     for i=1,XX do
      for j=1,YY do
        for k=1,ZZ do
    	  Arr2[id(i,j,k)]=m
    	end
      end
     end
    end
    print("Линейный массив "..uptime()-start.." секунд")
     

     

     

    Вот результат, если кому интересно

    rkEIhkx.png

    Как видим, использование обычного массива в три раза эффективнее с точки зрения процессорного времени.

     

    Может быть всё дело в том, что для вычисления индекса линейного массива вызывается функция?

    Попробуем обойтись без функции.

    	  Arr2[i+XX*(j-1)+XX*YY*(k-1)]=m
    

    хотя я так бы делать не стал, поскольку читабельность падает на порядок

    TNORP9O.png

    Немного лучше, но выводы делайте сами.

     

    PS: Если при вычислении индекса избавиться от лишнего умножения и вычитания единицы (Arr2[i+XX*j+XY*k]=m, где XY=XX*YY, при этом частные индексы изменяются от нуля), получим результат еще лучше - 0.89 секунд.

    PS PS: Пост написан под впечатлением вот этого заявления:

     

     

    Не стоит сильно экономить память в опенкомпах, т. к. ее очень много, а процессор крайне медленный.
    • Нравится 3

  14. Коли так, объясни мне великий смысл массива функций:

    	local colorsTable = {
    				['&0'] = function() color(0x000000) end,
    				['&1'] = function() color(0x0000AA) end,
    				['&2'] = function() color(0x00AA00) end,
    				['&3'] = function() color(0x00AAAA) end,
    				['&4'] = function() color(0xAA0000) end,
    				['&5'] = function() color(0xAA00AA) end,
    				['&6'] = function() color(0xFFAA00) end,
    				['&7'] = function() color(0xAAAAAA) end,
    				['&8'] = function() color(0x555555) end,
    				['&9'] = function() color(0x5555FF) end,
    				['&a'] = function() color(0x55FF55) end,
    				['&b'] = function() color(0x55FFFF) end,
    				['&c'] = function() color(0xFF5555) end,
    				['&d'] = function() color(0xFF55FF) end,
    				['&e'] = function() color(0xFFFF55) end,
    				['&f'] = function() color(0xFFFFFF) end,
    				['&r'] = function() color(0xFFFFFF) end
    							 }
    
    

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


  15. Несколько замечаний или даже предложений:

    У тебя координаты и размеры каждой кнопки фактически прописаны в виде констант дважды. Первый раз - для прорисовки (функции drawMenu), второй раз - для обработки события touch. А что это значит? Это значит, что если ты или кто нибудь другой захочет добавить или переместить кнопку, ему это придется сделать в двух местах программы, что существенно увеличивает вероятность ошибки. 

    Я бы на твоем месте все кнопки хранил в одной таблице. Как то так

    button={
      Add   ={x=27,y=24,width=15,height=3,col=color.general,txt="Добавить",align=3},
      Cansel={x=47,y=24,width=15,height=3,col=color.general,txt="Отменить",align=3},
    -- и так далее
    }
    

    тогда вызов функции прорисовки кнопки можно будет оформить так

    function drawBox(but)
    		color(but.col)
    		g.fill(but.x,but.y,1,but.height,'│')
    		g.fill(but.x+but.width-1,but.y,1,but.height,'│')
    		g.set(but.x,but.y,'┌'..rep('─',but.width-2)..'┐')
    		g.set(but.x,but.y+but.height-1,'└'..rep('─',but.width-2)..'┘')
    		if but.txt then
    			g.set(but.x+but.align,but.y+1,but.txt)
    		end
    	end
    

     

    drawBox(button.Add)
    drawBow(button.Cansel)
    

    А для проверки нажатия кнопки можно сделать еще одну функцию, скажем:

    function ifTouch(but, proc)

    где but - кнопка, а proc - функция, выполняемая при нажатии кнопки.

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

     

    А вообще, если пишешь приложения с графическим интерфейсом, рассмотри какую либо GUI-библиотеку. Их у нас на форуме есть несколько.

    • Нравится 2

  16. В 5-м посте, скрипт - баг https://imgur.com/a/SGzPO. Нажимаешь Exit - не можешь писать в том окне,  а начинает вне него, и оно не изчезает. Нажимаешь отправить - то же самое.

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

    А Exit - вообще выход из программы. Что ты там писать собрался?


  17.  

     

    if require("component").inventory_controller.getInventorySize(i) == 27 then -- Изменить число 27, если сундук другой
     а можно
    if require("component").inventory_controller.getInventorySize(i) ~= 0 then

    или так

    if require("component").inventory_controller.getInventorySize(i) then
    

    ?

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