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

Управление роботом через Terminal Glasses

Рекомендуемые сообщения

Всем здравствуйте!
 
OC - Управление роботом ver. 2.0
Авторы: xMikhailx, WildOne.
 
h_1441044563_4931960_02ac697efa.png
 
  Вышло обновление нашей программы!!!  :)
  Как и ранее, суть программы заключается в управлении роботом из ОС через очки (Terminal Glasses), на данный момент для реализации работы программы нужно достаточно много ресурсов, т.к. нужен сервер (компьютер) + робот (Tier 3) + Terminal Glasses Bridge + Terminal Glasses. Всё работает через связанную плату (Linked Card).
 
  CHANGELOG:

ver.2.0
*Полностью переработан графический интерфейс.
+Добавлена функция: подсчёт количества слотов инвентаря
*Доработана функция: drop(up|dn) [номер слота] [кол-во предметов]
+Добавлена функция: rs (подача редстоуна)
+Добавлена функция: mon (полноценная функция мониторинга робота [часть функционала взято у AlexCC и доработано])
+Добавлена функция: inv (вывод инвентаря в виде псевдотаблицы)
+Добавлена функция: удаление слушателей при перезапуске программы (Спасибо Zer0Galaxy за помощь)
+Остальные мелкие доработки и оптимизация

 
  Команды для управления роботом (вводятся с очками в чат, начиная с $$):

$$clear - очищает интерфейс очков.
$$gf [количество блоков] - движение вперёд на указанное [количество блоков], если не указано, движение на один блок. 
$$gfd [количество блоков] - аналогично предыдущему, но вскапывает блоки, встречающиеся на пути. (блок перед роботом и над роботом, чтобы человек мог пройти)  
$$gb [количество блоков] - движение назад на указанное [количество блоков], если не указано, движение на один блок. 
$$tr - поворот направо на 90 градусов.
$$tl - поворот налево на 90 градусов. 
$$ta - поворот на 180 градусов. 
$$up [количество блоков] - подъем на указанное [количество блоков], если не указано, движение на один блок. 
$$upd [количество блоков] - аналогично предыдущему, но вскапывает блоки, встречающиеся на пути. 
$$dn [количество блоков] - спуск на указанное [количество блоков], если не указано, движение на один блок. 
$$dnd [количество блоков] - аналогично предыдущему, но вскапывает блоки, встречающиеся на пути. 
$$use - использовать предмет перед роботом (правая кнопка мыши). 
$$useup - использовать предмет над роботом (правая кнопка мыши). 
$$usedn - использовать предмет под роботом (правая кнопка мыши). 
*$$drop [номер слота] [кол-во предметов] - выложить вещи из слота инвентаря перед роботом(если не указано одно число,то выкладывет весь слот ,а если не указаны оба числа, то выкладывает весь инвентарь) (если перед роботом сундук, то в сундук). 
*$$dropup [номер слота] [кол-во предметов] -  выложить вещи из слота инвентаря над роботом (если не указано одно число,то выкладывет весь слот ,а если не указаны оба числа, то выкладывает весь инвентарь) (если над роботом сундук, то в сундук). 
*$$dropdn - [номер слота] [кол-во предметов] - выложить вещи из слота инвентаря под роботом (если не указано одно число,то выкладывет весь слот ,а если не указаны оба числа, то выкладывает весь инвентарь) (если под роботом сундук, то в сундук). 
$$suck - забрать все вещи перед роботом (если перед роботом сундук, то из сундук). 
$$suckup - забрать все вещи над роботом (если над роботом сундук, то из сундук). 
$$suckdn - забрать все вещи под роботом (если под роботом сундук, то из сундук).
+$$mon - выводит на экран состояние робота.
+$$inv - выводит на экран инвентарь робота.
+$$rs - первое использование подаёт сигнал редстоуна/второе - отключает сигнал редстоуна.

 
  Схема такова:
