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

serafim

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

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

  • Посещение

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

    46

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


  1. Всех с праздником !

     

    Программа @Asior pastebin.com/bji2zXCq не плохая, но не имеет интерфейса.

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

     

    тут шаблон отрисовки по координатам

    Скрытый текст
    
    local comp = require('component')
    local gpu = comp.gpu
    
    gpu.setResolution(28,15)
    gpu.setBackground(0x000000)
    gpu.fill(1,1,28,15," ")
    gpu.setForeground(0x669999)
    
     gpu.set(1,1,"┌──────────────────────────┐")
     gpu.set(1,2,"│  │  │  │  │  │  │  │  │  │")
     gpu.set(1,3,"│──────────────────────────│")
     gpu.set(1,4,"│  │  │  │  │  │  │  │  │  │")
     gpu.set(1,5,"│──────────────────────────│")
     gpu.set(1,6,"│  │  │  │  │  │  │  │  │  │")
     gpu.set(1,7,"│──────────────────────────│")
     gpu.set(1,8,"│  │  │  │  │  │  │  │  │  │")
     gpu.set(1,9,"│──────────────────────────│")
    gpu.set(1,10,"│  │  │  │  │  │  │  │  │  │")
    gpu.set(1,11,"│──────────────────────────│")
    gpu.set(1,12,"│  │  │  │  │  │  │  │  │  │")
    gpu.set(1,13,"└──────────────────────────┘")
    
    gpu.setForeground(0xFF9900)
    
    local xy = {
    {"2","2"},{"5","2"},{"8","2"},{"11","2"},{"14","2"},{"17","2"},{"20","2"},{"23","2"},{"26","2"},
    {"2","4"},{"5","4"},{"8","4"},{"11","4"},{"14","4"},{"17","4"},{"20","4"},{"23","4"},{"26","4"},
    {"2","6"},{"5","6"},{"8","6"},{"11","6"},{"14","6"},{"17","6"},{"20","6"},{"23","6"},{"26","6"},
    {"2","8"},{"5","8"},{"8","8"},{"11","8"},{"14","8"},{"17","8"},{"20","8"},{"23","8"},{"26","8"},
    {"2","10"},{"5","10"},{"8","10"},{"11","10"},{"14","10"},{"17","10"},{"20","10"},{"23","10"},{"26","10"},
    {"2","12"},{"5","12"},{"8","12"},{"11","12"},{"14","12"},{"17","12"},{"20","12"},{"23","12"},{"26","12"},
    }
    
    while true do
      local slot = math.random(1,54)
      local per = math.random(1,99)
      gpu.set(1,15,"slot "..slot.." = "..per.."  ")
      gpu.set(tonumber(xy[slot][1]),tonumber(xy[slot][2]),tostring(per))
      os.sleep(3)
    end

     

    GCZXSLD.gif

     

    Есть ли иной способ вывода значений без использования таблицы координат ?

     

     


  2. ну так подай сигнал на две стороны,  две строки,  также и выключить значение с 15 на 0

    redstone.setOutput(sides.left, 15)  --с лева
    redstone.setOutput(sides.right, 15) --с права
    
    --"left","right","front","back","bottom","top".

     

    • Спасибо 1

  3. здесь один датчик и одна сторона , может кому пригодится

    Скрытый текст

     

    
    local event = require('event')
    local com = require('component')
    local sensor = com.motion_sensor
    local rs = com.redstone
    local sides = require('sides')
    
    local whitelist = {"serafim","zombiman"}  --список кого впускать
    local sideredstone = "right"  --"left","right","front","back","bottom","top".
    
    local function redset(side, value)
      rs.setOutput(sides[side], value)
    end
    redset(sideredstone, 0)
    
    local function isUser(name)
      for i=1, #whitelist do
        if name == whitelist[i] then 
          return true 
        end
      end
      return false
    end
    
    while true do
      local _, address, x, y, z, name = event.pull('motion')
      --print("x "..math.ceil(x).."  y "..math.ceil(y).."  z "..math.ceil(z))
      print("замечен: "..name)
      if isUser(name) then
        print("дверь открыта")
        redset(sideredstone, 15)
        os.sleep(3)  --время открытой двери
        redset(sideredstone, 0)
      else
        print("посторонним вход запрещен")
        os.sleep(3)
        print(" ")
      end
    end

     


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

     

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

    посмотри SpiderEye Terminal: pastebin.com/bTc7tJKv в качестве примера

     

    --список мобов
    14  monsterlist = {"Spider", "Zombie", "Creeper", "Skeleton", "Enderman", "Sheep", "Cow", "Chicken"}
    
    --перебор списка по строкам
    311  for i=1, #monsterlist do
           if name == monsterlist[i] then 
             return true 
           end
         end

     


  5. что за rednet  ?

    Я бы больше переживал что тут нет проверки на никнейм и сторону от куда игрок подходит, в таком варианте двери будут срабатывать на всех, включая мобов и со всех сторон датчика 

     


  6. всё верно здесь нет команды выключить сигнал, только включить

    redstone.setOutput(sides.front, 15)

    уровень 15

    чтобы выключить поменяй на 0

    redstone.setOutput(sides.front, 0)

    и добавь задержку в секундах

    os.sleep(3)

    итого получим

    local event = require('event')
    local com = require('component')
    local sensor = com.motion_sensor
    local sides = require('sides')
    local redstone = com.redstone
     
    while true do
        local _, address, x, y, z, name = event.pull('motion')
        print(name)
        redstone.setOutput(sides.front, 15)
        os.sleep(3)
        redstone.setOutput(sides.front, 0)
    end

     


  7. Чтобы понять какие данные принимает модем воспользуемся прогой

    local port = 1 --порт модема
    
    local event = require("event")
    local com = require ("component")
    local modem = com.modem
    local number = 0
    
    modem.open(port)
    
    while true do
      number = number + 1
      print("жду сообщение...")
      local e = {event.pull('modem_message')}
      print("сообщение "..number.."\n")
      for a, b in ipairs(e) do
        print(a.." "..tostring(b))
      end
      print(" ")
    end
    

    Обычно принимает в таком виде

    1  событие modem_message
    2  адрес принимающей платы
    3  адрес передающей платы
    4  порт модема
    5  растояние между платами
    6  принятое сообщение
    

    Отправить данные для теста с ПК или планшета можно так

    local port = 1 --порт модема
    
    local com = require ("component")
    local modem = com.modem
    
    print("введите сообщение:")
     
    while true do
      modem.broadcast(port,io.read())
    end
    

    Использовать полученную информацию, например так

    local event = require("event")
    local com = require ("component")
    local modem = com.modem
    
    modem.open(1) --порт модема
    
    local e = {event.pull('modem_message')}
    print(e[6])
    

    В таком виде сообщение будет в шестой строке e[6]

    • Нравится 2

  8. Попробуй такой вариант

    local event = require("event")
    local comp = require("component")
    local modem = comp.modem
    
    modem.open(1)
    modem.broadcast(1,"nanomachines", "setResponsePort", 1)
    os.sleep(1)
    modem.broadcast(1,"nanomachines", "getHealth")
    local e = {event.pull(2,'modem_message')}
    for a, b in ipairs(e) do
      print(a.." "..tostring(b))
    end
    

  9. Если ты имеешь в виду как очистить экран, то можно так

    --подключаем библиотеку
    local term = require("term")
    
    --команда очистить терминал
    term.clear()
    

    А если переменную 

    local _,_,_,_,_,h1,h2,h3 = e.pull("modem_message")
    

    то можно её не очищать , данные в ней заменятся при следующем ответе на сообщение модема, на то она и переменная

     

    И ты мог бы код не в виде скриншота вставлять, а виде кода. В сообщении есть кнопочка с надписью КОД


  10. Например так :

    local shell = require("shell")
    local fs = require("filesystem")
    
    --Массив с программами, которые необходимо загрузить.
    --Первый элемент - ссылка на файл, второй - путь для сохранения файла.
    local applications = {
      { "https://github.com/stripwire/openttablet_os/blob/master/lib/forms.lua", "lib/forms.lua" },
      { "https://github.com/stripwire/openttablet_os/blob/master/menu/menu.lua", "menu.lua" },
    }
    
    --Загружаем файлы
    for i = 1, #applications do
      print("Устанавливаю " .. applications[i][2])
      fs.makeDirectory(fs.path(applications[i][2]) or "")		
      shell.execute("wget " .. applications[i][1] .. " " .. applications[i][2] .. " -fQ")
      os.sleep(0.3)
    end
    print("Готово")

  11. В 18.08.2016 в 19:55, qwertyMAN сказал:
    И когда опыта наберёшься, будешь изначально писать как надо, а не исправлять позже.

    Тут не поспориш,  потому и раздел для начинающих

     

    Totoro

    Поправил, спасибо за замечания


  12. Добавил проверку на ошибки:

    если нет удочки ищем в сундуке, если и там нет ждем пока дадут удочку.

    если заполнен сундук, то прекращаем ловить.

    если нет сигнала от датчика, то выясняем причину: или у робота вместо удочки что то другое, или ошибка конструкции сборки рыболова.

     

    p.s. Хочу байтик :)

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