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

Zer0Galaxy

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

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

  • Посещение

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

    189

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


  1.  

     

    1. Можно ли узнать адреса компонент и блоков, просто лежащих в инвентаре робота?
    А что если использовать контейнер для плат? Если робот сможет самостоятельно поместить в него плату, то узнает ее адрес. 

  2. Выкладываю инфу по OpenNet для тех, кто захочет этим заняться.

    Сеть является трехуровневой.

    post-7-0-07635600-1459172638_thumb.gif

    1-й уровень:

    Роутеры первого уровня являются ядром всей Сети. Они должны быть расположены компактно и объединены друг с другом в локальную сеть при помощи проводных сетевых карт. Кроме того, каждый роутер должен иметь как можно большее число связанных карт (tunnel) для обмена с роутерами второго уровня.

    ПО роутера 1-ого уровня: https://preview.c9users.io/krutoy242/opennet/_source/on_router/ONrouter.lua

    Так же роутеры 1-ого уровня требуют наличия библиотеки thread.

    2-й уровень:

    Роутеры второго уровня или WiFi-роутеры располагаются в произвольных точках карты и могут находиться даже в других мирах. WiFi-роутер должен иметь в своем составе связанную карту, чья карта-близняшка стоит соответствующем роутере 1-ого уровня. Так же WiFi-роутер должен иметь беспроводную сетевую карту для связи с ОН-клиентами. Опыт показывает, что надежный доступ к Сети обеспечивается в радиусе 350 блоков от WiFi-роутера.

    ПО роутера 2-ого уровня: https://preview.c9users.io/krutoy242/opennet/_source/WiFi/WFrouter.lua

    3-й уровень:

    ОН-клиенты - компьютеры конечных пользователей. Требуют наличия беспроводной сетевой карты и библиотеки opennet.lua

    https://preview.c9users.io/krutoy242/opennet/client/lib/opennet.lua

    • Нравится 6

  3.  

     

    Новую версию можно установить путем команды: pastebin get -f kLXrvXmH guessTheWord_v0.9.lua
     

     

     

    function logo()
        gpu.setResolution(126, 50)
        gpu.setBackground(colorsLogo.background)
        term.clear()
        gpu.fill(1,1,126,50," ")
        --скин
        gpu.setBackground(colorsLogo.brown)
        gpu.fill(98,11,16,6," ") gpu.fill(90,22,8,8," ") gpu.fill(114,22,8,8," ")
        gpu.setBackground(colorsLogo.green)
        gpu.fill(98,9,16,2," ") gpu.fill(98,11,4,1," ") gpu.fill(106,11,4,1," ") gpu.set(112,11,"  ") gpu.set(98,12,"  ")
        gpu.setBackground(colorsLogo.black)
        gpu.fill(90,17,32,4," ") gpu.fill(98,21,16,21," ")
        gpu.setBackground(colorsLogo.white)
        gpu.fill(90,21,8,1," ") gpu.fill(114,21,8,1," ") gpu.fill(98,28,16,2," ")
        --текст
        --newbie
        gpu.setBackground(colorsLogo.green)
        gpu.fill(16,17,8,1," ") gpu.set(24,18,"  ") --n
        gpu.set(28,18,"  ") gpu.fill(30,17,6,1," ") gpu.set(36,18,"  ") --e
        gpu.set(40,17,"  ") gpu.set(44,19,"  ") gpu.set(48,17,"  ") --w
        gpu.fill(52,14,2,4," ") gpu.set(54,18,"  ") gpu.set(56,17,"    ") gpu.set(60,18,"  ") --b
        gpu.set(64,15,"  ") gpu.set(64,17,"  ") --i
        gpu.set(68,18,"  ") gpu.fill(70,17,6,1," ") gpu.set(76,18,"  ") --e
        gpu.setBackground(colorsLogo.brown)
        gpu.fill(16,18,2,4," ") gpu.fill(24,19,2,3," ") --n
        gpu.fill(28,19,10,1," ") gpu.set(28,20,"  ") gpu.fill(30,21,8,1," ") --e
        gpu.fill(40,18,2,3," ") gpu.fill(42,21,8,1," ") gpu.set(44,20,"  ") gpu.fill(48,18,2,3," ") --w
        gpu.fill(52,18,2,3," ") gpu.fill(52,21,8,1," ") gpu.fill(60,19,2,2," ") --b
        gpu.fill(64,18,2,4," ") --i
        gpu.fill(68,19,10,1," ") gpu.set(68,20,"  ") gpu.fill(70,21,8,1," ") --e
        --present
        gpu.setBackground(colorsLogo.black)
        gpu.fill(10,33,2,8," ") gpu.set(12,34,"  ") gpu.set(14,33,"    ") gpu.fill(12,37,6,1," ") gpu.fill(18,34,2,3," ") --p
        gpu.fill(22,33,2,5," ") gpu.set(24,34,"  ") gpu.set(26,33,"    ") gpu.set(30,34,"  ") --r
        gpu.fill(34,34,2,3," ") gpu.fill(36,33,6,1," ") gpu.fill(36,35,8,1," ") gpu.fill(36,37,8,1," ") gpu.set(42,34,"  ") --e
        gpu.fill(48,33,8,1," ") gpu.set(46,34,"  ") gpu.fill(48,35,6,1," ") gpu.set(54,36,"  ") gpu.fill(46,37,8,1," ") --s
        gpu.fill(58,34,2,3," ") gpu.fill(60,33,6,1," ") gpu.fill(60,35,8,1," ") gpu.fill(60,37,8,1," ") gpu.set(66,34,"  ") --e
        gpu.fill(70,33,2,5," ") gpu.fill(72,33,6,1," ") gpu.fill(78,34,2,4," ") --n
        gpu.fill(84,31,2,6," ") gpu.fill(82,32,6,1," ") gpu.set(84,37,"  ") --t
        gpu.setForeground(colorsLogo.black)
        gpu.setBackground(colorsLogo.background)
        gpu.set(100,49,"for www.computercraft.ru")
        os.sleep(5)
    end 

     

    Не верю, что это программист написал. В Луа, вообще то, таблицы имеются и циклы. Всё это можно было закодить гораздо меньшим количеством символов.


  4.  

     

    Для этого нужно активировать специальный скрытый режим "power"
    Да, скрытый режим "power" существенно экономит энергию. :smile3:

     

     

    Скриншоты

    Между этими двумя компами лучше поставить распределитель.  Иначе они экраны и клавиатуры попутают.

    • Нравится 2

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


  6. Форма не выводит знаки поверх себя, кроме своих частей

    http://pastebin.com/FDtAVd6j

    Создавать формы и компоненты следует до запуска функции run, а не по нажатию кнопки. Попробуй так:

     

     

    local wce = require("WCE")
    local term = require("term")
    local forms = require("forms")
    local event = require("event")
    local buf = require("doubleBuffering")
    local component = require("component")
    gpu = component.gpu
     
    w, h = gpu.getResolution()
    ------functions-------
    local function exit()
      term.clear()
      forms.stop() --останавливаем выполнение среды
    end
    
    local function startgame()
      term.clear() -- этот clear можно не делать. Экран всё равно перетрется формой
      GameForm:setActive() --Делаем активной форму игры
      -- печатаем что надо
      for i=1,w do
        wce.PrintHere(i, h, "█")
      end
     -- buf.line(1, h-10, w, h-10, 0xa9a9a9, 0xa9a9ff, "█")
      buf.draw()
    end
    
    -- Создаем форму меню
      MenuForm=forms.addForm()
      MenuForm.border=1
      ButtonExit=MenuForm:addButton(w/2, h-10, "Exit", exit)
      ButtonStart=MenuForm:addButton(w/2, h-12, "Start", startgame) --по нажатию этой кнопки активной станет GameForm
    -- Создаем форму игры
      GameForm=forms.addForm()
      --по нажатию этой кнопки активной станет MenuForm
      ButtonExitG=GameForm:addButton(w-10, h-1, "Exit", function() MenuForm:setActive() end)
      GameForm.border=1
    --Запускаем среду на выполнение
      forms.run(MenuForm)
     

     

     


  7. Эхх... если бы это была библиотека для работы с реальным sql... а так это просто подобие...

    Ты имеешь в виду трансляцию sql-запросов в реальный мир? А разве Тоторо-банк не так работает?

  8.  

     

    В принципе не должно возникнуть никаких проблем с нагрузкой на процессор.  А вот с требуемой памятью проблема может и появится. Например, я в прототипе под OpenOS сделал такую полезную функцию, которая все случайно созданные комнаты прогружает и заносит в таблицу, указав в этой же таблице минимальное расстояние до выхода. В добавок в этой таблице будут хранится свойства комнат, давление, температура, разного рода вещи, ловушки и прочее. То есть нагрузка больше падает на оперативную память чем на процессор или видеокарту.
    Скорее всего проблема в алгоритме расчета расстояния до выхода (бесконечный цикл или вечная рекурсия). При правильном подходе много памяти это жрать не должно.

  9. Данная версия системы управления базами данных (СУБД) под операционную систему OpenOS разработана для изучения особенностей работы реальной СУБД MySQL.

    Предупреждаю сразу: в ней реализованы далеко не все функции MySQL. Некоторые я посчитал несущественными или избыточными, до некоторых просто не дошли руки. Но то, что есть позволяет создавать адаптированные под Луа базы данных, и формировать несложные SQL-запросы к ним. 

     

    Для установки СУБД на ОС-компьютер выполните команду

    pastebin run -f bS1kRJKw

    Если в компьютере установлена интернет-карта, вы должны увидеть такой текст:

    Добро пожаловать в программу установки СУБД MySQL
    Выберите тип установки:
    1. Серверная часть
    2. Клиентская часть
    3. Полная установка 

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

    После загрузки всех необходимых файлов, программа предложит перегрузить компьютер. Но мы пока не будем перегружать, а рассмотрим содержимое файла etc/dbms.cfg

    --Файл конфигурации СУБД MySQL
    DBpath="/mysql_db/"
    port=3306
    password="" 

    Параметр DBpath содержит путь к папке, в которой будут храниться создаваемые базы. Если эта папка отсутствует, то при запуске СУБД она будет создана автоматически. Измените этот параметр, если значение по умолчанию вас не устраивает.

    Параметр port содержит номер порта, через который, я надеюсь, когда нибудь можно будет обратиться к СУБД по сети.

    Параметр password призван защищать доступ к базам паролем, но эта опция пока не реализована и вряд ли когда нибудь будет.

    Так же к серверной части относится собственно СУБД - файл boot/dbms.lua, который благодаря своему расположению стартует автоматически и работает в фоновом режиме, что позволяет запускать на одном компьютере и сервер и клиент.

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

     

    В клиентскую часть входят библиотека lib/mysql.lua и программа-монитор bin/mysql_mon.lua предоставляющая доступ к базам данных из командной строки.

    Библиотека mysql предоставляет следующие функции для работы с базами данных:

     

     

    mysql.connect ( server , username , password ) --Открывает соединение с сервером MySQL и возвращает указатель на сессию
    mysql.close (session) -- Закрывает соединение с сервером MySQL
    mysql.data_seek(result, row_number) -- Перемещает внутренний указатель в результате запроса
    mysql.error(session) --  Возвращает строку ошибки последней операции с MySQL
    mysql.fetch_array(result , result_type)  --  Обрабатывает ряд результата запроса, возвращая ассоциативный массив, численный массив или оба. 
    mysql.fetch_assoc(result) --  Обрабатывает ряд результата запроса и возвращает ассоциативный массив.
    mysql.fetch_row(result)  -- Обрабатывает ряд результата запроса и возвращает неассоциативный массив.
    mysql.num_fields( result ) -- Возвращает количество полей результата запроса
    mysql.num_rows( result ) -- Возвращает количество рядов результата запроса
    mysql.query( query, session )  -- Посылает запрос MySQL--Строка запроса НЕ должна заканчиваться точкой с запятой
    Если в функции, использующей указатель сессии, параметр session пропущен, будет использоваться последняя активная сессия
    Подробное описание этих и других функций можно почитать на сайте.

     

     

    При реализации функции query я сделал одно небольшое допущение: все служебные слова запроса следует писать строчными (маленькими) буквами.

    SQL-монитор mysql_mon позволяет отправлять запросы к СУБД из командной строки. Я старался сделать его похожим на Command Line Client, поэтому объяснять суть его работы не вижу смысла. Для выхода из программы введите "exit".

    Пример работы с СУБД:

     

     

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

    После запуска монитора вводим команду:

    create database forum; 

    Эта команда создаст новую базу данных с именем "forum". Команда должна заканчиваться точкой с запятой.

    После создания базы, делаем ее активной для текущей сессии:

    use forum; 

    Создадим в этой базе таблицу users. Таблица будет содержать следующие поля:

    - id - идентификатор пользователя (числовое);

    - name - имя пользователя (строковое);

    - rep - репутация (числовое).

    Такая таблица создается командой:

    create table users (id int auto_increment, name varchar, rep int); 

    Создадим в таблице несколько записей командой:

    insert into users (name, rep) values ('user_name', 'user_rep'); 

    Поскольку полю id мы установили признак auto_increment, это поле заполняется автоматически.

    Вот что у меня получилось:

    post-7-0-62668800-1458812847_thumb.png

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

    select * from users; 

    Для выхода из mysql_mon введите команду exit (без точки с запятой)

    post-7-0-93359300-1458813603_thumb.png

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

    local mysql=require("mysql") --подключаем библиотеку
    
    -- пытаемся подключиться к sql-серверу
    -- поскольку сервер находится на локальной машине, в параметрах ничего не указываем
    local result=mysql.connect()
    -- анализируем результат и, при необходимости, выдаем сообщение
    if not result then print(mysql.error()) return end
    
    -- открываем базу данных "forum"
    result=mysql.query("use forum")
    if not result then print(mysql.error()) return end
    
    -- посылаем sql-запрос на получение выборки
    result=mysql.query("select name, rep from users where rep>2000 order by rep")
    if not result then print(mysql.error()) return end
    
    -- преобразуем результат запроса в ассоциативный массив и выводим его построчно
    for user in mysql.fetch_arrays(result, mysql.ASSOC) do
      print(user.name, user.rep)
    end
    
    -- закрываем соединение с сервером
    mysql.close() 

     

     

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

    • Нравится 7

  10. Вопрос №1. Зачем нужна Web-часть? Неужели информацию о сессиях и паролях нельзя хранить на супервайзере без выхода в реальный мир?

    Вопрос №2. Анализ ПО виртуального командного блока показал его абсолютную незащищенность от несанкционированного использования. В случае возрождения банка это ПО планируется оставить без изменения?


  11. Добавлены функции load и draw.

    Пример наложения изображения на пентаграмму:

    g.setColor(0xff0000)
    g.circle(80,50,44)
    g.polygon(80,93, 54,16, 120,64, 40,64, 106,16, 0xffff00)
    g.draw("pic.png",1,1)
    

    post-7-0-15403100-1456156623_thumb.png

     

    онлайн PNG-редактор

    • Нравится 6

  12. @LeshaInc, это не догма. Другое дело, хотелось бы какое то описание игры, а не просто ссылку (которая у меня, почему-то не открывается)

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