1). Компьютер (Tier 3) - это и есть сервер. Применение: компьютер соединить с Terminal Glasses Bridge'м. Функция: принимает команды от очков -> передаёт на робота команды -> принимает ответы от робота -> выводит ответы на очки.
Компоненты:

Связанная плата - обязательно, вся работа основана на ней!
Графическая карта (желательно Tier 2 или выше)
Интернет карта (по желанию, нужна для скачивания программы)
Процессор (можно любой)
Оперативная память (много не нужно, тестировалось всё на 2-ух картах Tier 2)
Винчестер (любой)
 
Вот наш пример сборки компьютера:
h_1441044213_3021297_0cf991e097.png

 
2). Робот (Tier 3) - рабочая сила   :) Функция: принимает команды от сервера -> выполняет команды -> отправляет ответ на сервер.
Компоненты:

Связанная плата - обязательно, вся работа основана на ней!
Контроллер инвентаря - обязательно.
Редстоун карта - обязательно, не ниже Tier 1.
Далее компоненты по желанию. 
 
Вот наш пример сборки робота:
h_1441044436_1340566_c4e2d83f1c.png

 
Скриншоты:

Сообщение робота:

h_1441045492_7080126_e80ed47f7c.png

Мониторинг:

h_1441045521_6867631_62d0ae2698.png

Инвентарь:

h_1441045801_9664610_755137a8e9.png

 
  Сами программы:
  1. Для сервера: http://pastebin.com/2kH0eNeF (для установки введите pastebin get 2kH0eNeF server.lua)
    Код:

    ----------------------------------------------------
    --              Универсальная программа           --  
    --    для ручного управления роботом c помощью    --
    --              OpenPeripheral Glasses!           --
    --          проект http://computercraft.ru        --  
    --            2015, © xMikhail, WildOne           --
    --                    ver. 2.0                    -- 
    ----------------------------------------------------
    -----------------------SERVER-----------------------
    
    
    local event = require("event")
    local tunnel = require("component").tunnel
    local g = require("component").openperipheral_bridge
    local s = require("serialization")
    
    color1 = 0x00FFFF
    color2 = 0xFFFFFF
    color3 = 0x818181
    height = 30
    
    --FUNCTIONS
    
    function clear()
      g.clear()
      g.sync()
    end
    
    if Message then
      if event.ignore("modem_message",Message) then
        print("Слушатель modem_message удалён")
      else
        print("Слушатель modem_message не удалён")
      end
    end
    
    if glasscommand then
      if event.ignore("glasses_chat_command",glasscommand) then
        print("Слушатель glasses_chat_command удалён")
      else
        print("Слушатель glasses_chat_command не удалён")
      end
    end
    
    function MassStringLength(StrMass,amount)
      local StrLengthMass = {}
      for n = 1, amount do
        StrLengthMass[n] = string.len(StrMass[n])
      end
      return StrLengthMass
    end
        
        
    
    function FindMax(mass,amount)
      if amount < 1 then 
        return nil
      else
        local max = mass[1]
        for n = 1, amount do
          if mass[n] > max then
            max = mass[n]
          end
        end
      return max
      end
    end
    
    function AddInfBox(infbox)
        amount = string.len(infbox)
    length = amount * 3.4
      g.clear()
        g.addBox(1,1,length + 18,3,color1,1)
        g.addBox(5,4,length + 10,height,color1,0.5)
        g.addBox(1,height+4,length + 18,3,color1,1)
        g.addText(length / 2 - 5,8,"Робот:",color2)
        g.addText(21,20,infbox,color2)
      g.sync()
    end
    
    function MonBox(monbox)
      val = {}
      val = s.unserialize(monbox)
      g.clear()
    g.addBox(1,1,240,5,color1,1)
        g.addBox(6,6,230,70,color3,0.7)
    g.addBox(1,71,240,5,color1)
      g.addText(90,8,"Статус робота :",color2)
        g.addText(9,18,"Имя робота / Опыт робота",color2)
            g.addText(150,18,val.name.." / "..val.level,color2)
        g.addText(9,28,"Всего / Свободно слотов",color2)
            g.addText(150,28,val.inv_size.." / "..val.freeslots,color2)
        g.addText(9,38,"Всего / Оставшийся заряд",color2)
            g.addText(150,38,val.MAX_EU.." / "..val.EU,color2)
        g.addText(9,48,"Всего / Свободно памяти",color2)
            g.addText(150,48,val.TOTAL_MEM.." Кб / "..val.freeMEM.." Кб",color2)
        g.addText(9,58,"Время работы / Редстоун",color2)
            g.addText(150,58,val.uptime.." мин / "..val.rsstatus,color2)
      g.sync()
    end
    
    function InvBox(invbox)
      inv = {}
      inv = s.unserialize(invbox)
      g.clear()
      g.sync()
        local maxname = FindMax(MassStringLength(inv.name,inv.busyslots),inv.busyslots)
        if maxname == nil then
          g.clear()
          g.addBox(1,1,100,10,color1,0.7)
          g.addText(20,3,"Инвентарь робота :",color2).setScale(0.8)
          g.addBox(1,11,100,8,color3,0.5)
        g.addText(25,13,"Нет предметов!",color2).setScale(0.8)
        g.sync()
      end
      local amount1 = maxname
      local length1 = amount1 * 5.3
      local x1 = 6
      local y1 = 11
      local amountStolb = math.ceil(inv.busyslots / 24)
        if amount1 < 15 then 
        length1 = 100
      end
      g1 = length1 * amountStolb + 10
      g.addBox(1,1,g1,10,color1,0.7)
      g2 = (length1 * amountStolb) / 2 - 30
      g.addText(g2,2,"Инвентарь робота :",color2).setScale(0.8)
      g.sync()
      for i=1,inv.busyslots do
        local i2 = i % 2
        local h1 = color3
        local h2 = color1
        for k = 1,amountStolb do
          local k1 = 24 * k
          if i > k1 then
            x1 = 6 + length1 * k
            y1 = 11 - 168 * k
          end
        end
        if i2 == 0 then
          local i3 = (i - 1) * 7 + y1
          local i4 = (i - 1) * 7 + (y1 + 1)
          g.addBox(x1,i3,length1,7,h2,0.5)
          g.addText(x1,i4,"| "..inv.slot[i].."  "..inv.name[i],color2).setScale(0.8)
          g.addText(x1 + length1 - 9 ,i4,tostring(inv.amount[i]),color2).setScale(0.8)
          g.sync()
        else
          local i3 = (i - 1) * 7 + y1
          local i4 = (i - 1) * 7 + (y1 + 1)
          g.addBox(x1,i3,length1,7,h1,0.5)
          g.addText(x1,i4,"| "..inv.slot[i].."  "..inv.name[i],color2).setScale(0.8)
          g.addText(x1 + length1 - 9 ,i4,tostring(inv.amount[i]),color2).setScale(0.8)
          g.sync()
        end
      end
    end
    function _G.Message(_,_,_,_,_,msgbox)
      msg = {}
      msg[1] = tonumber(string.sub(msgbox,1,1))
      msg[2] = string.sub(msgbox,3)
      if msg[1] == 1 then
        AddInfBox(msg[2])
      elseif msg[1] == 2 then
        MonBox(msg[2])
      elseif msg[1] == 3 then
        InvBox(msg[2])
    end
    end
    
    function _G.glasscommand(_,_,nick,_,gcom)
      print("Игрок: "..nick.." использовал команду: "..gcom)
      if gcom == "clear" then clear()
      else
        tunnel.send(gcom)
      end
    end
    
    event.listen("glasses_chat_command",glasscommand)
    event.listen("modem_message",Message)

  2. Для робота: http://pastebin.com/PYZqsPXw (для установки введите pastebin get PYZqsPXw robot.lua)
    Код:

    ----------------------------------------------------
    --              Универсальная программа           --  
    --    для ручного управления роботом c помощью    --
    --              OpenPeripheral Glasses!           --
    --          проект http://computercraft.ru        --  
    --            2015, © xMikhail, WildOne           --
    --                    ver. 2.0                    -- 
    ----------------------------------------------------
    ------------------------ROBOT-----------------------
    
    local event = require("event")
    local computer = require('computer')
    local r = require("robot")
    local tunnel = require("component").tunnel
    local rs = require("component").redstone
    local s = require("serialization")
    local sides = require('sides')
    local icontroller = require('component').inventory_controller
     
    local t = {}
     
    --===================================--
    --            Monitoring             --
    --===================================--
     
    local val = {}
    val.inv_size = r.inventorySize()
     
    function getEU()
            return math.floor(computer.energy())
    end
     
    function freeMEM()
            return math.floor(computer.freeMemory()/1024)
    end
    
    function freeslots()
            local freeslots=0
            for i=1,val.inv_size do
                    if r.count(i)==0 then
                            freeslots = freeslots + 1
                    end
            end
            return freeslots
    end
    
    rsstatus = "выкл"
     
    function getEU()
            return math.floor(computer.energy())
    end
    
    function freeMEM()
            return math.floor(computer.freeMemory()/1024)
    end
     
    function t.mon()
            val.name = r.name()
            val.level = r.level()
            val.freeslots = freeslots()
            val.MAX_EU  = computer.maxEnergy()
            val.TOTAL_MEM = computer.totalMemory()/1024
            val.EU = getEU()
            val.freeMEM = freeMEM()
            val.uptime = math.floor(computer.uptime()/60)
            val.rsstatus = rsstatus
            tunnel.send("2 "..s.serialize(val))
    end
    
    --===================================--
    --           INVENTORY DATA          --
    --===================================--
    
    inv = {}
    inv.slot = {}
    inv.name = {}
    inv.amount = {}
    
    function t.inv()
            local frsl = freeslots()
            inv.busyslots = val.inv_size - frsl
            local c = 1
            for i = 1, val.inv_size do
                    local amount = r.count(i)
                    if amount > 0 then
                            r.select(i)
                            stack = icontroller.getStackInInternalSlot(i)
                            inv.slot[c] = i
                            inv.name[c] = stack.label
                            inv.amount[c] = amount
                            c = c + 1               
                    end
            end
            c = 1
            i = 1
            tunnel.send("3 "..s.serialize(inv))
    end
    
    --===================================--
    --         MOVEMENT FUNCTIONS        --
    --===================================--
     
     
    function t.gf()
            local c = 1
            if act[2]==nil then act[2]=1 end
            for c = 1,act[2] do
                    r.forward()
            end
            tunnel.send("1 Я сдвинулся на "..act[2].." блок(ов) вперёд")
            print("Я сдвинулся на "..act[2].." блок(ов) вперёд")
            c = 1
    end
     
    function t.gfd()
            local dblocks = 0
            if act[2]==nil then act[2]=1 end
            for c = 1,act[2] do
                    repeat
                            if r.swing() then dblocks = dblocks+1 end
                            if r.swingUp() then dblocks = dblocks+1 end
                    until r.detect()==false or r.detectUp()==false
                    r.forward()
                    if r.swingUp() then dblocks = dblocks+1 end
            end
            tunnel.send("1 Я сдвинулся на "..act[2].." блок(ов) вперёд и вскопал "..dblocks.." блок(ов)")
            print("Я сдвинулся на "..act[2].." блок(ов) вперёд и вскопал "..dblocks.." блок(ов)")
            c = 1
    end
     
    function t.gb()
            local c = 1
            if act[2]==nil then act[2]=1 end
            for c = 1,act[2] do
                    r.back()
            end
            tunnel.send("1 Я сдвинулся на "..act[2].." блок(ов) назад")
            print("Я сдвинулся на "..act[2].." блок(ов) назад")
            c = 1
    end
     
    function t.up()
            local c = 1
            if act[2]==nil then act[2]=1 end
            for c = 1,act[2] do
                    r.up()
            end
            tunnel.send("1 Я поднялся на "..act[2].." блок(ов)")
            print("Я поднялся на "..act[2].." блок(ов)")
            c = 1
    end
     
    function t.upd()
            local dblocks = 0
            local c = 1
            if act[2]==nil then act[2]=1 end
            for c = 1,act[2] do
                    repeat
                            if r.swingUp() then dblocks = dblocks+1 end
                    until r.detectUp()==false
                    r.up()
                    if r.swingUp() then dblocks = dblocks+1 end
            end
            tunnel.send("1 Я поднялся на "..act[2].." блок(ов) и вскопал "..dblocks.." блок(ов)")
            print("Я поднялся на "..act[2].." блок(ов) и вскопал "..dblocks.." блок(ов)")
            c = 1
    end
     
    function t.dn()
            local c = 1
            if act[2]==nil then act[2]=1 end
            for c = 1,act[2] do
                    r.down()
            end
            tunnel.send("1 Я спустился на "..act[2].." блок(ов)")
            print("Я спустился на "..act[2].." блок(ов)")
            c = 1
    end
     
    function t.dnd()
            local dblocks = 0
            local c = 1
            if act[2]==nil then act[2]=1 end
            for c = 1,act[2] do
                    repeat
                            if r.swingDown() then dblocks = dblocks+1 end
                    until r.detectDown()==false
                    r.down()
            end
            tunnel.send("1 Я спустился на "..act[2].." блок(ов) и вскопал "..dblocks.." блок(ов)")
            print("Я спустился на "..act[2].." блок(ов) и вскопал "..dblocks.." блок(ов)")
            c = 1
    end
    
    function t.tr()
            r.turnRight()
            tunnel.send("1 Я повернулся направо")
            print("Я повернулся направо")
    end
     
    function t.tl()
            r.turnLeft()
            tunnel.send("1 Я повернулся налево")
            print("Я повернулся налево")
    end
     
    function t.ta()
            r.turnAround()
            tunnel.send("1 Я повернулся на 180 градусов")
            print("Я повернулся на 180 градусов")
    end
     
    --===================================--
    --            USE FUNCTIONS          --
    --===================================--
     
    function t.rs()
            if rsstatus=="выкл" then
                    rsstatus="вкл"
                    rs.setOutput(sides.front, 15)
                    rs.setOutput(sides.bottom, 15)
                    rs.setOutput(sides.top, 15)
                    tunnel.send("1 Редстоун включен")
                    print("Редстоун включен")
            else 
                    rsstatus="выкл"
                    rs.setOutput(sides.front, 0)
                    rs.setOutput(sides.bottom, 0)
                    rs.setOutput(sides.top, 0)     
                    tunnel.send("1 Редстоун выключен")
                    print("Редстоун выключен")
            end
    end
     
    function t.use()
            r.use()
            tunnel.send("1 Я щёлкнул правой мыши перед собой")
            print("Я щёлкнул правой мыши перед собой")
    end
     
    function t.useup()
            r.useUp()
            tunnel.send("1 Я щёлкнул правой мыши над собой")
            print("Я щёлкнул правой мыши над собой")
    end
     
    function t.usedn()
            r.useDown()
            tunnel.send("1 Я щёлкнул правой мыши под собой")
            print("Я щёлкнул правой мыши под собой")
    end
     
    --===================================--
    --        INVENTORY FUNCTIONS        --
    --===================================--
     
    function t.drop()
            local amountItems = 0
            act[2] = tonumber(act[2])
    	act[3] = tonumber(act[3])
            if act[3] == nil then
                    if act[2] == nil then
                            for d=1,val.inv_size do
                                    r.select(d)
                                    r.drop(r.count())
                            end
                    tunnel.send("1 Я выбросил все вещи перед собой(или в сундук)")
                    print("Я выбросил все вещи перед собой(или в сундук)")
                    else
                            r.select(act[2])
                            r.drop(r.count())
                    tunnel.send("1 Я выбросил все вещи из слота "..act[2].." перед собой(или в сундук)")
                    print("Я выбросил все вещи из слота "..act[2].." перед собой(или в сундук)")
                    end
            else
                    r.select(act[2])
                    amountItems = r.count()
                    r.drop(act[3])
                    if act[3] > amountItems then
                            tunnel.send("1 Я выбросил "..amountItems.." вещь(-ей) из слота "..act[2].." перед собой(или в сундук)")
                            print("Я выбросил "..amountItems.." вещь(-ей) из слота "..act[2].." перед собой(или в сундук)")
                    else
                            tunnel.send("1 Я выбросил "..act[3].." вещь(-ей) из слота "..act[2].." перед собой(или в сундук)")
                            print("Я выбросил "..act[3].." вещь(-ей) из слота "..act[2].." перед собой(или в сундук)") 
                    end
            end
            amountItems = 0
            r.select(1)
    end
     
    function t.dropup()
           local amountItems = 0
            act[2] = tonumber(act[2])
    	act[3] = tonumber(act[3])
            if act[3] == nil then
                    if act[2] == nil then
                            for d=1,val.inv_size do
                                    r.select(d)
                                    r.dropUp(r.count())
                            end
                    tunnel.send("1 Я выбросил все вещи вверх(или в сундук)")
                    print("Я выбросил все вещи вверх(или в сундук)")
                    else
                            r.select(act[2])
                            r.dropUp(r.count())
                    tunnel.send("1 Я выбросил все вещи из слота "..act[2].." вверх(или в сундук)")
                    print("Я выбросил все вещи из слота "..act[2].." вверх(или в сундук)")
                    end
            else
                    r.select(act[2])
                    amountItems = r.count()
                    r.dropUp(act[3])
                    if act[3] > amountItems then
                            tunnel.send("1 Я выбросил "..amountItems.." вещь(-ей) из слота "..act[2].." вверх(или в сундук)")
                            print("Я выбросил "..amountItems.." вещь(-ей) из слота "..act[2].." вверх(или в сундук)")
                    else
                            tunnel.send("1 Я выбросил "..act[3].." вещь(-ей) из слота "..act[2].." вверх(или в сундук)")
                            print("Я выбросил "..act[3].." вещь(-ей) из слота "..act[2].." вверх(или в сундук)") 
                    end
            end
            amountItems = 0
            r.select(1)
    end
     
    function t.dropdn()
           local amountItems = 0
            act[2] = tonumber(act[2])
    	act[3] = tonumber(act[3])
            if act[3] == nil then
                    if act[2] == nil then
                            for d=1,val.inv_size do
                                    r.select(d)
                                    r.dropDown(r.count())
                            end
                    tunnel.send("1 Я выбросил все вещи вниз(или в сундук)")
                    print("Я выбросил все вещи вниз(или в сундук)")
                    else
                            r.select(act[2])
                            r.dropDown(r.count())
                    tunnel.send("1 Я выбросил все вещи из слота "..act[2].." вниз(или в сундук)")
                    print("Я выбросил все вещи из слота "..act[2].." вниз(или в сундук)")
                    end
            else
                    r.select(act[2])
                    amountItems = r.count()
                    r.dropDown(act[3])
                    if act[3] > amountItems then
                            tunnel.send("1 Я выбросил "..amountItems.." вещь(-ей) из слота "..act[2].." вниз(или в сундук)")
                            print("Я выбросил "..amountItems.." вещь(-ей) из слота "..act[2].." вниз(или в сундук)")
                    else
                            tunnel.send("1 Я выбросил "..act[3].." вещь(-ей) из слота "..act[2].." вниз(или в сундук)")
                            print("Я выбросил "..act[3].." вещь(-ей) из слота "..act[2].." вниз(или в сундук)") 
                    end
            end
            amountItems = 0
            r.select(1)
    end
     
    function t.suck()
            r.select(1)
            while r.suck()==true do
                    r.suck()
            end
            tunnel.send("1 Я забрал вещи перед собой(или из сундука)")
            print("Я забрал вещи перед собой(или из сундука)")
    end
     
    function t.suckup()
            r.select(1)
            while r.suckUp()==true do
                    r.suckUp()
            end
            tunnel.send("1 Я забрал вещи над собой(или из сундука)")
            print("Я забрал вещи над собой(или из сундука)")
    end
     
    function t.suckdn()
            r.select(1)
            while r.suckDown()==true do
                    r.suckDown()
            end
            tunnel.send("1 Я забрал вещи под собой(или из сундука)")
            print("Я забрал вещи под собой(или из сундука)")
    end
     
    function error()
            tunnel.send("1 Ошибка. Неправильная команда")
            print("Ошибка. Неправильная команда")
    end
     
    if obr then
            if event.ignore("modem_message",obr) then
                    print("Слушатель удалён")
            else
                    print("Слушатель не удалён")
            end
    end
     
    function _G.obr(_,_,_,_,_,com,_)
            local i = 1
            act = {}
            for word in string.gmatch(com, "%w+") do
                    --print(word)
                    act[i] = word
                    i = i + 1
            end
            print(act[1])
            print(act[2])
            if t[act[1]] then t[act[1]]()
            else error()
    end
    end
     
    event.listen("modem_message",obr)

 
Старые версии программы:

ver. 1.0

Для сервера: http://pastebin.com/DB4va57x (для установки введите pastebin get DB4va57x server.lua)
Для робота: http://pastebin.com/ZYNCQZx5 (для установки введите pastebin get ZYNCQZx5 robot.lua)

 
  Как видите программа требует больших материальных затрат, но она очень удобна в использовании (особенно в грифе игроков :)) и легка в освоении. Это далеко не последняя версия программы. Есть ещё планы разработки некоторых функций и их автоматизации (но о них в следующих версиях).
  Ждем замечаний, все баги будут устраняться. Если есть пожелания, обязательно пишите ;)
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Хорошая программка, судя по оформлению, но для грифа она вряд ли подойдет. Во-первых через чат очень медленное и неудобное управление, нет оперативности совсем, во-вторых, чаще всего юзверь скорее всего, при грифе улетит далеко от своего домика, и не факт, что у него есть чанклодырь для работы станции связи в домике, и как следствие, управление роботом будет невозможно. Для грифа, наверное, удобнее юзать связку робот-планшет, например Байта-грифера.

 

П.С. Авторы: xMikhailxWildOne  - как я понял, это соавтор и второй разраб? Выдал тоже ему наградку-байта

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

П.С. Авторы: xMikhailxWildOne  - как я понял, это соавтор и второй разраб? Выдал тоже ему наградку-байта

