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

Jet

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

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

  • Посещение

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

    2

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


  1. Можно ли что бы не занимать роботов координаты присылать с сервера команды?

     

    Я как понял смысл именно в ресурсах. Дано: 5 роботов, 1 сервер. Дальше сам. Как оно работать будет - одному тебе известно. Самое главное не вмешиваться в процесс во время боя.

    • Нравится 2

  2. Хочешь гибкости? Тогда нужно решить по какому событию прерывать алгоритм (и нужно ли вообще). Вот это событие и отлавливать.

    Я сделал таблицу функций, которая является очередью, и запихал туда turtle.forward() и т.д., в отдельном потоке выполняю эту очередь, если надо прервать выполнение - очищаю таблицу.


  3. Сделал небольшую програмку, которая заполняет рандомно карту.
     

     

     

    
    
    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 итерацию программы линии получаются направленными в ту сторону, в которую изначально смотрела черепашка. Соответственно, если сделать нижни уровень с "горизонтальным" направлением линий, а верхний с "вертикальным" - получаются достаточно интересные вариации карт.

    Может не актуально уже, но все же, моя цель показать идею.

    post-10981-0-51265600-1419348656_thumb.png

    post-10981-0-98745000-1419348657_thumb.png

    post-10981-0-38747000-1419348659_thumb.png

    post-10981-0-74381200-1419348660_thumb.png


  4. У меня вопрос организационный.

     

    Сражаются две команды программистов, и у каждой из них свой алгоритм, своя реализация и свои стартовые данные.

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

     

    И сам вопрос: я правильно понмаю, что карта строится ПОСЛЕ того, как программисты закончили "колдовать" над черепашками, и сами черепашки находятся в режиме ожидания старта?


  5. Постой ка! а как же тактика боя? В случае если будет известна карта каждая команда должна иметь тактику! Тактику охраны и захвата флага!

     

    Я думаю вся суть в динамике. Изменение тактики на основе развед.данных.

    • Нравится 2

  6. Практически все это в точности и предлагалось.

     

    Некоторые нюансы:

    1. По поводу симметричности (зеркальности) карты не уверен уже, что это нужно. Ведь исследуя свою часть карты теоретически можно в памяти черепахи уже строить вражескую карту. Сделаем как в WOT, карта сбалансирована, похожа, но НЕ ЗЕРКАЛЬНАЯ.
    2. Когда формулировал проект, никаких геолайзеров и в помине не было. Так что тут философский вопрос, нужен ли он. Ведь зная карту, половина задач, которые должен выполнять робот улетает в трубу. Нет фишки исследования и битвы на неизвестной територии. Алгоритм сведется только к тому, чтобы выполнить трассировку (поиск пути) между заданными точками, доехать туда, чего-то там срубить в виде блока шерсти и приехать обратно. А это уже почти совсем не интересно. То есть, если принять то, что геолайзером пользоваться нельзя, тогда для данного проекта разницы практически нет никакой, что именно использовать, черепах или роботов.
    3. На скрине нет флагов команды. Нет командных воронок (хоперов) в полу, куда робот должен доставить украденный флаг. Помимо воронки должна работать схема детектирования брошенного флага (БК труба с фильтром и гейтом или любой другой принцип детектирования) с передачей факта детектировния на ПК-судью.
    4. Бой в одной плоскости конечно легче сделать, но лучше начинать писать алгоритм с многослойной (n слоев) так будет сразу гибче программа и интереснее. Возможен пролет черепах друг над другом и прочее, лючки, стены с отверстиями, которые надо найти. Понятно, что больше 3 слоев вряд ли будем использовать, скорее всего два, так как большая карта очень сильно увеличит время боя, а черепах вы там просто не увидите в многослойной карте. В однослойной карте это будет просто толкотня, а не бой и поиск маршрутов. Считаю двухслойную карту оптимальной.

     

    Хотелось бы точно знать версию, на которую писать следует, а то ведь глупо использовать сравнение с блоками в инвентаре, если будет доступен КК 1.64 с идентифаем...

     

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

    На счет ооднослойной карты: я не говорю что это навсегда, я предложил это для начала. Для двух уровней писать ИИ труднее в квадрате, так мы первый бой не скоро увидим.

    Я согласен, что два уровня гораздо интереснее, но для начала то можно 1?


  7. То что зарядное устройство стоит ниже карты никак мне не мешает! Геолайзер сканирует большой объем... но соответственно тратит много энергии...

    А геолайзером можно?

    А как роботов предоставлять будут? Мы их из своих материалов чтоль должны собрать? Или материалы дадут?

     

    Я не знаю.) Я просто игрок, который заинтересовался темой. Я на сервере то ни разу не был, меня лаунчер не пускает.)

    Просто предлагаю.

    • Нравится 1

  8. Предлагаю правила на первый бой:

     

    Локация:

    Для начала предлагаю высоту все таки 1 блок.

    Размер: 16х32 (ширина, длина), где 16х8 отведено на базы, остается 16х16 на препятствия.

    Локация симметричная.

    Пол состоит из 3 цветов шерсти, синий, красный, белый.

    Стенки состоят из бедрока.

    Флаги располагаются в виде блоков

     

    Вычислительная техника:

    5 черепашек, 1 компьютер на команду. (Что с этим сделают программисты - их трудности).

     

    Комплектующие:

    Изначально черепашки заправлены достаточно... Много. Т.е. о топливе не задумываемся.

    Для каждой черепашки блоки: 1 белая шерсть, 1 красная шерсть, 1 синяя шерсть, 1 бедрок

    Так же черепашки знают свои стартовые положения и размер карты.

     

    Судьи:

    Админ :)

    1 компьютер рефери, который опрашивает черепашек (СТАТУС) и дает ТЕСТ/СТАРТ/СТОП.

     

    Тест:

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

    Когда компьютер рефери даст сообщение СТОП - черепашки прекращают кружение.

    Таким образом проверится своевременность реакции на команды рефери.

     

    Правила:

    Не ломать пол.

    Не подниматься на уровень выше.

     

    Задачи:

    Проанализировать локацию и попытаться стырить вражеский флаг, завалив пару противников (по возможности или желанию).

     

     

     

     

     

    post-10981-0-54117200-1419229827_thumb.png


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

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

     

    З.Ы. хотелось бы поучавствовать, есть пара идей по реализациям.

    • Нравится 1
×
×
  • Создать...