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

Appo

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

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

  • Посещение

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

    8

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


  1. Еще 4 игры которые подталкивают вас программировать:

    • From the depths: Lua
    • Space Engineers: C#
    • Kerbal Space Program: C#, C++, Java, Lua, Python, KerboScript
    • Dual Universe: Lua
    Подробнее:

     

     

     

    > From the depths [Lua]

     

    From-the-Dephts-258.jpg

     

     

    ss_f3af9c7553beb07be8e994e3fc6dd81bb078d

     

    From The Depths - мультиплеерная песочница, где игроки могут строить свои

    собственные военные корабли, оружие для них, и воевать с другими игроками!

     

     

     

     

     

     

    > Space Engineers [C#]

     

    s-l1600.jpg

     

     

    7-800x450.jpg

     

     

    Space Engineers (Космические инженеры) - это песочница о конструировании,

    создании и обслуживании космических объектов.

    Вы можете создавать пилотировать космические корабли, строить

    огромные космические станции, добывать ресурсы.

     

     

     

     

     

     

     

     

    > Kerbal Space Program [C#, C++, Java, Lua, Python, KerboScript] 

     

     

    indiefix_ksp1.jpg

     

     

     

    igra_gde_mojno_poctroit_zvezdolet.jpg

     

     

    Kerbal Space Program - Игра в которой игроки создают и управляют своей

    собственной космической программой.

    Постройте космические корабли, управляйте ими и постарайтесь помочь Кербалам

    выполнить их конечную миссию по покорению космоса.

     

     

    Существует 2 мода на программирование:

     

     - kOS (свой язык KerboScript) Скачать

      Быстрый старт (Видео)

     

     - kRPC (C#, C++, Java, Lua, Python) Скачать

     

     

     

     

     

     

     

     

    > Dual Universe [Lua]

    icon.600xauto.jpg

     

    3125709-spaceship_space-e1502737755835.j

     

    Dual Universe - Научно-фантастическая игра песочница на тему

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

     

     

     

      Dual Universe основана на технологии CSSC, при помощи которой можно

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

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

     

    Финансирование игры частично поступает из Kickstarter.

     

    Игра находится в закрытой альфе и активно развивается.

     

    Необычная система программирования на Lua показана в офф. ролике .

    Написанные программы выполняются на компьютере игроков, не нагружая сервер.

     

     

     

    P.S.

     > Буду благодарен если вы напишете о других играх (может с модами) в которых есть возможность программировать

     

    кря

    • Нравится 2

  2. чекни, может поможет

    бочка - https://www.geogebra.org/3d/q2u2qt98
    конус - https://www.geogebra.org/3d/ry8begsr
    утолщение конуса (наращение высоты и радиуса) вывел через подобие треугольников

    Пояснения:

    каждый график это отношение:

    (объем материала)/(объем вместительности бочки)
    и нахождение этого отношения через x, y (R, h соответственно)

     


  3. 20421139.gif
     

    Download:
    pastebin get j9kBudRV paint

    Перед первым запуском сломайте проектор если он у Вас есть

    Условия:
     - Наличие Sensor Grid_Sensor.png из мода OpenPeripheral и его подключение через адаптер Grid_%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B

    Использование:
     - Наличие меча в руке ( или любого предмета способного блокировать на ПКМ )

     - Поставить блок ПКМ + Shift 
     - Удалить блок ПКМ


    -- TODO модеры переделайте если не удобно обьяснил, если прочли стерите)
    Значение кнопок снизу вверх ⯅
     - Смена цвета
     - Установка блока перед глазами
     - Режим кисти "линия"
     - Увеличить голограмму
     - Уменьшить голограмму

     - Стереть всё
     - Скрытие кнопок (эта кнопка тоже скроется, но нажать всё равно будет можно)

    От себя:

    Вдохновился, когда испробовал Tilt Brush (Рисование в пространстве) в VR шлеме на технофоруме своего города)

     Вообщем-то я этим не ограничивался и начал делать библиотеку для использования в других идеях, например:
     
     http://computercraft.ru/user/20667-appo/ можно улучшить эту программу, подключив не дописанную библиотеку, и после того как нарисуешь клеточки можно запустить алгоритм убирав меч из рук.
    Так же можно будет делать тиры, кнопки, печатать модельки, использовать палитру до 27 цветов, строить роботами нарисованное, делать анимации, игры, и всё остальное на что способна ваша больная фантазия))0)

    Скрин наработок
     

    unknown.png


    Библиотека до приемлемого использования готова примерно на 30%

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

    Т.е. всего несколько топовых проектов юзают OpenComputers

    Предлагаю другим топовым проектам навязать предложить его :D Можно собрать людей на этих сервере, показать чо этот мод может, и направить их на местные форумы бунтовать в предложение модов))


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

    "Развитию нет предела"

    Новых знаний Вам, удачи)

     

    • Нравится 9

  4. 19689645.gif

    download
    pastebin get gZLj7Y7v holo

    Использование:
    holo <правило>

    *** Правила, при которых клетки "рождаются" и "умирают"

    Если просто ввести holo, тогда запустится правило по умолчанию, тоже самое что и:
    holo 5 6 7 8

    5 - это число при котором клетка "рождается"
    6,7,8 - это числа при котором клетка остаётся "жить" (не умирает)

    Статья с правилами где были обнаружены планеры (смещающиеся, повторяющееся фигура):
    http://www.complex-systems.com/pdf/16-4-7.pdf

    Так правило программы выглядит в статье 6,7,8/5

    Краткий принцип при правиле 6,7,8/5:

    *** Для каждой живой клетки, вокруг проверяются ячейки, в 3-х мерном пространстве их 26 шт. и если вокруг клетки 6 или 7 или 8 клеток, она остается жить. Для каждой "пустой" клетки вокруг "живых" проверяется 26 ячеек, и если есть ровно 5 "живых", то эта "пустая" клетка становится "живой"



    Game of life в 2D

    gof.gif

    Планер
    Game_of_life_animated_glider_2.gif

    • Нравится 9

  5. - Не работает вставка из буфера обмена в консоль (колёсиком мыши)

    - Не запускает команды

    19477815.jpg
     
    19477879.jpg


    Прочитав пост полностью, оказалось что нужно было инициализатор OS запустить командой /WinOS/init.lua , вбив ручками и запустив, появилось окно что и на скрине ниже, только было всё чёрное, ну я немного потыкал по клаве и нажав enter, отобразился красный текст (часики в углу работают норм)

    19477901.jpg

     


  6. Кто-нибудь тестил или собирается тестить?
    Думаю без данных, не опираясь не на что, более сложно прийти к списку благоприятных начальных условий, списку целей игры, списку знаний без которых нельзя в это играть, что и где нужно упрощать/запрещать и т.д.

    Предлагаю всё же кому-то протестить и отписаться о полученных данных тут (даже если они не удачные), иначе, как по мне, дальнейшее обсуждение бессмысленно.


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

    я придумал иной способ
     

    local function r(xx,yy,zz) return zz+yy*256+xx*65536 end -- Получаем 16-ричный код из координат для использования одномерного массива с целью экономии памяти
     
    local function toXYZ(id) -- Получаем координаты из 16-го кода
    	local f, g = ("%X"):format(id), "0x"
    	f = string.rep("0",6-#f)..f
    	return tonumber(g..f:sub(1,2)), tonumber(g..f:sub(3,4)), tonumber(g..f:sub(5,6))
    end
     
    local h = {}
     
    h[r(1,2,3)] = "XXX" -- координаты x = 1, y = 2, z = 3
     
    print( h[66051] ) -- Выведет: "XXX"
     
    print( toXYZ(66051) ) -- Выведет 1,2,3
    

    Но он не совсем подходит, так как большой размер, а именно = 256*256*256 . в следствии чего, ячейки массива занимают много места в файле.

    Как сократить размер до 80x64x80 ?


  8. Один человек попросил написать программу, предназначенную  для отображения моделей в формате .3dm, используемом программой print3d  (и подобных ей).
    Думаю программа достойна публикации
     
    pastebin get pTAFxX5K holo

    Запуск:
    holo <Файл модели> <Номер блока>

    скрины

    19151443.png

    19151441.png



    Минусы:
    - максимум 3 цвета (если их больше, в месте не достающего цвета ставится случайный, уже использованный цвет)
    - модель для 3d принтера должна содержать цвета. а не только одну текстуру
    Строка содержащая цвет:
    { 0,0,0,16,16,16,texture = "iron_block", tint = 0x00ee00 },
    Строка не содержащая цвет
    { 0,0,0,16,16,16,texture = "iron_block"},


    Но я всё-таки думаю что этот сайт получше будет использовать http://f0x.me/OpenComputers-3D-Designer/ (если не ошибаюсь, автор Крутой)

    • Нравится 4

  9. local h = {}
    
    function add(x,y,z,f) 
    	h[x] = h[x] or {} 
    	h[x][y] = h[x][y] or {} 
    	h[x][y][z] = f
    end
    
    add(1,2,3,"xxx")
    print( h[1][2][3] ) --> xxx
    

    Есть ли способ делать то же самое, но по короче?

    И как можно написать эту функцию для добавления значений в разные массивы? (с использованием ооп и без)


  10. @@eu_tomat , думаю улучшить всё-таки можно, например ни кто не отменял апгрейд чата из conputronics :D

     

    Претензий у меня нету, я лишь хотел по подробнее узнать о ваших предложениях и обсудить их :)

     

    Вы и так много полезного сказали, я вам благодарен)

     

    P.s.

    Ах да.. и интерес угасает, из за не надобности этого робота ( как оказалось на сервере, где я играю, костыльная защита от грифа роботом из за чего робот не может получать данные об инвентарях) T_T


  11. испортилась сама схема.

    Что именно испортилось? Всё осталось прежним, я лишь добавил возможность сканирования инвентаря робота, вдруг игрок в него захотел положить компоненты.

     

    1) Отображение на мониторе списка недостающих компонентов поможет игроку быстро принять верное решение.

     

    Ставь монитор, кто тебе мешает? Я разве говорил "не ставьте монитор" ?  Я сделал и так и так, для удобства, позже попробую сделать отображение на экране через использование биоса

     

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

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

     

    Если вы считаете что это действительно необходимо, пожалуйста упомните об этом еще раз.

     

    3) Обработка события inventory_changed позволит оперативно отслеживать, что игрок положил, а что забрал из инвентаря робота, сделав ненужными повторные сканирования инвентаря.

     

    Как это реализовать? Разве ивенты не будут путатся в очереди? А если я в определенный момент не успею проверить ивент и он проигнорится?

     

     

    При дополнении новыми возможностями не изменяя прежний принцип работы, типо это регресс? окда

     

     

     

    И, да, ты же в курсе, что у робота максимум 64 слота инвентаря может быть (= 4 апгрейда)?

    Спасибо) Не знал..


  12. Вновь обновил :) (ссылка в первом сообщении темы)

    Теперь сундук над роботом не обязателен, можно во внутренние слоты робота пихать.
    (При перемещении предметов шифтом в робота, сначала предмет попадёт в его лапки, только потом в инвентарь)

    Вот такой комп можно собрать, используя EEPROM ( Без запуска OpenOS и без монитора )

    18944709.png

    Кому интересно как я изменял программу по мере критики, то вот старая версия, а вот еще старее старой


  13. Обслуживает только один реактор ....

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

     

    По поводу замечаний и критики, огромное спасибо) Не знал как это по другому делается, делал как умел)

    Обязательно всё учту и переделаю)


  14. 18915388.png

    • Робот выставляет в реактор записанную Вами схему из базы данных Grid_%D0%90%D0%BF%D0%B3%D1%80%D0%B5%D0%B используя компоненты из сундука над ним или из внутреннего инвентаря

    Установка:
    pastebin get NAuav7sx q

    Минимальная конфигурация робота:

    Версия с монитором (если Вы мажор)

    18915385.png

    • Системный блок 2 ур.
    • Апгрейд "Контроллер инвентаря"
    • Апгрейд "Инвентарь"
    • Клавиатура
    • Монитор 1 ур.
    • Апгрейд "Контейнер" 3 ур.
    • Дисковод
    • Процессор с видеокартой 1 ур.
    • Память 1.5 ур.
    • Интернет карта
    • EEPROM (Lua BIOS)
    • Жёсткий диск 1 ур.

    После создания робота делаем следующее:

    • Вставляем дискету OpenOS
    • Запускаем робота
    • Пишем install
    • Если будет выбор, то выбираем "OpenOS" и далее соглашаемся, вводя: "Y"
    • Перезагружаем робота
    • Скачиваем программу. Пишем pastebin get NAuav7sx q
    • Запускаем программу. Пишем: q

     


    Версия через биос (без монитора)

    18915387.png

    • Системный блок 2 ур.
    • Апгрейд "Контроллер инвентаря"
    • Апгрейд "Инвентарь"
    • Апгрейд "Контейнер" 3 ур.
    • Процессор 1 ур.
    • Память 1 ур.

    После создания робота делаем следующее:

    • Открываем свой компьютер
    • При наличии интернет карты, пишем: pastebin get NAuav7sx q
    • Теперь перепрашиваем EEPROM (Желательно поставить пустой). Пишем flash -q q
    • Вытаскиваем только что записанный EEPROM из компьютера
    • Скрещиваем в окне крафта, робота и EEPROM

    18915391.png

    Так как у робота нету монитора, отсчёт об ошибках сделан на звуках.. Если он пищит, значит чего-то не хватает.


     Повторяю еще раз. Это минимальная конфигурация. Вы можете добавить батарею или мощнее процессор


    Процесс использования:

     

    • Либо ставим над роботом Grid_%D0%A0%D0%BE%D0%B1%D0%BE%D1%82_(Ope любой сундук 32px-Locked_Chest.png?version=24bba53667 с компонентами для схемы
      (Рекомендую сейф из Thermal Expansion, т.к. если его сломать, предметы в нём останутся)

      Либо будем использовать инвентарь робота как хранилище компонентов схемы
      (В таком случае, на этапе крафта робота, рекомендую поставить больше улучшений инвентаря)

      Версия с использованием EEPROM
      18944709.png


       

    • Крафтим базу данных 3 ур. Grid_%D0%90%D0%BF%D0%B3%D1%80%D0%B5%D0%B
    • Держа её в руке, нажмите ПКМ, что бы открыть её и нарисовать в ней схему предметами.

    18915389.png

    Начинать выставлять схему, следует с верхнего левого угла (Если у вас маленький реактор)

    • Затем вставить базу данных Grid_%D0%90%D0%BF%D0%B3%D1%80%D0%B5%D0%B в робота Grid_%D0%A0%D0%BE%D0%B1%D0%BE%D1%82_(Ope 
      ( Обязательно в слот улучшения, а не в лапки )

    18915390.png

    • И запускаем :)

     

     

    • Нравится 6

  15. Оставляю в качестве примера.

    Вы предлагаете мне сжать код? Если так, то для какой цели? Размер программы 1698 байт.

    У меня не стояло такой задачи, и я упёрся в функционал..

    Ну а вашу тему я посмотрел в первую очередь перед созданием этой программы :)


  16. Делав свой интерпретатор для EEPROM заметил что API computer отличается от его прокси.

    То есть computer уже поключен. поэтому его прокси не обязательно получать, но если получить, тогда они отличаются.

    Так вот, вопрос. можно ли из полученных прокси собрать например свой computer.pullSignal() ? или можно ли это как то использовать?

    Скрин:


    pbktEhd.png

     


  17. Функция os.sleep поймает один сигнал и завершится, а если поймает нужное сообщение, то упадёт замертво.

    функция os.sleep() нужна для экстренного остонова в обработчике ошибок (который активируется после запуска программы).

    Она срабатывает только после получания сообщения exit на порт.

    Например вы создали программу "123" и засунули туда код:

    while true do computer.beep(1000,0.2) os.sleep(1) end
    

    и если вы запускаете код командой "get run 123" и попадаете в обработчик ошибок, где можно нажать 2 кнопки "q" и "w". Если вы нажмёте "w", тогда например дрон, в данном случае, выйдет из бесконечного цикла.

     

    Максимальный размер пакета можно получить через maxPacketSize()

    По поводу maxPacketSize(), в интерпретаторе реализована отправка по частям, например изменив переменную limit в интерпретаторе, например на 3, тогда Ваша программа будете передаваться по 3 символа, и собираться в кучку уже в EEPROM того устройства, которому вы послали сигнал.

     

    Нужен протокол рукопожатий, чтобы можно было запускать несколько сетей. Защита от взлома тут самое важное. Связанная карта - не вариант, ест много энергии.

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

     

    Для безопасности предлагаю вам посылать программы с бесконечным циклом. Например "while true do drone.move(0,1,0) end".

     

    На мой взгляд максимум безопасности я сделал, замазывая порты звёздочками :D

     

     

    Неплохо бы иметь набор программ из коробки для работы с дронороботами.

    Можно посылать на него любые программы которые когда то уже были написаны для EEPROM. например для дронов, но для роботов не все.

    Вы можете подключится к роботу и ввести команду " components robot ", для EEPROM, там будет совершенно другое API

     

    Так же, удобной возможностью является просмотр доступных компонентов устройств и их методов ( components )


  18. QcvGUdT.png

    Позволяет передавать выполняемый код, с одного устройства на другое.
    Например можно дрону передать команду drone.move(0,1,0) и он подлетит вверх, но дроном этот интерпретатор не ограничивается :)

    Установка:
    pastebin get EQkw9cL7 dcp

    Тем, кому интересен биос:



    Необходимые платы для запуска:
     - Беспроводная или связанная плата
     - Интернет плата

    Использование:


      После скачивания программы, запустим ее:

    dcp
    

     Нас попросит ввести dcp new для записи EEPROM:

    dcp new 
    

      Если все платы в наличии, тогда нас попросит ввести порт (на Ваш выбор)

     После, берем этот EEPROM и засовываем его в устройство. Можно совместить в верстаке этот EEPROM с устройством (дроном или микроконтроллером). И запускаем устройство.

     Возвращаемся к компьютеру где установлена программа и запускаем консоль:

    dcp
    

      Вводим порт, на который записывали EEPROM.
    И если Вы всё сделали правильно, то в строке с онлайном будет цифра 1   ;)

    Вы восхитительны)) Теперь можете передавать команды на устройства)
    Например:

    computer.beep(1000,1)

     


     
    Доступные команды в интерпретаторе:

    help
    components - Список компонентов
    components [<device>] - Список методов компонента
    online - Список онлайн устройств
    start - Запуск всех устройств
    = date - Вернуть дату записи EEPROM
    

    Доступные команды при запуске программы:

    dcp help
    dcp <port> - Запуск консоли
    dcp new <port> - Запись EEPROM
    dcp run <name programm> <port> - Запуск программы
    dcp pastebin <kode pastebin> <port> - Запуск программы c pastebin

    Некоторые возможности использования:
     - все компоненты уже подключены, т.е. не обязательно получать прокси компонентов
     - в интерпретаторе работает знак "=" который пишется перед командой, что бы возвратить какое-то значение (написано жёлтым текстом)
     - можно запускать программы прямо с компьютера (dcp run) где установлена программа или сразу с pastebin (dcp pastebin)
     - добавил функцию os.sleep(). Если вы будете использовать ее как основной способ задержки, тогда можно будет экстренно завершать программу в обработчике ошибок (который активируется после запуска программы dcp run)
     - получение ошибок с запущенных программ, для их удобной отладки (если что, ошибка приходит на порт+1 , т.е. если вы ввели порт 25, то ошибка вернётся на порт 26)
     - создание стаи из дронов / роботов / планшетов ;D
     - управление системным блоком (которому даже моник не нужен), что то типо микроконтроллера, только можно будет работать удалённо с периферией: адаптерами, голограммами и т.д.


    ioAD6El.jpg

    :)

    • Нравится 9

  19. Так реализован стандартный терминал openos.

     

    Дело в том, что курсоры мигают при каждом уловленном событии. Можешь потестить постоянно посылая modem_message на какой-нибудь комп

    Курсор начнет мигать, потому что комп уловил событие

    Код выглядит примерно так: 

    while true do
        -- ...
        --
        e = event.pull()
        if e then blinkCursor() end
    end
    

    Попробую сделать так, чтобы терминал мигал курсором только будучи в фокусе ( с красной рамкой )

     

    Раз курсор мигает относительно уловленных событий, то нельзя ли сделать мигание относительно времени работы компьютера?

     

    computer.uptime()
    
×
×
  • Создать...