ПроектыФорумКонкурсы

Проект конкурса "AI Tank Arena".

Страницы: 1 2 39 10 Следующая »
#0
15:43, 1 мар 2023

Предлагается к рассмотрению, обсуждению и участию проект конкурса AI под условным названием "AI Tank Arena".

Важно. Предлагаемый порядок обсуждения.

+ об организационных моментах

От предполагаемых участников, в первую очередь хотел бы услышать комментарии следующего вида:

1) Планирую участвовать, пока всё норм, жду рабочей версии, и больше конкретики согласно первопосту, а там и посмотрим.
2) Планирую участвовать только, если будет переделано это и то, так-то и так то.
3) Хотел бы участвовать, но у меня совсем нет понимания, и другие трудности (какие)
4) Всё надо делать совсем не так: вот посмотрите, я всё уже написал и создал тему с подробным описанием.


Условия: участнику предлагается написать клиент для серверного приложения для управления AI-юнитом (танком), который должен соревноваться с AI-юнитом другого участника в рамках игровой сессии.

Описание игры.
Мир. карта в 2D размерностях float составленная на основе ячеек ландшафтных блоков (tiles).
Каждая ячейка имеет размер 1.0x1.0 и может быть представлена как

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

    Демонстрация прототипа физики/геометрии.

    Запустить видео по клику - Как делать игрыЗапустить видео по клику - Как делать игры

    Юнит. Танк с поворотной башней и пушкой на ней. Имеет уровень жизни (HP). Может двигаться по пустым ячейкам карты и стрелять. Двигается в прямом и обратном направлении, поворачивает вокруг своего центра и задаёт вращение башни относительно корпуса. Стрельба ведётся в направлении поворота башни снарядами. Количество снарядов ограничено (???). Снаряд летит по прямой до момента касания препятствий или другого юнита, имеет постоянную скорость полёта и предельную дальность (???). На перезарядку оружия после выстрела требуется время. Попадание снаряда наносит юниту урон HP. Стрельба в движении снижает точность (урон) (???). Примечание: рассматривается вариант упрощенного движения без руления, в стиле "pacman".

    Общие игровые правила. Игра идёт на случайно сгенерированной карте. Юниты участников появляются на своей базе (spawn). База может служить для перезарядки и восстановления HP (???). Количество жизней ограничено. Цель: потратить все жизни (очки) противника и сохранить свои.

    Вариант capture the flag. На карте располагается флаг(и) которые надо захватить подобрав его (проехав по нему) и отвезти на свою базу. Первый захвативший выигрывает игру. Убитый перевозчик флага бросает его на месте смерти (или же флаг возвращается в исх. точку), где его может подобрать  другой юнит.

    Вариант king of the hill. Нахождение в специальных точках даёт очки.

    Техническая реализация. Сервер(хост) — графическое (опционально ???) приложение. Клиент — динамическая библиотека (DLL). Взаимодействие клиента с сервером происходит в реальном времени путём вызова сервером callback-функций, реализованных в клиентской DLL. Поддерживаемые платформы - Windows/Linux x64_86.

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

    Для избавления от рутины, сервер предоставляет сервисы построения путей и рэйкасты по ландшафту. Хотя можно использовать своё.

    API.
    Самый базовый функционал видится так:

    + Показать

    Это пока черновик, буду дополнять-менять по мере развития.

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

    #1
    15:56, 1 мар 2023

    У меня были почти те же мысли, только не танк, а круглый робот, тогда не будет застреваний при поворотах в проходах, и вообще, несколько проще управление.
    И ещё — на карте не 2, а 3 типа ячеек. Условно "стена", "проход" и "вода". В воду роботу нельзя, но снаряд пролетает.

    #2
    16:44, 1 мар 2023

    Der FlugSimulator
    > Самый базовый функционал видится так
    Как насчет такого:
    - При подключении к серверу клиент получает весь стэйт игрового мира
    - Каждый тик всем клиентам отсылается изменения стэйта

    > поворачивает вокруг своего центра и задаёт вращение башни относительно корпуса
    Поворот танка и башни не должны быть мгновенны

    #3
    17:25, 1 мар 2023

    Mikle
    > только не танк, а круглый робот, тогда не будет застреваний при поворотах в проходах, и вообще, несколько проще управление.
    Да, коллайдер будет кругом. И визуально, я не против робота.

    > И ещё — на карте не 2, а 3 типа ячеек. Условно "стена", "проход" и "вода"
    Да, я упустил, это действительно полезно: "вода" непроходима, но проницаема для взгляда и стрельбы.


    Hypnoise
    > При подключении к серверу клиент получает весь стэйт игрового мира
    Разумеется, так и будет. Я еще не дописал про инициализацию.
    Клиент получает всю карту, точки, переменные.

    Hypnoise
    > Каждый тик всем клиентам отсылается изменения стэйта
    По сути это и делается в Response. Нужно утрясти формат протокола, исходя из возможностей участников.

    Hypnoise
    > Поворот танка и башни не должны быть мгновенны
    Да.

    #4
    17:28, 1 мар 2023

    А как этим пользоваться? Не бейте тапками, сетевое программирование для меня темный лес.

    #5
    18:08, 1 мар 2023

    Можно сделать сделать конкурс AI,  а сетевое добавление оставить на усмотрение участника.

    #6
    18:09, 1 мар 2023

    Incvisitor
    > сетевое программирование для меня темный лес.

    Ну может сети и не будет, как уж народ подберётся, а будет просто нативная dll, что на самом деле легче.

    #7
    18:13, 1 мар 2023

    Der FlugSimulator
    То есть пишем свои Длл-ки, их собираем вместе на компе и они жахают друг друга. А как писать такую длл?

    #8
    18:26, 1 мар 2023

    Incvisitor
    > А как писать такую длл?
    Если делать сервер буду я, я напишу и образец dll, как в прошлые разы. Кроме того, подтянется The Trick, сделает COM переходник — откроется возможность работать с шарпом, js и т. п.

    #9
    18:26, 1 мар 2023

    Incvisitor
    > А как писать такую длл?

    Ну даже не знаю как в 2х словах ответить.
    Для начала надо уметь писать длл или клиента в принципе.
    Потом наверно нужна какая-то векторная библиотека, на чём ты там пишешь.
    Ну а дальше внутри пишешь большую функцию update() { ... }, которая нажимает нужные "кнопки" на танке/роботе.

    #10
    19:39, 1 мар 2023

    Mikle
    > У меня были почти те же мысли, только не танк, а круглый робот, тогда не будет застреваний при поворотах в проходах,
    Лучше уж не круглый, а "скользящий" AABB-квадрат, это еще проще, чем коллизия с кругом.

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

    Так что нужны дополнительные баллы, например, раскидать на карте собираемые объекты, можно даже всю карту ими засыпать как в Pacman и ограничить время.

    #11
    19:50, 1 мар 2023

    romanshuvalov
    > Игра по таким правилам быстро упрётся в то, что противники спрячутся за
    > преградой и любое движение будет рискованным и самое рациональное решение -
    > сидеть на месте и ждать движения противника (кажется, это называется равновесие
    > Нэша).
    >
    > Так что нужны дополнительные баллы, например, раскидать на карте собираемые
    > объекты, можно даже всю карту ими засыпать как в Pacman и ограничить время.
    Само собой, при сидении на месте некий ресурс (хп?) будет понемногу тратиться, его можно пополнять только в местах, где он рождается, но эти места простреливаются, и вообще, там очередь из желающих. При стрельбе тратятся патроны, которые рождаются где-то в другом месте, это всё давно отработано в аренных шутерах.
    romanshuvalov
    > Лучше уж не круглый, а "скользящий" AABB-квадрат, это еще проще, чем коллизия с кругом.
    Круг эстетически лучше, а коллизии устроитель сделает, клиентам не придётся с этим возиться.
    Я прикидывал задействовать для начала графику из своего проекта с конкурса игр на одном экране.

    #12
    20:17, 1 мар 2023

    Mikle
    > при сидении на месте некий ресурс (хп?) будет понемногу тратиться, его можно
    > пополнять только в местах, где он рождается,
    А вот это отлично. Пусть этот ресурс будет тратиться вообще всегда, не обязательно при сидении на месте.

    > прикидывал задействовать для начала графику из
    Можно параллельно провести конкурс на лучшую визуализацию данной игры. Логика вся на сервере же, без графики, текущее состояние посылается клиенту.

    #13
    20:33, 1 мар 2023

    romanshuvalov
    > противники спрячутся за преградой и любое движение будет рискованным и самое
    > рациональное решение - сидеть на месте и ждать движения противника

    Так захват флага решает этот вопрос. Если усядешься камперить, рискуешь пропустить флаг.
    Была такая игра "Future Classics Collection", там в танчиках тратится топливо, и его надо восполнять на базе или ехать к канистре.

    #14
    20:49, 1 мар 2023

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

    Страницы: 1 2 39 10 Следующая »
    ПроектыФорумКонкурсы

    Тема в архиве.