Перейти к публикации
Форум - ComputerCraft
Alex

Unreal Tournament. Войны роботов. (разработка)

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

Приветствую вас, дорогие читатели!

 

Эта тема открывает новый проект, который посвящен разработке программного обеспечения для боевых роботов-черепах из мода ComputerCraft, с помощью которых планируется смоделировать игру Unreal Tournament.

 

Это битва команд, состоящих из роботов и программистов на аренах, где для победы нужно будет за определенное время уничтожить вражеских роботов, или захватить флаг. (флаги на базах, флаг в центре, прорыв "малыми силами", "подрыв базы" и прочее). Проект затронет все аспекты программирования в рамках мода ComputerCraft.;)

 

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

 

Самые активные форумчане однозначно будут поощрены, а также помещены в зал славы. Не обязательно писать какой-то код, важны простые и изящные идеи и пути решения, поиск проблем, нюансов, трудностей, которые могут возникнуть, и про которые мы пока не догадываемся и прочее-прочее. :cool:

 

Вот небольшой ролик на youtube, в котором я затронул лишь малую часть проекта:

https://www.youtube.com/playlist?list=PLrGgY-Jtfx4wVBd8MyV_dJ4ccf9FPSXvN

 

ПЕРЕЧЕНЬ ВОПРОСОВ, ТРЕБУЮЩИХ НЕОТЛАГАТЕЛЬНОГО РЕШЕНИЯ!

  • Как генерировать карту из нескольких уровней (будет ли многоуровневость) - РЕШЕНО
  • Определение типов арен (размеры, разметки, кол-во бойцов, старт. точки)- НЕ РЕШЕНО
  • Определение режимов боя, времени боя, условий победы - НЕ РЕШЕНО
  • Начальный инвентарь, начальный запас топлива - НЕ РЕШЕНО
  • Есть ли на карте склады с топливом и другими предметами - НЕ РЕШЕНО
  • Как хранятся флаги (в сундуке или в виде установленных блоков) - НЕ РЕШЕНО
  • Режим использования радиоэфира, строгие ли частоты - НЕ РЕШЕНО
  • Схема радиообмена (сформулировать направления команд и сообщений) - НЕ РЕШЕНО
  • Механизм принятия решений черепахой (с учетом коэффициентов "стоимости" и важности того или иного решения с учетом обстановки на поле боя) - НЕ РЕШЕНО (ПРИОРИТЕТ)
  • Что является стимулом для черепахи искать флаг, продолжать битву, какой приоритет на смену исследуемой зоны (местности) - НЕ РЕШЕНО (ПРИОРИТЕТ)
  • Механизм боя - НЕ РЕШЕНО
  • Поиск кратчайших путей в лабиринтах арены (волновой алгоритм) - НЕ РЕШЕНО (ПРИОРИТЕТ)
  • "Поднятие" (исследование) карты, обмен разведданными - НЕ РЕШЕНО (ПРИОРИТЕТ)
  • Контроль боевых потерь и его влияние на тактику - НЕ РЕШЕНО
  • Тактика на начало боя, как распределить задачи между бойцами - НЕ РЕШЕНО (ПРИОРИТЕТ)
  • Защита от радиоперехвата (протоколы передачи данных) - НЕ РЕШЕНО
  • Контроль правильности и честности соревнований - НЕ РЕШЕНО
  • Начальные данные (что известно на момент начала сражения, уникальные условия, случайные условия) - НЕ РЕШЕНО
  • Чем вооружены черепахи в начале боя - НЕ РЕШЕНО
  • Внесение элементов неожиданности в ход боя - НЕ РЕШЕНО
  • Установка дополнительного оборудования для зрителей (мониторы, динамики и прочее), оформление арен (всех типов), стандартизация спавнов для черепах- НЕ РЕШЕНО
  • Выработка стилей оформления арен (античный тип, футуристический и др.) - НЕ РЕШЕНО
  • Создание правил участия в соревнованиях, формирование понятий лиги, званий, наград. Правила проведения чемпионатов (как завершающий этап проекта) - НЕ РЕШЕНО
РЕШЕНО- это значит, что выработаны четкие тезисы, написан код или псевдокод, или на крайний случай выработана мат. модель решения вопроса.

НЕ РЕШЕНО - не соблюдено ни одно из условий статуса "решено"

 

 

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

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


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

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

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


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

Если хотите реально вникнуть в проект, неужели нет 20 мин глянуть видео внизу. Там все разжевал, и показал, не надо "многа букав читать", ребенку своему и то не так подробно объясняю. Я думал, народ читать не любит, а тут и видео уже смотреть влом.:) В видео четко рассказано как генерируется арена, кто ее генерирует, и знают ли про нее черепахи и игроки заранее.

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


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

Поднято много вопросов и вопросов достаточно сложных. Сразу всё не решить. Можно каждую из задач по отдельности выносить на конкурс, что бы участники форума предлагали свои решения. Лучшее решение реализовывать. Например, генерация карты. Я уже вижу несколько способов.

Когда основные решения будут проработаны, тогда собирать из них действующую арену роботов.

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


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

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

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


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

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

type_arena = {width, length , amount_fighters ...} Массив черепашка должна получать от компьютера-судьи перед командой "Бой начался!" Так она будет знать, в какой режим боя она попала, сколько у нее товарищей (amount_fighters-1) , размеры и тип арены.

 

Так как она стоит на спавне(для каждого типа арены есть спавн для каждого бойца, обозначенный снизу определенным типом блока) в стандартном положении, анализируя, например, цвет шерсти под собой и зная размеры арены, GPS координаты и определив направление, черепаха может сформировать в своем маленьком мозге таблицу карты, заполонить ее(таблицу) непроходимыми блоками по умолчанию. Ведь она пока не знает, что там, стена, пустота, сундук или еще что-то. В процессе разведки местности и постепенного продвижения к врагу участки карты в таблице заменяются на 0 - пустота, 1- стена, 2 - свой флаг, 30-пустой сундук, 31-сундук с углем, и прочее.

 

Найдя сундук с углем, она проверяет(насколько позволяет ей размер своего инвентаря) количество угля в нем, берет себе сколько-то и орет своим мол, ребята, по таким-то координатам найден уголь, разбирай, пока враг не забрал:). Допустим, черепашка, которая несется с флагом врага к себе на базу, такую инфу игнорирует, но записывает ее в стек, как вероятное действие после выполнения текущего более важного. То есть должна быть таблица последующих отложенных действий. Поступающую инфу в таблицу нужно вставлять в определенное место в зависимости от его важности и "веса", а выполнять с первого. Если стек действий пустой - исследуй карту, например. Также нужно подумать, как написать функцию генератор-действий, которая в фоне с какой-то вероятностью и периодичностью генерирует действия и принуждает черепашку начать что-то делать, или прекратить текущее не приоритетное действие и начать другое(как мысли у человека;)) Кстати, после определения своего места на арене и координат арены блоки-идентификаторы точки спавна можно выкинуть, и освободить тем самым инвентарь. А это до 5 мест в инвентаре!

 

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

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


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

На счет построения карты. Вариант с поршнями, конечно самый быстро перестраиваемый. Но возникают сложности с многоуровневой картой. Максимум, что можно построить - двухуровневая карта. Причем верхний уровень карты строится при помощи поршней опускаемых с потолка. Т. е. карта будет закрыта сверху непрозрачными блоками (поршнями), что нехорошо. Да и возникнут сложности с подведением сигнала к каждому поршню. Мне более реальной кажется карта, строящаяся при помощи черепах-строителей. Представьте, движется шеренга черепах. Задом. И каждая черепаха в нужном месте ставит блок под, над или перед собой. Таким образом за один проход строится трехуровневая карта. Сами карты можно хранить в виде таблиц в компьютере-арбитре и строить по реднет-команде. Как их генерировать? Думаю, случайным образом сгенерированная карта будет совершенно непроходимой, если не найти какой нибудь хитрый алгоритм. Можно для начала строить карты вручную. А те же черепахи-строители будут считывать построенную карту в память.

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


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

Мне более реальной кажется карта, строящаяся при помощи черепах-строителей

Ну вот же, решение под носом было! Одна голова хорошо, а две лучше. Я уже мозг сломал с этими поршнями. Конечно не вариант, что они сверху торчат. С черепашками эпичнее и гибче получиться. Только три уровня - перебор, будет затруднен обзор нижнего уровня, я думаю, ну и размеры арены фактически увеличиваются сильно. Плюс для черепашки на среднем уровне придется детектить и компарить все направления, что снизит динамику боя и возможно под черепахой пролетит целый рой других черепах, пока она детектит блоки вокруг себя, крутиться вправо и влево, а на 1 и 3 уровне ее сенсорам один уровень будет вообще не доступен. Но я очень хочу многоуровневость. Если нет пути к координате на одном уровне - поменяй уровень и проверь снова (можно делать замкнутую фигуру, типа цилиндра например, только с одним входом на определенном слое - это штаб) Вопрос, сориентируется ли команда и поставит на вход защитника;). Кто первый найдет на карте ключевые точки - тот и победит. Я думаю два уровня -конечный вариант. Но так как волновой алгоритм работает в двумерном дискретном рабочем поле, придется делать как бы две карты для каждого слоя и их потом увязывать. Я думаю, технически это реализуемо. Нужно только, чтобы черепаха всегда проверяла два варианта прохода в двух слоях-таблицах.

 

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

 

Можно сделать проще для нас пока. Так как слоя два, а карты симметрично-зеркальные относительно центральной линии и размер карт будет приблизительно 15 на 30 плюс-минус, то есть 15 на 15 одна половина поля, хватит 2-х черепах, которые строят зеркально-диаметрально две половинки карты. То есть у нас будет массив карты с единицами и нулями. По моим скромным подсчетам время постройки ~ 7.5 минут. Рандомно можно кидать песочек в пустые места карты. Пока программисты возятся возле своих черепах, зрителю есть чем развлечься. Ну а с массивом для одной черепахи вообще проблем не будет (ни с постройкой ни с считыванием) Нужно только для одной из черепах вводить аргумент, который скажет - отзеркалить нужно диаметрально, пожалуйста:)

 

Камня хватит, 450 штук надо, если забить полностью карту. Мы можем взять 960 (15 стаков ) камня-бэдрока и 64(стак) песка. Ну и на спавне кусочек карты чистый, небольшая площадка там будет я думаю 5х5 например.Так что все норм, запас есть огромный.

 

В общем, программу для картографа уже можно писать. При считывании он должен знать размер и попросить имя файла для карты. Считывать и разрушать будет обычный камень. При построении уже размер виден из таблицы. Строиться карты должны от середины с расхождением друг от друга из бэдрока, чтобы не заботиться о том, что кто-то на кого-то залез и прочее. Стены арены и места для зрителей построены один раз и не меняются. Убирать бэдрок придется только админам вручную (просто почистить куб средствами worldedit'а)

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


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

Я немного не наблюдаю грань где кончается работа разработчиков проекта и начинаются действия командных программистов. Выше был выделен такой аспект: Механизм принятия решений черепахой (с учетом коэффициентов "стоимости" и важности того или иного решения с учетом обстановки на поле боя).На мой взгляд это уже дело той и другой команды как будет рассчитывать черепашка приоритетность задач. То же самое по сути относится и к стимулу для черепахи. Как по мне так это должна решать команда сколько черепашек назначить на поиск флага\исследования местности и.т.д. Вот только далеко не все смогут качественно запрогать черепаху так код тут довольно сложный выйдет. Если в чём то не прав то прошу поправить.o_O

P.S У меня почему то данная задумка ассоциируется со старой игрулькой в танчики на dendy :)

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


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

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

Я вот создал черепаху-строителя, которая заполняет игровую арену различными препятствиями. Арена у меня выглядит вот так:

post-6-1416078398366_thumb.png

и представляет собой пространство 15х30 высотой два блока. По бокам арена ограждена каменными блоками, сверху защащена кварцевым стеклом. Конструкция из красного и серого кирпича (см. рисунок) построена черепахой-строителем. Начальное положение черепахи - левый ближний к нам угол за пределами арены во втором слое. В сундуке под черепахой хранится уголь или другое топливо, которым автоматически заправляется черепаха.

Для постройки карты доступны четыре вида блоков: три любых строительных блока (кроме камня) и сундуки. Их следует разместить в инвентаре черепах таким образом:

post-6-14160783984535_thumb.png

слоты 1-4 блок первого вида (в примере - красный кирпич), 5-8 - блок второго вида (серый кирпич), 9-12 - блок третьего вида (песок), слоты 13-14 - сундуки. Слоты 15-16 зарезервированы для нужд черепахи.

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


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

А вот и программка

local W_Size=15
local H_Size=15
local Coal_slot=16

function open()
    for n,sSide in ipairs( rs.getSides() ) do
        if rednet.isOpen( sSide ) then
          return true
        end
    end
    for n,sSide in ipairs( rs.getSides() ) do
        if peripheral.getType( sSide )=='modem' then
          rednet.open(sSide)
          return true
        end
    end
    return false
end

local function getCoal()
  if turtle.getItemCount(Coal_slot)==0 then
    turtle.select(Coal_slot)
    turtle.suckDown()
  end
end

local function Refuel()
  if turtle.getFuelLevel()<1000 then
    turtle.select(Coal_slot)
    turtle.refuel(1)
  end
end

local function openCoble()
  Refuel()
  turtle.select(Coal_slot-1)
  turtle.dig()
  turtle.forward()
end

local function closeCoble()
  turtle.back()
  turtle.select(Coal_slot-1)
  turtle.place()
end

function buildLine(line)
  openCoble()
  for i=1,H_Size do
    if turtle.detect() then turtle.dig() end
    turtle.forward()
    if turtle.detectDown() then turtle.digDown() end
  end
  for i=H_Size,1,-1 do
    if line[i][1] then
      turtle.select(line[i][1]*4-3)
      if turtle.getItemCount(line[i][1]*4-3)<2 then
        repeat
          turtle.select(turtle.getSelectedSlot()+1)
        until turtle.getItemCount(turtle.getSelectedSlot())>0
      end
      turtle.placeDown()
    end
    turtle.back()
    if line[i][2] then
      turtle.select(line[i][2]*4-3)
      if turtle.getItemCount(line[i][2]*4-3)<2 then
        repeat
          turtle.select(turtle.getSelectedSlot()+1)
        until turtle.getItemCount(turtle.getSelectedSlot())>0
      end
      turtle.place()
    end
  end
  closeCoble()
end

function clearLine()
  openCoble()
  for i=1,H_Size do
    if turtle.detect() then turtle.dig() end
    turtle.forward()
    if turtle.detectDown() then turtle.digDown() end
  end
  for i=1,H_Size do turtle.back() end
  closeCoble()
end

function scanLine()
  local line={}
  openCoble()
  for i=1,H_Size do
    local p={}
    if turtle.detect() then
      for j=1,4 do
        turtle.select(j*4-3)
        if turtle.compare() then p[2]=j break end
      end
      turtle.dig()
    end
    turtle.forward()
    if turtle.detectDown() then
      for j=1,4 do
        turtle.select(j*4-3)
        if turtle.compareDown() then p[1]=j break end
      end
    end
    line[i]=p
  end
  for i=H_Size,1,-1 do
    turtle.back()
    if line[i][2] then
      turtle.select(line[i][2]*4-3)
      turtle.place()
    end
  end
  closeCoble()
  return line
end

function buildMap(map)
  getCoal()
  for i=1,W_Size-1 do
    buildLine(map[i])
    turtle.turnRight()
    turtle.forward()
    turtle.turnLeft()
  end
  buildLine(map[W_Size])
  turtle.turnLeft()
  for i=1,W_Size-1 do turtle.forward() end
  turtle.turnRight()
end

function clearMap()
  getCoal()
  for i=1,W_Size-1 do
    clearLine()
    turtle.turnRight()
    turtle.forward()
    turtle.turnLeft()
  end
  clearLine()
  turtle.turnLeft()
  for i=1,W_Size-1 do turtle.forward() end
  turtle.turnRight()
end

function scanMap()
  local map={}
  getCoal()
  for i=1,W_Size-1 do
    map[i]=scanLine()
    turtle.turnRight()
    turtle.forward()
    turtle.turnLeft()
  end
  map[W_Size]=scanLine()
  turtle.turnLeft()
  for i=1,W_Size-1 do turtle.forward() end
  turtle.turnRight()
  return map
end
Доступны следующие функции:

buildMap - заполняет игровое пространство по заданной таблице

clearMap - очищает игровое пространство

scanMap - сканирует игровое пространство и возвращает его в виде таблицы

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


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

Черепаха заполняет территорию только одной команды. Предполагается, что с другой стороны должна работать аналогичная черепаха.

Над чем еще следует подумать:

- работа одновременно нескольких черепах на одной территории для сокращения времени работы;

- координация работающих черепах с компьютера.

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


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

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

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


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

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

Хочу уточнить такие вопросы:

1. Половинки карт всегда симметричны?

2. Если да, то симметрия зеркальная или осевая?

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

 

На данный момент предполагается, что карта будет прорисовываться в пайнте. Кто нибудь придумает алгоритм генерации карты случайным образом? Neo?

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


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

Отлично, очень оперативно, с программой решили!

Над чем еще следует подумать:

- работа одновременно нескольких черепах на одной территории для сокращения времени работы;

- координация работающих черепах с компьютера.

 

По поводу первого, думаю не критично, справится одна черепаха на половину поля.

А вот с координацией согласен. Нужен простенький графический интерфейс что-то типа:

  • показать список карт
  • построить карту - [выбор карты] - [приступить]
  • считать карту - [введите имя] - [приступить]
  • ....
Все сделать в главном судейском компьютере. Там же будет и команды на отправку условий боя, старт боя и прочая дребедень.

То есть картограф должен получить команду, построить или считать карту и отправить массив в память координационного компа. Строители могут там жить вечно, сундучки, как Вы их там правильно показали, только иногда пополнять углем и бэдроком. Там их, правда, несколько, 2-3, поставить нужно, с разными предметами, допустим снизу, сверху и слева. После постройки/считывания, черепашка возвращается по правой линии назад на исходно положение.

 

рис.1 Общий вид, вражеская половина карты не достроена.2014-05-05_15.51.09.jpg

 

рис.2 Спавн

2014-05-05_15.51.28.jpg

 

рис. 3

2014-05-05_15.51.59.jpg

 

рис. 4 Варианты лабиринтов. Карта "Кровавая резня" Здесь мы заведомо пихаем черепах в узкое место, в "кровавую баню" и т.п. Вариантов масса.

2014-05-05_15.52.39.jpg

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


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

сундучки, как Вы их там правильно показали, только иногда пополнять углем и бэдроком. Там их, правда, несколько, 2-3, поставить нужно, с разными предметами, допустим снизу, сверху и слева.

Если не использовать блоки и предметы, которые разрушаются (например, стекло) то при демонтаже они возвращаются в инвентарь черепахи и в пополнении не нуждаются. Поэтому подзаправлять черепаху нужно только углем, а значит хватит одного сундука. Все таки одна черепаха строит половинку карты довольно долго. Зрители устанут ждать. Сейчас рассматриваю вариант одновременной работы трех черепах. В принципе это будет легко изменить настройками.

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


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

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

 

Мы кидаем бэдрок и прочее в сундуки на базе, выбираем карту, открываем окно(блок бэдрока) для строителя на арене, это можно сделать только амину в креативе, черепаха по команде по змейке строит карту и приезжает обратно на исходную точку. Окно закрываем. Все.

 

По поводу спавна. На скрине видны разные цвета шерсти (1,2,3,4,5 цвета по порядку от белого, это стандартный порядок цветов в майнкрафт). Анализируя цвет (в инвентаре у черепахи есть на начало боя эти блоки шерсти) черепаха не только узнает свое место на арене, но и свою задачу. Например мы в программу можем заложить уже "роль" бойца при спавне. Например, белый и оранжевый - дэферы, остальные цвета - атакеры.

 

Malvina

Я немного не наблюдаю грань где кончается работа разработчиков проекта и начинаются действия командных программистов. Выше был выделен такой аспект: Механизм принятия решений черепахой (с учетом коэффициентов "стоимости" и важности того или иного решения с учетом обстановки на поле боя).На мой взгляд это уже дело той и другой команды как будет рассчитывать черепашка приоритетность задач. То же самое по сути относится и к стимулу для черепахи. Как по мне так это должна решать команда сколько черепашек назначить на поиск флага\исследования местности и.т.д. Вот только далеко не все смогут качественно запрогать черепаху так код тут довольно сложный выйдет. Если в чём то не прав то прошу поправить.o_O

P.S У меня почему то данная задумка ассоциируется со старой игрулькой в танчики на dendy :)

Разработчики, программисты и игроки - это одни и те же люди изначально. Когда мы создадим программу, которая более менее управляет черепахой и позволяет достигнуть победы в бою(найти и украсть флаг врага или убить всех вражеских черепах) тогда уже каждый игрок в отдельности может по своему желанию модернизировать программу и попробовать сразиться с другим игроком. И только тогда уже будут нужны админы, судьи, объявления на форуме о турнирах и прочее. По моему, тут все прозаично. А пока в разработке программы принять участие может каждый. Нет сейчас никакой администрации проекта:)

 

И еще раз повторю. Когда начнется бой, человек не будет вмешиваться в действие роботов. То, что вы в них заложите, это все что у них будет, они смогут рассчитывать только на себя. чтобы победить. Как в футболе, указали тактику (2-2-4-2), и вперед. Так и здесь. В том и вся изюминка - написать хоть какое то подобие ИИ. Нужен генератор задач, анализатор приоритетов, анализатор ситуации и прочее. У черепашки в процессе боя будет накапливаться информация о карте, количестве своих и вражеских потерь, времени до конца боя, количестве захваченных флагов, остатке топлива. При обработке всех этих переменных и будут выбираться роли и действия, тактика и приоритеты.

 

Можете это конечно ничего и не учитывать, а кататься по змейке, пока не наткнетесь на флаг, как в Ваших танчиках на Денди, но будет ли Вам интересно наблюдать за такими действиями программы, вот вопрос;)

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


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

Zer0Galaxy

Хочу уточнить такие вопросы:

1. Половинки карт всегда симметричны?

2. Если да, то симметрия зеркальная или осевая?

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

 

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

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


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

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

Создание карты начинается с прорисовки эскиза в пайнте. Причем нижний и верхний слои карты прорисовываются и сохраняются в разных файлах, например map1 и map2. Затем на компьютере прораба выполняется команда buildmap map1 map2, по которой эскизы карты рассылаются черепахам-строителям. И черепахи начинают строить. Постройка вот такой карты

post-6-14160783988111_thumb.jpg

занимает порядка 2,5 минут. Выложил бы видео имей я доступ к ютубу.

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

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


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

Карта - бомба. Только, как я понял, она читает карту из рисунка. Можно ли считывать живую карту из камня. Все таки совместить два слоя удобнее вживую, какие-то туннели и бойницы сделать, на однослойном рисунке как это совместить из двух слоев, не хочется фантазировать в уме, как они наложатся друг на друга. Текстурка бэдрока - не ахти, согласен, но иначе игроки будут хитрить:). В новых майнкрафтах я даже не знаю, где текстурки хранятся, чтобы заменить.

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


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

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

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

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


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

