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

Totoro

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

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

  • Посещение

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

    289

Все публикации пользователя Totoro

  1. Большое спасибо! А я уже и не надеялся. А тут ты. Прямо спас. У нас на форуме слишком много ООП. Я решил разбавить этот рай грубой процедурщиной.
  2. С одной стороны удобно. С другой - абсолютно не гибко. Сейчас мод пореже обновляется, а раньше новые версии выходили почти каждую неделю. И соответственно OpenOS тоже изменялась. Если графическая оболочка слита с системой, то на каждый малейший апдейт OpenOS надо пересобирать весь RomeOS. А если бы она была отдельно - таких проблем бы не стояло. Обновлять Rome бы приходилось только в случае мажорных обновлений OpenOS, ломающих совместимость. P.S. С другой стороны - RomeOS можно превратить во что-то типа Debian =) То есть OpenOS будет играть роль ядра. Добавить графическую оболочку Rome. Добавить пакетный менеджер. (Было бы идеально слить его с нашим репозиторием). Добавить набор различных интересных программ.
  3. Небольшая библиотека, которая иллюстрирует один из вариантов рисования графики. Плюсы: * Каждое знакоместо содержит 8 пикселей - 2х4. * Удобно рисовать инфографику даже на монохромном дисплее Минусы: * Не очень подходит для многоцветного изображения * Горизонтальные полосы через каждые четыре ряда пикселей pastebin get 5FzEuqs8 braille.lua Как вы уже наверное догадались, я использовал символы шрифта Брайля. Библиотека (скорее набросок библиотеки - расширение, всяческое допиливание и улучшение приветствуется!) поддерживает следующие операции: braille.matrix(width: number, height: number): table - создаем матрицу braille.set(matrix: table, x: number, y: number, value: number) - рисуем пиксель на матрице (1 - заполнен, 0 - пуст) braille.get(matrix: table, x: number, y: number): number - получаем пиксель braille.line(matrix: table, x1: number, y1: number, x2: number, y2: number, value: number): table - рисуем линию на матрице braille.clear(matrix: table) - чистим матрицу braille.render(matrix: table, x: number, y: number) - рисуем матрицу на экране Пример: local gpu = require('component').gpu local br = require('braille') function frame(x, y, width, height) gpu.set(x, y, '╒'..string.rep('═', width-2)..'╕') for dy = y + 1, y + height-1 do gpu.set(x, dy, '│'..string.rep(' ', width-2)..'│') end gpu.set(x, y+height, '╘'..string.rep('═', width-2)..'╛') end local matrix = br.matrix(96, 12) for x = 1, matrix.width do br.line(matrix, x, math.random(1, matrix.height), x, matrix.height) end frame(1, 1, 50, 4) gpu.setForeground(0x000000) gpu.setBackground(0xFFFFFF) br.render(matrix, 2, 2) gpu.setForeground(0xFFFFFF) gpu.setBackground(0x000000) frame(1, 6, 50, 4) br.clear(matrix) for x = 1, matrix.width do br.line(matrix, x, math.random(1, matrix.height), x, matrix.height) end br.render(matrix, 2, 7) function romb(x, y, size) br.line(matrix, x, y, x+size, y+size) br.line(matrix, x+size, y+size, x, y+size*2) br.line(matrix, x, y+size*2, x-size, y+size) br.line(matrix, x-size, y+size, x, y) end frame(1, 11, 50, 4) br.clear(matrix) romb(21,1,5); romb(36,1,5); romb(51,1,5); romb(66,1,5) br.render(matrix, 2, 12)
  4. Что-то мне это напоминает.
  5. Судя вот по этому: https://github.com/MightyPirates/OpenComputers/blob/master-MC1.7.10/src/main/scala/li/cil/oc/server/machine/luac/UnicodeAPI.scala библиотека врезана в мод. Поэтому достать не получится, но, потенциально можно использовать и за пределами OpenOS (но в пределах OC).
  6. Этот модуль входит в систему OpenOS (мод OpenComputers). http://minecraft-ru.gamepedia.com/OpenComputers/Unicode_API
  7. 1) Собрать компьютер удовлетворяющий этим требованиям: http://computercraft.ru/topic/259-hologram-editor-opencomputers/?p=2814 2) Установить на него OpenOS с дискетки. 3) Скачать программу. Для этого надо набрать в консоли команду: pastebin get tdxECas7 holo После этого программа окажется в корневом каталоге жесткого диска в файлике под названием holo. Ее можно будет запустить набрав команду holo.
  8. Все дело в том, что в исходнике этой функции значения аргументов типа double приводятся к типу float. При этом значение естественно приобретает некоторую погрешность (ведь значение двойной точности было приведено к обычной). Java (на которой написан мод) хранит дробные данные в формате IEEE 754-1985. Конвертация типов приводит к тому, что в двоичном представлении мантисса подрезается с 52 бит до 23, а экспонента с 11 до 8. Выглядит это так: Число 180.000007: 0 10000000110 0110100000000000000000001110101011100001100010101101 превращается в: 0 10000110 01101000000000000000000 Число 180.000008: 0 10000000110 0110100000000000000000010000110001101111011110100001 -> 0 10000110 01101000000000000000001 Как видно во втором случае при округлении захватывается одна единичка мантиссы, которая и приводит к кардинально другому результату. Результат: 180.000007 d -> 180.0 f 180.000008 d -> 180.00002 f Т.е. числа становятся по разную сторону от значения 180. Ну а алгоритм турели в OpenSecurity таков, что не дает ей проходить отметку 180 градусов. Об этов вроде где-то выше qwertyMAN писал. =)
  9. Теперь надо добавить прогрессбар и картинку с наполняющейся пивной кружкой.
  10. Блок проверки только генерит значение. Для того чтобы создать "развилку", надо добавить ромбик-проверку. Оранжевый пунктир показывает, что блок проверки передает с зеленого узла логическое значение. Синий узел нужен для повторного использования этого значения позднее, если надо. А выполнение программы всегда идет с зеленого на красный узел. Код будет выглядеть так: -- [OcBlocks v0.3a generated code] -- local robot = require('robot') local a = robot.detect() if a then robot.swing() ::b:: robot.forward() os.exit() else robot.forward() os.exit() end -- [The END] -- Не идеал в плане оптимизации, но логику передает верно.
  11. Думаю на практике, библиотеку можно свести к функции convert(value: number, to: number). Который будет изредка юзаться для конвертации и вывода результата вычислений в какую-нибудь нужную систему. Ибо какая к черту разница как оно там под капотом хранится. Конструкция из строк и таблиц не будет эффективнее примитивного типа number. С точки зрения же получения удовольствия от написания программы, игры с системами счисления, таблицами и языком Луа - вопросов нет, дело хорошее =) P.S. Гигантскую таблицу в начале можно генерить налету с помощью string.byte и string.char P.P.S. В доках, лучше вначале писать название переменной, а потом, через двоеточие, тип. Такой стиль используется в большинстве документов. И конструкции типа class DecInteger(string: number) - DecInteger instance изрядно путают. Это строка с названием number или число с названием string?
  12. Теперь на O-Blocks можно официально написать свой "хеллоу-ворлд"! Скачать бесплатно без СМС: OcBlocks 0.3a (1.1 Mb) -- [OcBlocks v0.3a generated code] -- local a = 'Hello World!' local robot = require('robot') ::b:: print(a) os.exit() -- [The END] --
  13. На самом деле 12 на "воксель" ) И если Сангар не применял какой-нибудь хитрый алгоритм для упрощения сетки, то в ёлочке их и в самом деле немало. Хотя и не особенно много, по меркам современных 3D игр.
  14. Странно слышать такое от главного идеолога OpenClouds.
  15. Попробуй юзать команду gpu.bind(address: string): boolean[, string] На ум приходит два варианта: 1) Ставишь две видюхи - биндишь каждую к своему монитору и рисуешь. 2) Ставишь одну карту, и биндишь ее поочереди к каждому монитору и рисуешь.
  16. Немного критики. 1) Отступы скачут. Сделай жестко 2 пробела для блока, будет читать легче. 2) Называть переменные "a", "b", "c" - не айс. Желательно давать названия, которые сами по себе поясняют, что хранится в переменной. Например - "width" (ширина), "height" (высота), "number" (число). 3) Что делает эта строка? function unload() robot.turnRight() robot.detect() <--- вот эта robot.select(chest) 4) Проверку на чет-нечет if math.ceil(b/2) == b/2 then -- это ведь она? проще сделать так if b%2 == 0 then Операция % означает "остаток от деления на". 5) На деле программа спит не N секунд, а 10N. for i=1, 10 do os.sleep(n) Если я правильно понял код, надо использовать здесь os.sleep(n/10)
  17. Не боги горшки обжигают Одно дело говнокод ради говнокода, другое дело - говнокод в процессе создания чего-то более интересного.
  18. -- [OcBlocks v0.22a generated code] -- local robot = require('robot') local a = io.read() print(a) os.exit() -- [The END] --
  19. Небольшое обновление. Запатчил и проапдейтил. Теперь будет запускаться на секунду дольше, это нормально. =) Скачать OcBlocks 0.21a (1 Mb) Что нового Экспорт "кода" в картинку PNG с прозрачным фоном. Типа той, что выше. Поддержка вермишельного кода. Типа того, что выше. Экспортируется во что-то такое: -- [OcBlocks v0.21a generated code] -- local robot = require('robot') ::a:: local b = robot.detect() if b then robot.swing() robot.forward() goto a else robot.forward() os.exit() end -- [The END] --
  20. "Агент Смитт" должен уметь возвращать на место коров, которые догадались, что есть мир за пределами загона.
  21. Имеешь ввиду что-то такое? Несколько веревок на выход я делать не буду, поскольку это создает неоднозначность выполнения. По какой линии должна двинуться программа? По рандомной, или по очереди (по какой очереди?)... Это создает неочевидность и запутанность. Несколько веревеок на вход я делаю сейчас. Тут проблема в том, во что это будет экспортировано. То что выше, на скриншоте - по сути цикл while. И по хорошемо должно экспортироваться в него. Однако схема может быть гораздо запутаннее, с несколькими переходами в начало цикла, или даже не только в начало. Поэтому скорее всего, это все будет экспортировано в виде вермишели с операторами goto. =) Это конечно не радует, и противоречит принципам красивого кода... Но зато в OcBlocks "код" станет красивее и понятнее.
  22. Нео, так вы этом и суть. Возьми креатив, сингл, где есть все, ничего не лагает, и есть доступ к файлам, модам, сейву в любой момент. Построй Зион таким как ты его видишь, без лимита на ресурсы, свободно. А потом К.А. с радостью поможет тебе его "развернуть" на сервере, я уверен в этом на 100%.
  23. Я тут полистал свой календарь и обнаружил вопиющую пропажу - исчезли выходные на прошлой неделе. "Как же так, - подумал я, - ведь я собирался выложить OcBlocks 0.2а в субботу". Но злодеев найти так и не удалось, поэтому выкладываю программу сегодня. Среда программирования пополнилась новыми плюшками, и новыми операторами. Пожалуй лучше всего опишет изменения вот этот скриншот: Который транслируется в такой код: -- [OcBlocks v0.2a generated code] -- local robot = require('robot') local a = robot.detect() local b = robot.detectUp() local c = b == a if c then robot.down() else -- pass -- end -- [The END] -- Скачать O-Blocks 0.2a (1.22 Mb) Подробнее Добавлен инструментарий для работы с группами блоков - рамочка для выделения, хоткеи и меню для вырезания, копирования, вставки и удаления. Добавлены типы данных. Пока только boolean (оранжевый). Вы можете заметить у некоторых блоков дополнительную синюю ноду. Это Нода Данных, которая позволяет в любой момент стянуть с нее значение, которое хранит в себе блок. К нодам данным может быть подключено любое число линий. Пунктир на линии помечает тип данных, который этой линией передается. (Красный пунктир - неправильное подключение линии). Линии могут быть белыми и черными. Черные - это линии контролирующие ход программы и последовательность выполнения блоков. По ним выполняется схема, и по ним же она транслируется. Белые линии - пассивные линии данных. По ним блоки могут получать данные от других блоков, когда нужно. Должен заметить, что суффикс "a" в номере версии означает "альфа". То есть, контент настолько сырой, что у меня не хватает нахальства называть его "бета". Все изменения представляют собой наброски "того как оно будет", и ожидают вашей бурной критики и предложений по улучшению. P.S. Репа проекта по прежнему открыта для предложений, багрепортов и пулл-реквестов. https://github.com/MoonlightOwl/O-Blocks/issues
  24. Да, упустил из виду Alert'ы. До версии Java 8u40, они существовали отдельно, в составе большой библиотеки ControlsFX Dialogs. Потом Oracle увидел, что это круто, и прибрал к рукам ) Добавлю уточнение в стартовый пост. Есть вариант добавить режим редактирования контрольных точек к "трассам". Тогда можно будет поправить форму. Либо прямо тасканием за середину линии изменять. Спасибо всем большое за отзывы и багрепорты! Это воодушевляет писать дальше Циклы и логика на подходе. К сожалению, времени на все не хватает, поэтому обновление может подзажержаться.
×
×
  • Создать...