Да программку пишем вместе, пока на нашем серве , ждём IT-light.

 

Хорошая программка, судя по оформлению, но для грифа она вряд ли подойдет. Во-первых через чат очень медленное и неудобное управление, нет оперативности совсем, во-вторых, чаще всего юзверь скорее всего, при грифе улетит далеко от своего домика, и не факт, что у него есть чанклодырь для работы станции связи в домике, и как следствие, управление роботом будет невозможно. Для грифа, наверное, удобнее юзать связку робот-планшет, например Байта-грифера.

 

Если честно , то да: нужен чанклоадер , в этом проблема , но для игрока с роботом tier 3 он не такая уж большая проблема. А вот насчёт управления могу поспорить , если хотя бы пол часа на роботе погонять, то управляется он побыстрее байта ;) (всё дело в привычке)

 

P.S. Странную награду ты мне выдал ;)

P.S.S. Этот робот задумывался в основном не для грифа , но это пока в разработке.

Изменено пользователем WildOne

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Предлагаю устроить соревнование по скорости грифа сбора ресурсов между Байтом и Очкороботом. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Предлагаю устроить соревнование по скорости грифа сбора ресурсов между Байтом и Очкороботом. 

Не называй, пожалуйста, его Очкоробот, ладно?  :) (Мы потом придумаем что-нибудь..)

А то, звучит плохо) Да и мы не играем на дримсе, лайта ждём.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

"Очкоробот"  :D

Нормальное рабочее название))))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

"Очкоробот"  :D

Нормальное рабочее название))))

Очень плохо звучит)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Minecraft Robot Controlling Program — MRCP [emoji14]

Вот это уже гораздо лучше звучит [emoji2]

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не хотите называть прогу "очковый робот", назовите прогу "Кобра" :D

Но вот эти "программинг девелоп роботинг интертеймент энд юзинг контролинг фор майнкрафтинг бай Мясорубинг" и прочее - это лишнее и разрывает мозг, особенно СяброРобот, СяброМаркет, СяброАПпи, опенклудинг, опенджастинг, и глаДоксисГлакаксис  :giggle:    Используйте какие-то русские имена программ, которые понятны нам,  Иванам=)  Поверьте мне, американцы наш сайт не читают и ведать не ведают про него)

 

Даже в игровом чате удобнее сообщить другим игрокам, мол для твоих целей поищи программу "Кобра" на форуме, или скачай программу браузер "Арбузер", или прогу для управления реактором "Нейтрон", для защиты домика есть хорошая программа, написанная Zer0Galaxy "Периметр", или "Рекурсивный Робот"  Тоторо и т.д.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

назовите прогу "Кобра"
Не знаю как разработчикам, а мне нравится.

Ждем IT-Light для создания полигона роботов-взломщиков

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

AlexCC, национализмом попахивает.При чём здесь американцы?Английский язык был придуман далеко до заселения Америки.

Ты еще поставь lua где синтаксис на русском, будет вообще шедевр.

Изменено пользователем NEO

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ингрийский — язык какой-то межмировой, тыры-пыры, не важно. Важно то, что тот же "ThiefBot" поймётся и русскими, и американцами, и китайцами, т. д. Напирмер, Hologram Editor — название идеальное, суть отражает, на англофорум по ОС публиковать можно. Другой вопрос, а нужна ли такая мультиязычность этой программе? Думаю, нет, так что русские имена вполне сойдут.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ты еще поставь lua где синтаксис на русском, будет вообще шедевр.

локальный видеокарта = запрос("компонент").видеокарта
локальный игрок = запрос(игрок)

для и=1,10,1 делать
  видеокарта.установитьФон(красный)
  видеокарта.установить(и,1," ")
конец

если игрок.имя == "Сталин" тогда
  писать("Слава Сталину!")
конец
Изменено пользователем LeshaInc

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
локальный видеокарта = запрос("компонент").видеокарта
локальный игрок = запрос(игрок)

для и=1,10,1 делать
  видеокарта.установитьФон(красный)
  видеокарта.установить(и,1," ")
конец

если игрок.имя == "Сталин" тогда
  писать("Слава Сталину!")
конец

ну приблизительно они так и видят свои программы)  Но так как у нас мозгов не хватает создать что-то свое и мы жили и живем в застое и мы дикий народ и очень отстали в ИТ, нам приходится пользоваться всем заморским пиратским ПО, языками разработки и пить кока-колу с чипсами :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ну приблизительно они так и видят свои программы)  Но так как у нас мозгов не хватает создать что-то свое и мы жили и живем в застое и мы дикий народ и очень отстали в ИТ, нам приходится пользоваться всем заморским пиратским ПО, языками разработки и пить кока-колу с чипсами :)

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

...

Я еще застал в школе преподавание алгоритмического языка по Ершову. Со своими "пока" "нц" и "кц".

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

...

Я еще застал в школе преподавание алгоритмического языка по Ершову. Со своими "пока" "нц" и "кц".

Не ты один учил алгоритмический язык :P  А потом, когда увидел первые строки Паскаля, то понял - что достаточно свой алгоритм перевести на "аглицкий" и  не забыть о "точке с запятой" :D

 

З.Ы. И вообще https://ru.wikipedia.org/wiki/%D0%94%D0%A0%D0%90%D0%9A%D0%9E%D0%9D -_-

Изменено пользователем davial

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


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