Покопавшись в методах трассировки считаю, что для наших целей оптимальным будет реализовать волновой алгоритм (http://ru.wikipedia.org/wiki/Алгоритм_Ли)

 

Так как черепашке после спавна карта не известна совсем, она в начале всю таблицу (ДРП) заполняет значениями, соответствующими непроходимым участкам (то есть стена). В процессе разведки карта уточняется, то есть стена заменяется на пустоту там, где действительно пустота. Карта обрабатывается всеми черепахами и является единым объектом. То есть, что разведала одна черепаха, должно стать известно всем остальным. Карт две (т.к. у нас два слоя). Трассировать можно только путь между двумя пустыми координатами карты в пределах одного ДРП. Трассировка на ранних стадиях разведки не целесообразна.

 

Остается вопрос, который я пока не до конца понимаю, как оптимально реализовать. Это простая разведка с постепенным смещением по карте, изменение слоя карты. Как черепахе задавать оптимально приращение dx dy, в сторону ли врага, в сторону ли большого неисследованного массива карты или еще как-то. Если она, допустим, решила сменить область исследования, она трассирует путь в известной зоне, перебазируется туда, а там опять планомерно приступает к разведке. Примерно так, как мы копаем руду в пещере - копаем как-то рандомно по блоку, потом нас что-то дернуло, пробежали в соседнюю пещеру и копаем там. Вот этот момент, как мы бежим в другую пещеру - это реализация перемещения по кратчайшему пути, так как мы его знаем. Но что нас побуждает копать тут или там, это вопрос.:) И его надо решить.

 

Ну и естественно, что задача разведки будет актуальной для черепах до тех пор, пока в нижнем, или верхнем слое есть неизвестные элементы, а бой еще не закончен(захвачены все флаги или весь противник уничтожен) Кстати о потерях мы и враг будет узнавать от арбитра по признаку прекращения периодического пинга от бойца. Почему через арбитра решил (а как мы узнаем, что враг съел врага;)) То есть одним из условий игр - пинг сервера бойцами обеих команд.

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


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

Готов подготовить базовое ядро для системы черепах на основе моих идей

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


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

Готов подготовить базовое ядро для системы черепах на основе моих идей

Semoro, буду Вам очень благодарен. Важно именно базовое ядро, а дальнейшее развитие и модернизацию программы оставим для участников соревнований!

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


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

Здравствуйте,не буду многословным,расскажу свое виденье решений.

2 Режимы боя: Захват флагов

Удержание точки(точек)

Сам за себя(для нескольких людей)

Команда на команду

До полного умечтожения всех юнитов

Флаги в сундуках не должны хранится! Логика такая:

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

Частоты строгие,желательно с системой безопасности,умельцев много

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

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


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

Еще о принятии решений,если идет команда на команду,то черепахи должны идти туда где больше противника,но и оставляя несколько с другой стороны,тактика команды на команду это установка приоритета игроком в поиске чего-то, обороне,способе атаки(какой фланг проламывать)

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


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

Немного о механизме боя

Встретились две или более черепахи допустим в квадрате 5х5,в каждом ходе черепаха выбирает рандомно соперника и атакует его,так до конца или она игнорирует бой,сбегая,исходя из количества и типа противников и союзников(тему баланса потом)

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


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

Кратчайшие пути

1 Черепаха должна знать где цель

2 По карте(которую составили другие)должна проверит можно-ли напролом добраться

3 Если нет,посмотреть возможные пути по журналам движения других черепах(журнал-история движения черепахи)

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


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

Обмен развед данными:

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

Ps данные о его месте на карте и его тип

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


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

Контроль боевых потерь: Когда черепаха"умирает" она поднимается например на 10 блоков вверх и зависает там до конца боя реагируя только на команду окончания сего

Если при битве противник убил черепаху,то одна(что ближе при условии что сама не воюет идет отомстить той)

ОЧЕНЬ ВАЖНО!!!!

Черепахи видят друг-друга через систему навигации единого сервера,урон выставляется рандомом взависимости от типа черепахи,ее оружия и противника

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


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

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×