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

swg2you

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

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

  • Посещение

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

    20

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


  1. ММ-52(61) - рулит :D

    У нас тоже тут ЕГГОГология творится, только с Луа.

    Угу. Я на 61-м много кодил ) 

     

    Как еггоголог могу сказать, что описание мониторов и гпу, в официальной вики, не соответствует действительности.

    • Монитор тир2 умеет 16 переопределяемых цветов
    • Монитор тир3 умеет 16 переопределяемых и 240 фиксированных (всего 256).
    • 16 переопределяемых цветов в тир3 занимают место градации серого, из стандартной палитры 6*8*5+16, поэтому их изменение портит оттенки серого.
    • Цвет в виде 0xRRGGBB - фикция, при записи, цвет будет приведен к ближайшему из палитры монитора (16 для тир2 и 256 для тир3)

    Поэтому, в любом случае, для хранения цвета знакоместа (фон/символ) в тир2 достаточно 1 байт, тир3 -2 байта.

     

    Еще одна особенность. Запись "широкого" юникод-символа в знакоместо, затирает следующее знакоместо пробелом.

    • Нравится 2

  2. Quant, люди на форуме иногда жалуются, что программировать в Майнкрафте уже нечего, что все программы написаны. А ты такую идею бросил, а с получением вайта вообще на флуд переключился. Эээххх.

    Как нечего? о_О

    more стандартную перепишите, чтоб она поток использовала. а то вместо правильного more в open os жуть какая-то )


  3. все что выводится таким методом:

    gpu.setForeground(i, true), где i = 0..15 - индекс цвета в палитре 

     

    можно поменять сделав:

    gpu.SetPaletteColor(i, 0x654321) - изменив цвет индекса

     

    палитра, по сути, таблица цветов, а индекс - номер цвета.

     

    зы1

    не забывайте сохранять палитру и восстанавливать после.

     

    зы2 

    типичное применение плавное появление/затухание изображения (фейдинг)

    local c1=gpu.getPaletteColor(1) --сохраняем значение первого цвета
    
    gpu.setPaletteColor(1, 0x000000) --гасим первый цвет
    gpu.setForeground(1, true) -- задаем его для вывода
    print('Hello World') -- выводим текст
    
    for c=0,0xFF do
      gpu.setPaletteColor(1, c + c*0x100 + c*0x10000) --проявляем цвет
      sleep(0.01)
    end
    
    sleep(5) --ждем чтоб прочитали
    
    for c=0xFF,0,-1 do
      gpu.setPaletteColor(1, c + c*0x100 + c*0x10000) --гасим цвет
      sleep(0.01)
    end
    
    gpu.setPaletteColor(1, с) -- восстанавливаем исходный цвет
    
    
    • Нравится 2

  4. Да, я так и делал, но это замедляет процесс отрисовки в десятки раз, поэтому сделал чтобы только новые символы были 00FF00, остальные 008800, только из-за странных пустых символов теперь иногда замирают символы с лаймовым цветом.

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

    Палитру юзай. Она позволяет менять цвет без перерисовки.

    gifki-58535609_orig_.gif

    • Нравится 1

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

    Посмотри наконец на то, что выведет обработчик события. И без слов Фигнера уже сколько намеков было. Он-то уже разжевал до невозможности, лишь бы ты побыстрее закончил. Сам немного пожуй, дружище, а то зубы не окрепнут.

    Во-во, а то развелось беззубых )


  6. Есть код, в виде строки, его нужно запустить, указав окружение. Как это сделать в bios?

    И еще хотелось бы узнать про функцию load, на вики написано, что она изменена, но нет подробного объяснения.

     

    load('код в виде строки', '', '', env)


  7. Вот чего мне не надо — так это древесины) Саженец 4х4 джунглей выдаёт 1-5 саплингов (не хватает на поддержание), 4х4 дуб — 3-5 (такая же беда), берёза — 2-4 (маловато будет), дуб — 2-5 (в самый раз и с яблоками).

     

    А вообще — на первой агрерке выпала White Willow, понравилась неимоверно своей скоростью роста и кол-вом саплингом. Биомассы в 4 раза больше даёт и выводится легко (относительно).

    Ель говорю, кури. 2х2. )

     

    А излишки древесины в древесный уголь, и в энергию.


  8. Кто может подсказать, хочу сделать поддержку unicode, но проблема в том что unicode.byte нет, а каким образом код получить я пока не знаю.

    :smile44:  Тебе не ясно, твои проблемы, я люблю изучать, вот и пишу.

     

    drochish-nebos_86769936_orig_.jpg

     

    unicode.byte - существовать не может в принципе, в utf-8 один символ может кодироваться последовательностью от 1 до 6 байт.

    но unicode.byte и не нужен, в принципе.

    local s='уникодэ'
    local h=''
    
    for i=1,#s do
      h=h..' '..string.format('%X', string.byte(s,i))
    end
    
    print(s, #s) --строка и её длина в байтах
    print(h) -- побайтовое представление в нёх
    
    • Нравится 2

  9. это чой-то дюже специфическая библиотека получилась. 

    • неясно зачем "бинарный вид" хранить в таблице. это же сколько килобайт на бит будет?
    • неясно зачем вообще писать для него функцию, если луа и так умеет работать с битами.
    • неясно зачем переводить делением/возведением в степень о_О, если есть сдвиг и маска
    • неясно зачем CharToBit и WordToBit вместо одной str2bin

    --==--

    если нужно в двоичный и назад то проще как-то так:

    function bin(n, l)
      local b=''
      for i=0,l or 31 do
        b=bit32.extract(n, i)..b
      end
      return b
    end
    
    function dec(b)
      local n=0
      for i=1, #b do
        n=bit32.replace(n, string.sub(b,i,i), #b-i)
      end
      return n
    end
    
    print(bin(196))
    print(dec('11000100'))
    
    • Нравится 1

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

    ...

    Резюмирую. Передача по связке кабелей банальна, UART тоже скучноват, передача данных по одному редстоун-каналу с его 16-ю состояниями выглядит весьма интереной, и в текущем решении потенциал редстоуна совсем не раскрыт. А его раскрытие мне кажется увлекательным. Конечно, для начала и UART сойдет. Но 16 уровней сигнала против двух — это совсем другие возможности.

    Несколько замечаний.

     

    Насколько мне известно, то редстоун сигнал затухает с расстоянием. Т.е. 16 уровней сигнала, но с каждым блоком количество уровней будет сокращаться. Нужна процедура начального согласования, для определения длины линии и, соответственно, количества возможных уровней сигнала. В этом случае можно кодировать посылку не в двоичной а в N-ричной системе счисления, где N - количество уровней сигнала при данной длине линии. 

     

    Реализация подобия UART нужна в любом случае, поскольку это N-ричное число нужно по какому-то протоколу передавать, да и процедура согласования опять же.

     

    Если правильно решить тактование, то при таком подходе, информационная емкость канала сильно возрастает достигнув теоретического максимума.

     

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

     

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

    --=--

    Тема действительно интересная и объемная. Передача сигналов по одному (не учитывая землю) проводу - основа основ любой электроники.


  11. Никто не говорит о высоких скоростях. Лучшее на что я рассчитываю - 1 бит/сек. Но для понимания работы этого достаточно. Можно даже осциллограф сделать, что бы смотреть циклограмму.

    Реализовать UART - отличная задача. Осциллограф, показывающий сигналы на входах - вообще крутотень. А для тактования, думаю, можно взять computer.uptime(). Возможно удастся добиться скорости передачи 1 бит/2 тика.

    Нужно прикинуть суммарную погрешность.


  12. Перед сном я кодю. Знаете ли, расслабляет

     

    Медные провода просочатся в голову?! :О

    Программист, не забывай!

    Покодил? Смой за собой!

    Прими ложку знаний, и спать!

     

    З.Ы.

    А чтобы сетевую карту изобрести нужно вначале по редстоуну передать.

    • Нравится 2

  13. Есть предложение в разделе "Рабочие программы" оставить только более менее весомые и нужные, интересные и действительно рабочие проги + (нормально оформленные к тому же)

     

    Аматорские проги нужно пометить в специальный раздел (создам его наверно  сегодня), что-то вроде "Программирование для начинающих и мои первые этюды" :D  и в таком духе.

    Зачем так сложно, название "Hello world" говорит само за себя )


  14. Нда. Прога из 12 строк!! На форум!! :facepalm:

    Научись программировать получше, сделай програмку хотя бы строк на 50-60, и только тогда можешь публиковать это. А проги такого рода совершенно бесмысленны, что ты с ними не делай. Плюс, ни отступов, ни комментариев. Сам чёрт ногу сломит в таком коде.

    Количество строк не показатель же ) Да и начинать с чего-то нужно.

    скобочки в () and () - говорят о сомнениях в приоритетах

    local r = require("robot")
    local w, l = 0, 0
    
    while not r.detect() and r.detectDown() do
      r.forward() 
      w = w + 1 
    end
    if not r.detectDown() then r.back() end
    r.turnRight()
    
    while not r.detect() and r.detectDown() do
      r.forward() 
      l = l + 1 
    end
    if not r.detectDown() then r.back() l = l-1 end
    
    print(w, l, '\n', w*l)
    

    этакая простенькая рулетка выходит.

     

    Как её можно улучшить?

     

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