Alex Автор темы 4 683 Опубликовано: 23 декабря, 2014 Я думаю вся суть в динамике. Изменение тактики на основе развед.данных. В точку. Робот должен кинуть одно задание и нестись срочно на защиту или к найденному кем-то сундуку с углем и т.п, если ему это сейчас крайне необходимо и он не выполняет более важное задание, например доставку украденного флага. Но принятую информацию он в фоне анализирует и складывает в буфер (стек) ближайших задач с определенным признаком приоритета, а буфер сортирует по этому признаку, и всегда приступая к новым задачам, берет самую важную. Он всегда обладает оперативной информацией, знает остаток бойцов своей команды, счет игры, топливо и массу других, нужных ему данных. Как? Модем может работать только на одной частоте... Один модем может работать на 128-ми радиочастотах одновременно в диапазоне 0 - 65534 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Syabro 81 Опубликовано: 23 декабря, 2014 Предлагаю сделать захват нескольких флагов таким образом: флаг стоит на базе противника на своей базе воронка, рефери фиксирует пропажу флага врага, как только флаг преподаёт в воронку рефери защитывает очко и ставит новый флаг! Когда робот умирает с вражеским флагом флаг соответственно возвращается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Jet 30 Опубликовано: 23 декабря, 2014 (изменено) Сделал небольшую програмку, которая заполняет рандомно карту. local args = { ... } local wid, len = tonumber(args[1]), tonumber(args[2]) if (not wid or not len) print("Usage <program_name> <width> <lenght>") return end local selectedSlot = 1 local itemsCount = 0 local toRight = true local turn local placeLine = false local lineLenght = 0 function selectBlock() while selectedSlot < 16 do local count = turtle.getItemCount(selectedSlot) print(selectedSlot) print(count) if (count > 0)then itemsCount = count return true else selectedSlot = selectedSlot + 1 turtle.select(selectedSlot) end end return false end turtle.select(selectedSlot) selectBlock() local i, j for i = 1, len do for j = 1, wid - 1 do if itemsCount == 0 then while not selectBlock() do print("Please, put blocks and press any key") os.pullEvent() selectedSlot = 1 end end turtle.forward() if (placeLine) then if (lineLenght > 0) then os.sleep(0.3) turtle.placeDown() lineLenght = lineLenght - 1 itemsCount = itemsCount - 1 else placeLine = false end else if (math.random() > 0.69) then placeLine = true lineLenght = math.random(6) end end end if (toRight) then turn = turtle.turnRight else turn = turtle.turnLeft end turn() turtle.forward() if (placeLine) then if (lineLenght > 0) then os.sleep(0.3) turtle.placeDown() lineLenght = lineLenght - 1 itemsCount = itemsCount - 1 else placeLine = false end else if (math.random() > 0.69) then placeLine = true lineLenght = math.random(5) end end turn() toRight = not toRight end turtle.turnLeft() for i = 1, system.area.len do turtle.forward() os.sleep(0.2) end turtle.turnRight()local selectedSlot = 1 local itemsCount = 0 local toRight = true local turn local placeLine = false local lineLenght = 0 function selectBlock() while selectedSlot < 16 do local count = turtle.getItemCount(selectedSlot) print(selectedSlot) print(count) if (count > 0)then itemsCount = count return true else selectedSlot = selectedSlot + 1 turtle.select(selectedSlot) end end return false end turtle.select(selectedSlot) selectBlock() local i, j for i = 1, system.area.len do for j = 1, system.area.wid - 1 do if itemsCount == 0 then while not selectBlock() do print("Please, put blocks and press any key") os.pullEvent() selectedSlot = 1 end end turtle.forward() if (placeLine) then if (lineLenght > 0) then os.sleep(0.3) turtle.placeDown() lineLenght = lineLenght - 1 itemsCount = itemsCount - 1 else placeLine = false end else if (math.random() > 0.69) then placeLine = true lineLenght = math.random(6) end end end if (toRight) then turn = turtle.turnRight else turn = turtle.turnLeft end turn() turtle.forward() if (placeLine) then if (lineLenght > 0) then os.sleep(0.3) turtle.placeDown() lineLenght = lineLenght - 1 itemsCount = itemsCount - 1 else placeLine = false end else if (math.random() > 0.69) then placeLine = true lineLenght = math.random(5) end end turn() toRight = not toRight end turtle.turnLeft() for i = 1, system.area.len do turtle.forward() os.sleep(0.2) end turtle.turnRight() Если карта двухуровневая, соответственно программку нужно запускать 2 раза и между запусками перемещать черепашку вручную. Черепашка строит некий узор под в плоскости под собой двигаяся вперед на width блоков (первый параметр) и вправо на lenght блоков (второй параметр). За 1 итерацию программы линии получаются направленными в ту сторону, в которую изначально смотрела черепашка. Соответственно, если сделать нижни уровень с "горизонтальным" направлением линий, а верхний с "вертикальным" - получаются достаточно интересные вариации карт.Может не актуально уже, но все же, моя цель показать идею. Изменено 23 декабря, 2014 пользователем Jet Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Syabro 81 Опубликовано: 23 декабря, 2014 Можно еещё сделать так: когда замечается внешний сигнал компьютер рефери опраопрашивает сервера-gps расположенные по углам стадиона дабы узнать координаты источника! ДаДалее для показухи можно послать роботов-охранников что бы уничтожили источник И вопросик! Если я буду следить за богами роботов через планшет на которкоторый сервер присылает те самые логи это будет считается нарушением? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex Автор темы 4 683 Опубликовано: 24 декабря, 2014 Предлагаю сделать захват нескольких флагов таким образом: флаг стоит на базе противника на своей базе воронка, рефери фиксирует пропажу флага врага, как только флаг преподаёт в воронку рефери защитывает очко и ставит новый флаг! Когда робот умирает с вражеским флагом флаг соответственно возвращается. То, что на карте сразу несколько флагов, это скорее всего придется изменить. Будет только один флаг, и скорее тоже в стандартном месте. Так будет больше экшена. Придется вводить статусы для роботов ВАШ ФЛАГ ПОХИЩЕН, ВРАЖЕСКИЙ ФЛАГ ЗАХВАЧЕН, ВАШ ФЛАГ ВОЗВРАЩЕН и так далее. При чем это можно дублировать сообщением в чат или звуковым оповещением в радиусе всем игрокам зрителям через АМИ или командный блок : КРАСНЫЙ ФЛАГ ЗАХВАЧЕН, СИНИЙ ФЛАГ ЗАХВАЧЕН и т.д Если флаг только один и всегда на стандартном месте, как и хопер, программисты могут организовывать разные тактики обороны и нападения. 2 робота может изначально быть атакерами, а 3 находиться в обороне. Если атакер погиб, робот-дэфер может стать атакером и т.д. При чем если один из ваших роботов несет захваченный флаг на свою базу, остальные ваши роботы, естественно, его не ищут уже на вражеской базе, а ждут. Блок АМИ раз в секунду проверяет наличие СИНЕГО и КРАСНОГО флагов на стандартных точках. Если он пропал, значит его украли и дает вышеуказанное сообщение или звуковое оповещение. Но что делать, если черепашонок, который не доехал до хопера, а его убили по дороге. Как это отследить. Значит та черепашка, которая нашла ВРАЖЕСКИЙ ФЛАГ (красную шерть например) его срубает и меняет свой статус, что у нее вражеский флаг =>TRUE и обязана пинговать судью об этом каждую секунду, пока едет к хоперу. Как только она бросила вражеский флаг в хопер, пинг прекращается, меняется счет от гейта БК на трубе, рефери сетит флаг опять на стандартном месте и сообщает всем зрителям об этом. Но если черепашонок ехал ехал и не доехал, то при отсутствии пинга более 3 секунд, рефери делает вывод, что боец убит, и сетит похищенный, но так и не доставленный флаг. Счет при этом не меняется, естественно. Так будет больше экшена, а в самой игре Unreal Tournament ИМЕННО ТАК и сделано! И вопросик! Если я буду следить за богами роботов через планшет на который сервер присылает те самые логи это будет считается нарушением? В реальности сканировать все частоты от 0 до 65534 будет очень сложно, и в любом случае найдутся нечестные игроки, которые при проведении игр попытаются напрямую передать какие-то инструкции своим черепашкам с планшета. Тем более, что зрители будут находиться в непосредственной близости от арены, и по дальности входящего Реднет сообщения, тяжело понять будет, где диалог роботов, а где инструкция человека. Во внешний мир, конечно, роботы могут передавать все что угодно человеку для дебага. Сделал небольшую программку, которая заполняет рандомно карту. Если карта двухуровневая, соответственно программку нужно запускать 2 раза и между запусками перемещать черепашку вручную. Черепашка строит некий узор под в плоскости под собой двигаяся вперед на width блоков (первый параметр) и вправо на lenght блоков (второй параметр). За 1 итерацию программы линии получаются направленными в ту сторону, в которую изначально смотрела черепашка. Соответственно, если сделать нижни уровень с "горизонтальным" направлением линий, а верхний с "вертикальным" - получаются достаточно интересные вариации карт. Может не актуально уже, но все же, моя цель показать идею. То что карта строиться рендомно, немного не хорошо. Они будут все, как две капли воды, даже если менять коэффициент вероятности установки блока. Карта, это стеночки, бойницы, тоннели и коридорчики, и желательно не похожие друг на друга. ZeroGalaxy уже сделал программку, где карту из камня, построенную человеком сканируют черепахи (едут, сканируют и чистят, при этом запоминая ее в файл) Потом такой файл черепаха может воссоздать из любого материала, бэдрока например. Но с появлением у нас аддонов, в частности АМИ блока из immibis, вся процедура упрощается в миллион раз. Карта сканируется и строится за секунды. АПИ блока local ami = peripheral.wrap('bottom') --/положение АМI (мод immibis) local w = ami.getWorld(0) --/привязка к миру (основной мир, как правило '0') w.setBlock(x, y, z, 7, 0) --/установка блока с ИД 7 (бедрок) w.setBlock(x, y, z, 0, 0) --/установка воздуха w.setBlock(x, y, z, id, meta) id = w.getBlockID(x, y, z) --/получение ИД блока по координатам meta = w.getMetadata(x, y, z) --/получение метаданных блока по координатам Циклы, сохранение в файл, менюшку с выбором карт, думаю, можно сделать очень просто. Карты предварительно строит человек, АМИ сохраняет карты в файл. В базе 2-3 десятка карт. АМИ может чистить поле, а также сетит любую карту из списка - от этого отталкивайтесь. Но это все ерунда. Разрыв мозга и сложность проекта - ЭТО НАПИСАНИЕ АЛГОРИТМОВ ДВИЖЕНИЯ РОБОТОВ и их ИИ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Syabro 81 Опубликовано: 24 декабря, 2014 Можно ли что бы не занимать роботов координаты присылать с сервера команды? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex Автор темы 4 683 Опубликовано: 24 декабря, 2014 Можно ли что бы не занимать роботов координаты присылать с сервера команды? Какие координаты? Не занимать чем? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Jet 30 Опубликовано: 24 декабря, 2014 Можно ли что бы не занимать роботов координаты присылать с сервера команды? Я как понял смысл именно в ресурсах. Дано: 5 роботов, 1 сервер. Дальше сам. Как оно работать будет - одному тебе известно. Самое главное не вмешиваться в процесс во время боя. 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Syabro 81 Опубликовано: 25 декабря, 2014 Я как понял смысл именно в ресурсах. Дано: 5 роботов, 1 сервер. Дальше сам. Как оно работать будет - одному тебе известно. Самое главное не вмешиваться в процесс во время боя. Это то оно да... но вот протокол общения с рефери нужно еще сделать... хоть это и забота администрации все-таки нужно согласовать с участниками что бы минимализировать использование ресурсов команды Какие координаты? Не занимать чем? ну как это? Координаты каждого робота для отображения и слежения, пинг для определения жив ли робот и так далее! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex Автор темы 4 683 Опубликовано: 25 декабря, 2014 Это то оно да... но вот протокол общения с рефери нужно еще сделать... хоть это и забота администрации все-таки нужно согласовать с участниками что бы минимализировать использование ресурсов команды ну как это? Координаты каждого робота для отображения и слежения, пинг для определения жив ли робот и так далее! Как ты их хочешь не занимать, но одновременно что-то получать от робота,не пойму? Там придется полсотни функций в параллели запускать, которые постоянно что-то обрабатывают в фоне, сендят статус, слушают эфир, буферы какие-то делать, обработчики стека, кучу переменных постоянно менять в фоновом режиме в зависимости от ситуации на поле боя, которые и будут влиять на работу основных циклов программы. Там не получиться беречь мозги роботов, так как ты хочешь, чтобы они только путь искали. Роботу придется выполнять десятки и сотни задач одновременно и постоянно обрабатывать и проверять кучу массивов и переменных. Работать одновременно на десяти разных частотах и прочее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Syabro 81 Опубликовано: 25 декабря, 2014 Как ты их хочешь не занимать, но одновременно что-то получать от робота,не пойму? Там придется полсотни функций в параллели запускать, которые постоянно что-то обрабатывают в фоне, сендят статус, слушают эфир, буферы какие-то делать, обработчики стека, кучу переменных постоянно менять в фоновом режиме в зависимости от ситуации на поле боя, которые и будут влиять на работу основных циклов программы. Там не получиться беречь мозги роботов, так как ты хочешь, чтобы они только путь искали. Роботу придется выполнять десятки и сотни задач одновременно и постоянно обрабатывать и проверять кучу массивов и переменных. Работать одновременно на десяти разных частотах и прочее. Я хочу не отсылать с роботов сообщения никуда кроме сервера команды! Хочу использовать свой протокол Общения между ними, а уже с сервера могу прислать реререфэри любые данные которые ему нужны будут! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy 2 188 Опубликовано: 25 декабря, 2014 А если робот в силу своих функций должен соблюдать режим радиомолчания? Может лучше разместить под полем систему сканеров для определения положения роботов? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex Автор темы 4 683 Опубликовано: 25 декабря, 2014 Я хочу не отсылать с роботов сообщения никуда кроме сервера команды! Хочу использовать свой протокол Общения между ними, а уже с сервера могу прислать реререфэри любые данные которые ему нужны будут! Как ты там организуешь управление, это на твое усмотрение, робот-роботы или робот-штаб-роботы и прочее. Что-то проще сразу сказать союзникам, что-то отправить в штаб. Это же бой! Твоя задача, чтобы твои роботы победили в сражении без твоего участия, полагаясь только на свои алгоритмы и инструкции. А сервер-рефери получал раз в секунду количество живых игроков в команде, то что ты в данный момент похитил и везешь флаг, старт и конец боя и т.п. Мне так еще проще будет, если Рефери будет работать только с твоим штабным ПК. По поводу радиомолчания, нужно подумать, где его применить. Скорее всего проще зашифровать сообщения. Теоретически конечно можно перехватить вражеские частоты и попытаться запеленговать координаты вражеских роботов. Особенно, если у него всегда в фоне на одной частоте в бесконечном цикле работает пинг, или еще там что-то, и периодической смены частот по команде штаба не происходит. Но это все очень сложно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Syabro 81 Опубликовано: 25 декабря, 2014 Как ты там организуешь управление, это на твое усмотрение, робот-роботы или робот-штаб-роботы и прочее. Что-то проще сразу сказать союзникам, что-то отправить в штаб. Это же бой! Твоя задача, чтобы твои роботы победили в сражении без твоего участия, полагаясь только на свои алгоритмы и инструкции. А сервер-рефери получал раз в секунду количество живых игроков в команде, то что ты в дынный момент похитил и везешь флаг, старт и конец боя и т.п. Мне так еще проще будет, если Рефери будет работать только с твоим штабным ПК. То что флаг украли можно и сенатором засеч! А какой робот везёт флаг это уже сообщу я! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex Автор темы 4 683 Опубликовано: 25 декабря, 2014 То что флаг украли можно и сенатором засеч! А какой робот везёт флаг это уже сообщу я! То что флаг срубили, я и сам увижу. Не знаю. что там за сенатор, мне нужно знать, что ты его везешь, то есть то, что он в брюхе у одной из твоих черепах и она в данный момент жива! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Syabro 81 Опубликовано: 25 декабря, 2014 То что флаг срубили, я и сам увижу. Не знаю. что там за сенатор, мне нужно знать, что ты его везешь, то есть то, что он в брюхе у одной из твоих черепах и она в данный момент жива! Это все Т9... сенсором Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
NEO 542 Опубликовано: 25 декабря, 2014 без нейроной сети, е не обойтись. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Syabro 81 Опубликовано: 25 декабря, 2014 без нейроной сети, е не обойтись. Хм... это почему же? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
NEO 542 Опубликовано: 25 декабря, 2014 Как говорит рид, что гипче было Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Syabro 81 Опубликовано: 25 декабря, 2014 (изменено) Как говорит рид, что гипче было Ты не когда нибуть использовал? И что бы её обучить нужно немало времени... Изменено 25 декабря, 2014 пользователем Syabro Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах