xMikhailx 35 Опубликовано: 31 августа, 2015 Всем здравствуйте! OC - Управление роботом ver. 2.0 Авторы: xMikhailx, WildOne. Вышло обновление нашей программы!!! Как и ранее, суть программы заключается в управлении роботом из ОС через очки (Terminal Glasses), на данный момент для реализации работы программы нужно достаточно много ресурсов, т.к. нужен сервер (компьютер) + робот (Tier 3) + Terminal Glasses Bridge + Terminal Glasses. Всё работает через связанную плату (Linked Card). Старая тема: http://computercraft.ru/topic/1059-os-upravlenie-robotom-cherez-terminal-glasses/ 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) Винчестер (любой) Вот наш пример сборки компьютера: 2). Робот (Tier 3) - рабочая сила Функция: принимает команды от сервера -> выполняет команды -> отправляет ответ на сервер. Компоненты: Связанная плата - обязательно, вся работа основана на ней! Контроллер инвентаря - обязательно. Редстоун карта - обязательно, не ниже Tier 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) Для робота: 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) Как видите программа требует больших материальных затрат, но она очень удобна в использовании (особенно в грифе игроков ) и легка в освоении. Это далеко не последняя версия программы. Есть ещё планы разработки некоторых функций и их автоматизации (но о них в следующих версиях). Ждем замечаний, все баги будут устраняться. Если есть пожелания, обязательно пишите 4 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex 4 683 Опубликовано: 31 августа, 2015 Хорошая программка, судя по оформлению, но для грифа она вряд ли подойдет. Во-первых через чат очень медленное и неудобное управление, нет оперативности совсем, во-вторых, чаще всего юзверь скорее всего, при грифе улетит далеко от своего домика, и не факт, что у него есть чанклодырь для работы станции связи в домике, и как следствие, управление роботом будет невозможно. Для грифа, наверное, удобнее юзать связку робот-планшет, например Байта-грифера. П.С. Авторы: xMikhailx, WildOne - как я понял, это соавтор и второй разраб? Выдал тоже ему наградку-байта Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Asummonster 592 Опубликовано: 31 августа, 2015 А Алекс всё о грифе Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
WildOne 3 Опубликовано: 31 августа, 2015 (изменено) П.С. Авторы: xMikhailx, WildOne - как я понял, это соавтор и второй разраб? Выдал тоже ему наградку-байта Да программку пишем вместе, пока на нашем серве , ждём IT-light. Хорошая программка, судя по оформлению, но для грифа она вряд ли подойдет. Во-первых через чат очень медленное и неудобное управление, нет оперативности совсем, во-вторых, чаще всего юзверь скорее всего, при грифе улетит далеко от своего домика, и не факт, что у него есть чанклодырь для работы станции связи в домике, и как следствие, управление роботом будет невозможно. Для грифа, наверное, удобнее юзать связку робот-планшет, например Байта-грифера. Если честно , то да: нужен чанклоадер , в этом проблема , но для игрока с роботом tier 3 он не такая уж большая проблема. А вот насчёт управления могу поспорить , если хотя бы пол часа на роботе погонять, то управляется он побыстрее байта (всё дело в привычке) P.S. Странную награду ты мне выдал P.S.S. Этот робот задумывался в основном не для грифа , но это пока в разработке. Изменено 31 августа, 2015 пользователем WildOne 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy 2 187 Опубликовано: 2 сентября, 2015 Предлагаю устроить соревнование по скорости грифа сбора ресурсов между Байтом и Очкороботом. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
evgkul 571 Опубликовано: 2 сентября, 2015 На данный момент мало что соберёшь - солярок улучшенных ни у кого нет(кроме админов), а дома обычно без дыр... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
xMikhailx Автор темы 35 Опубликовано: 2 сентября, 2015 Предлагаю устроить соревнование по скорости грифа сбора ресурсов между Байтом и Очкороботом. Не называй, пожалуйста, его Очкоробот, ладно? (Мы потом придумаем что-нибудь..) А то, звучит плохо) Да и мы не играем на дримсе, лайта ждём. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex 4 683 Опубликовано: 3 сентября, 2015 "Очкоробот" Нормальное рабочее название)))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
xMikhailx Автор темы 35 Опубликовано: 3 сентября, 2015 "Очкоробот" Нормальное рабочее название)))) Очень плохо звучит) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
LeshaInc 625 Опубликовано: 3 сентября, 2015 Очень плохо звучит)Minecraft Robot Controlling Program — MRCP :P Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
xMikhailx Автор темы 35 Опубликовано: 4 сентября, 2015 Minecraft Robot Controlling Program — MRCP [emoji14]Вот это уже гораздо лучше звучит [emoji2] Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex 4 683 Опубликовано: 4 сентября, 2015 Не хотите называть прогу "очковый робот", назовите прогу "Кобра" Но вот эти "программинг девелоп роботинг интертеймент энд юзинг контролинг фор майнкрафтинг бай Мясорубинг" и прочее - это лишнее и разрывает мозг, особенно СяброРобот, СяброМаркет, СяброАПпи, опенклудинг, опенджастинг, и глаДоксисГлакаксис Используйте какие-то русские имена программ, которые понятны нам, Иванам=) Поверьте мне, американцы наш сайт не читают и ведать не ведают про него) Даже в игровом чате удобнее сообщить другим игрокам, мол для твоих целей поищи программу "Кобра" на форуме, или скачай программу браузер "Арбузер", или прогу для управления реактором "Нейтрон", для защиты домика есть хорошая программа, написанная Zer0Galaxy "Периметр", или "Рекурсивный Робот" Тоторо и т.д. 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy 2 187 Опубликовано: 4 сентября, 2015 назовите прогу "Кобра" Не знаю как разработчикам, а мне нравится.Ждем IT-Light для создания полигона роботов-взломщиков Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
NEO 541 Опубликовано: 4 сентября, 2015 (изменено) AlexCC, национализмом попахивает.При чём здесь американцы?Английский язык был придуман далеко до заселения Америки. Ты еще поставь lua где синтаксис на русском, будет вообще шедевр. Изменено 4 сентября, 2015 пользователем NEO 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fingercomp 4 409 Опубликовано: 4 сентября, 2015 Ингрийский — язык какой-то межмировой, тыры-пыры, не важно. Важно то, что тот же "ThiefBot" поймётся и русскими, и американцами, и китайцами, т. д. Напирмер, Hologram Editor — название идеальное, суть отражает, на англофорум по ОС публиковать можно. Другой вопрос, а нужна ли такая мультиязычность этой программе? Думаю, нет, так что русские имена вполне сойдут. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
LeshaInc 625 Опубликовано: 4 сентября, 2015 (изменено) Ты еще поставь lua где синтаксис на русском, будет вообще шедевр. локальный видеокарта = запрос("компонент").видеокарта локальный игрок = запрос(игрок) для и=1,10,1 делать видеокарта.установитьФон(красный) видеокарта.установить(и,1," ") конец если игрок.имя == "Сталин" тогда писать("Слава Сталину!") конец Изменено 4 сентября, 2015 пользователем LeshaInc 3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex 4 683 Опубликовано: 4 сентября, 2015 локальный видеокарта = запрос("компонент").видеокарта локальный игрок = запрос(игрок) для и=1,10,1 делать видеокарта.установитьФон(красный) видеокарта.установить(и,1," ") конец если игрок.имя == "Сталин" тогда писать("Слава Сталину!") конец ну приблизительно они так и видят свои программы) Но так как у нас мозгов не хватает создать что-то свое и мы жили и живем в застое и мы дикий народ и очень отстали в ИТ, нам приходится пользоваться всем заморским пиратским ПО, языками разработки и пить кока-колу с чипсами Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
swg2you 403 Опубликовано: 7 сентября, 2015 ну приблизительно они так и видят свои программы) Но так как у нас мозгов не хватает создать что-то свое и мы жили и живем в застое и мы дикий народ и очень отстали в ИТ, нам приходится пользоваться всем заморским пиратским ПО, языками разработки и пить кока-колу с чипсами Мы вовсе не дикий народ, и это не от нехватки мозгов. Мозгов полно везде, и очень даже светлых. Просто у нас много поколений вытравливали элементарное самоуважение, в результате презрение к своему и любовь к заморскому. Принцип жизни, - Импортное лучше, - кажется еще с Петра первого начался и, к сожалению, продолжается по сей день. ... Я еще застал в школе преподавание алгоритмического языка по Ершову. Со своими "пока" "нц" и "кц". 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
davial 1 972 Опубликовано: 8 сентября, 2015 (изменено) Мы вовсе не дикий народ, и это не от нехватки мозгов. Мозгов полно везде, и очень даже светлых. Просто у нас много поколений вытравливали элементарное самоуважение, в результате презрение к своему и любовь к заморскому. Принцип жизни, - Импортное лучше, - кажется еще с Петра первого начался и, к сожалению, продолжается по сей день. ... Я еще застал в школе преподавание алгоритмического языка по Ершову. Со своими "пока" "нц" и "кц". Не ты один учил алгоритмический язык :P А потом, когда увидел первые строки Паскаля, то понял - что достаточно свой алгоритм перевести на "аглицкий" и не забыть о "точке с запятой" З.Ы. И вообще https://ru.wikipedia.org/wiki/%D0%94%D0%A0%D0%90%D0%9A%D0%9E%D0%9D Изменено 8 сентября, 2015 пользователем davial 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах