romanshuvalov
> просто поле из неразрушаемых блоков размером 32х32 или 64х64
Только ещё с блоками воды, как уже выше обсуждалось, в эти блоки идти нельзя так же, как в стены, но пули пролетают, и есть сквозная видимость.
> когда он выпущен - тогда его направление сразу же становится известно сопернику.
Вот тут я предлагал, чтобы не было известно. Ствол невидим, пули невидимы, но факт выстрела слышен.
> Кроме обычных снарядов ("пуль") предлагаю еще что-то вроде медленно летящего
> энергетического шара или фаерболла, большого размера, суть которого - ненадолго
> ограничить передвижение противника.
А вот это уже излишнее усложнение.
Накидал тут чё-то:
typedef struct { float x, y; int health; int primary_fire_timeout; // 0 means ready to fire int secondary_fire_timeout; } player_t; typedef struct { float x, y; int item_type; int timeout_to_spawn; // 0 means visible and ready to pick-up } collectable_item_t; typedef struct { float x, y; float dx, dy; int player_index; int projectile_type; // bullet or fireball } projectile_t; typedef struct { int blocks[64][64]; player_t players[2]; collectable_item_t collectable_items[8]; projectile_t projectiles[20]; int num_projectiles; } state_t; typedef struct { float dx, dy; // (dx*dx + dy*dy) must not be greater than 1 float fire_dx, fire_dy; int primary_fire_flag; int secondary_fire_flag; } input_data_t; void step(state_t *state, input_data_t** input_data) { // ... }
Mikle
> пули невидимы
Не очень представляю, как это возможно. Если снаряд летит медленно (поражает цель немгновенно), то его вроде как должно быть видно.
romanshuvalov
> Если снаряд летит медленно (поражает цель немгновенно), то его вроде как должно быть видно
Ладно, это не принципиально.
Размер карты предлагаю сделать кратным 16/9, чтобы на большинстве мониторов хорошо смотрелось в fullscreen, 64/36 неплохо подходит.
Der FlugSimulator
> Что такое "ЛУ"? У меня есть своя версия, но она смешная ))
Life Update
> Прости, но нет, не пересекается. Во первых, никакой "конкурсности" не вижу
> пока.
> Во вторых, у тебя вполне может быть хороший проект, но даже потому что я понял,
> очень сложный.
>
> А я же пытаюсь всё свести к 3-4 простым функциям.
Встраивая в наш проект участнику придется писать только одну функцию, собственно АИ, из ифов и елсев. Можно даже псевдокодом.
Иначе вам придется заново писать алгоритмы объезда препятствия, алгоритмы возможности увидеть из-за препятствия, алгоритмы возможности выстрела по танку противника если танков больше одного, алгоритмы точности попадания. Как я понимаю эти алгоритмы придется писать каждому участнику самостоятельно. Алгоритм патрулирования тоже придется писать. Так как при малейшем правдоподобии выигрывать будет тот кто стоит на месте. Привет картоха.
Еще раз, я предлагаю опустить технические моменты (ибо они уже готовы) и сосредоточиться на написании собственно АИ
ЗЫ. Проект в браузере.
ЗЫЗЫ. Жителям Среднего Урала предлаю всмотреться в карту попристальней.
Ren
> в наш проект участнику придется писать только одну функцию, собственно АИ, из ифов и елсев
На каком ЯП?
Ren
> Можно даже псевдокодом.
А как отлаживать?
Mikle
> На каком ЯП?
у нас на JS.
Как я понимаю АИ для принятие решений нужно следующее количество параметров (при 15 танков в команде): виден/не виден танк противнику - 30 значений, возможность стрелять в танк противника - 225 параметров, хп танка - 30 параметров.
В ответ сервер должен получить указания формат ехать туда либо стрелять туда.
Конечно я не специалист, но мне кажется это можно сделать внешней функцией на любом япе.
Mikle
> А как отлаживать?
Логи?
Ren
> Как я понимаю АИ для принятие решений нужно следующее количество параметров
а также координаты каждого из видимых танков, координаты снарядов (если можно уклоняться), ну и при старте - геометрия карты.
Ren
> Конечно я не специалист, но мне кажется это можно сделать внешней функцией на
> любом япе.
Тут пока обсуждался вопрос как эту внешнюю функцию подключать.
Браузер ни к каким длл доступа не имеет, так что к нему подключить внешнюю функцию на чем угодно кроме js\ts\wasm проблематично.
kipar
> а также координаты каждого из видимых танков, координаты снарядов (если можно
> уклоняться), ну и при старте - геометрия карты.
Координаты танков забыл)) но можно совместить с видимостью выдавая невидимым танка координаты (0;0).
А геометрия карты лишняя, поставленные задачи можно решить другими методами.
kipar
> Браузер ни к каким длл доступа не имеет, так что к нему подключить внешнюю
> функцию на чем угодно кроме js\ts\wasm проблематично.
Мы собирались переписывать под "сервер", там вроде другой язык. Это поможет?
Сервер даст возможность игрокам играть друг против друга
Ren
> А геометрия карты лишняя, поставленные задачи можно решить другими методами.
и как тогда в укрытиях от снарядов прятаться?
Ren
> Мы собирались переписывать под "сервер", там вроде другой язык. Это поможет?
на самом деле есть еще одно отличие "ии для конкурса ии" от "ии для игры". В игре чем больше разных фишек - тем лучше.
Разные типы оружия, разные бонусы, разные танки, особые типы местности, разнообразие генераторов карт\заранее созданных карт - всё это делает игру привлекательнее для игрока. Но все это добавляет работы написателю ии. Одно дело когда есть два танка на карте и кто круче уклоняется тот и выиграл, а другое дело когда все возможности игры и человеку то не один день осваивать, а уж закодить все это будет не лень только единицам. Да еще и вдруг в итоге выиграет не тот кто круче ии написал, а кто нашел лазейку во всех фичах и запилил имбовую тактику.
С другой стороны в этом конкурсе я все равно скорее всего не участвую, так что это просто советы.
kipar
> С другой стороны в этом конкурсе я все равно скорее всего не участвую, так что это просто советы.
Если выбирать между участием без советов, и советами без участия, то я бы стремился скорее к первому )))
kipar
> и как тогда в укрытиях от снарядов прятаться?
Не до конца понимаю как это "спрятаться от снаряда". Это же танк, у него огромная инертность. В любом случае проще спросить сервер "дай мне безопасное укрытие в радиусе 50 метров", чем передавать библе два миллиона циферок.
kipar
> Разные типы оружия, разные бонусы, разные танки, особые типы местности,
> разнообразие генераторов карт\заранее созданных карт
Ну так это все есть. Если интересно могу рассказать.
Здесь случайное совпадение, мы как раз приступили к написанию ботов (до этого они стояли мишенями). В текущей стадии реализовывается рандомный маршрут патрулирования. При обнаружении противника нужен другой тип поведения. Я как раз раздумывал как поведение типизировать и разнообразить - а тут как раз конкурс. Вопрос даже не в том, кто сделает лучший АИ, вопрос в том что их будет пять разных.
romanshuvalov
> Не очень представляю, как это возможно. Если снаряд летит медленно (поражает цель немгновенно), то его вроде как должно быть видно.
Сервер передает момент выстрела и угол. Скорость снаряда известна и постоянна.
Специально каждый тик передавать летящий снаряд смысла нет.
Ren
> Ну так это все есть
так я и говорю. для игрока это плюс. А для разработчика ии - минус.
все это дополнительные факторы которые не факт что делают задачу интереснее.
> В любом случае проще спросить сервер "дай мне безопасное укрытие в радиусе 50
> метров"
скажем так, суть танкового боя при наличии укрытий - выглянул, выстрелил, спрятался назад. плюс маневры чтобы оказаться в ситуации когда враг этого сделать не сможет. Для этого нужно четкое понимание геометрии, запроса к серверу и вейпоинтов недостаточно.
Der FlugSimulator
> Специально каждый тик передавать летящий снаряд смысла нет.
Лучше таки передать, зачем нагружать клиента лишними рассчётами. Потом ведь еще и событие "снаряд куда-то попал" надо ему отправлять и идентифицировать этот снаряд, чтобы не было путаницы с другими летящими снарядами.
Тема в архиве.