ТЗ: галактическая карта

Аватара пользователя
theCrow
Сообщения: 40
Регистрация: 18 окт 2011

ТЗ: галактическая карта

Сообщение theCrow »

Черновик технического задания

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

Первичная архитектура

Пошаговая стратегия с динамическими и статическими объектами. Во время хода каждый игрок отдаёт приказ своим динамическим объектом, затем ход завершается и приказы выполняются одновременно.
Основным динамическим объектом игрока является корабль. Основным статическим объектом является звезда. Перемещение корабля по галактической карте происходит линейно и поточечно, исключительно от статического объекта к статическому объекту. Что бы попасть в какой-либо объект, необходимо попасть в ту же точку, что и он сам. Указывать в качестве объектов другие корабли нельзя.
Попадая на пустую звезду, игрок попадает в планетарную карту.
Попадая на звезду, где находится корабль другого игрока, открывается панель боя с предложением начать битву. Если один из игроков соглашается, то бой начинается.
Попадая на звезду, где находится корабль того же игрока, у игрока есть выбор для соединения кораблей в группу. Группа может содержать максимум 3 корабля.

От звезды к звезде можно конструировать звёздные линии. Скорость двжиения по звёздным линиям выше, чем вне них. Влиять на корабль вошедший во врата ЗЛ нельзя до его выхода на противоположной стороне ЗЛ.

Реализация инфраструктуры игровых объектов

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

Например, у нас есть класс StarshipClass, определяющий всё, что касается объектов кораблей. Также есть массив под названием StarshipObject, каждый элемент которого презентует отдельный корабль.

Класс StarshipClass определяется следующим образом:
StarshipClass.Player - владелец корабля
StarshipClass.Type - тип корабля.
StarshipClass.Health - здоровье корабля.
StarshipClass.Attack - сила удара корабля.
StarshipClass.CurrentCoordinates - текущие координаты.
StarshipClass.NextCoordinates - координаты назначения.

Корабль под порядковым номером 1 из массива StarshipObject класса StarshipClass будет записан так:

StarshipObject(1).Player = Red
StarshipObject(1).Type = Cruiser
StarshipObject(1).Health = 3000
StarshipObject(1).Attack = 400
StarshipObject(1).CurrentCoordinates = 99.404
StarshipObject(1).NextCoordinates = 94.413

Другой пример, корабля под номером 41.

StarshipObject(41).Player = Blue
StarshipObject(41).Type = Juggernaut
StarshipObject(41).Health = 5000
StarshipObject(41).Attack = 900
StarshipObject(41).CurrentCoordinates = 0.166
StarshipObject(41).NextCoordinates = 3.150

Соответственно, для добавления чего-то нового в свойства всех кораблей, будет достаточно добавить параметр в классе.
Генерация объектов типа звезды или планеты делается аналогичным способом, через создание классов SpaceObject, который определяется точно таким же образом:

SpaceObject.Type - тип объекта (звезда, планета, чёрная дыра, звёздая линия)
SpaceObject.Heat - температура объекта.
SpaceObject.Gravity - гравитация.
SpaceObject.Coordinates - координаты.
и тому подобное.

Аналогичным способом, можно проектировать игровой мир на любом из 4 уровней, задавая новые классы и атрибуты к ним в любом необходимом количестве.
Атрибуты могут играть роль флагов в любом количестве. Например, корабли, находящиеся на звёздной линии можно помечать флагом OnStarline, что увеличивает их скорость, или IsVisibleForRed для звезды, что определяет её видимость для кого-либо.
Однако же количество флагов необходимо постоянно сводить к минимуму, избегая роста размера класса.

Поскольку ВСЕ данные должны хранится в массивах, привязанных в определённым классам, то процесс сохранения и загрузки игры представляет собой манипуляции с выгрузкой или наполнением массивов актуальными данными.


Реализация последовательности завершения игрового хода

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

Реализация глобального экрана

Глобальный экран является сеткой точек с осями Х и Y, и представляет собой картографию (другими словами, маппинг объектов на плоскость). Картография обновляется каждую фазу хода через сверку с массивами объектов и забором их координат и дальнейшей перерисовкой. Каждую фазу хода происходит проверка на коллизии (когда два или более объектов находятся в одной точке, т.е., взаимодействуют).


Реализация интерфейса взаимодействия объектов

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

Писалось в дефиците времени, поэтому названо черновиком. Тем не менее, программист должен понимать, что здесь написано (реализация этого - первое его задание, как программиста). Как только программисту будет понятно всего, что написано - начнётся разработка.
На данном этапе программистов двое - я и Васяка.
Ожидаю любые вопросы\ответы. Время для технических вопросов.
Аватара пользователя
Vasaka
MOSC Team
Сообщения: 3195
Регистрация: 24 янв 2011

ТЗ: галактическая карта

Сообщение Vasaka »

theCrow писал(а): 03 ноя 2011, 22:48Интерфейс объектов представляет собой унифицированный способ взаимодействия между объектами (между кораблём и звездой, между кораблём и кораблем, и пр.). Данный интерфейс возникает всегда, когда необходимо совершить действие - например, действие полёта корабля к звезде или действие внутри экрана боя, или внутри экрана планеты. Это может быть какая-то кнопка, может быть мини панель, которая подсвечивается при наведении мыши на требуемый объект, может быть что-то иное.

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

ТЗ: галактическая карта

Сообщение theCrow »

Vasaka писал(а): 04 ноя 2011, 00:03Для отправки флота:
На галактической карте, рядом со звездой в планетарной системе которой есть корабли, будет отображаться треугольничек.
При нажатии левой кнопки мыши на треугольник, будет отображаться количество кораблей во флоте (на картинке область где будут отображаться корабли выделена красной рамочкой). По умолчанию все корабли будут выделены как активные. Игрок сможет снять выделение с ненужных кораблей, если это необходимо, и нажать правой кнопкой мыши на объекте к которому нужно отправить корабль.
После этого появится линия-путь от корабля до места назначения, которая будет показывать, что корабль движется.
ОК, так и сделаем.

Отпишись, пожалуйста, по остальному - понятно\непонятно, какие вопросы.
Аватара пользователя
Vasaka
MOSC Team
Сообщения: 3195
Регистрация: 24 янв 2011

ТЗ: галактическая карта

Сообщение Vasaka »

theCrow писал(а): 04 ноя 2011, 10:12Отпишись, пожалуйста, по остальному - понятно\непонятно, какие вопросы.

По интерфейсу.
Эту же часть экрана будем использовать для вывода вывода информации о звезде, планете и прочих объектах, а так же для управления этими объектами, если это предусмотрено.

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


theCrow писал(а): 03 ноя 2011, 22:48На данном этапе для этого элемента будет поставлена заглушка. Будущее задание для геймдизайнера\дизайнера - разработать и проиллюстрировать этот интерфейс.

Сделаю иллюстрацию.


theCrow писал(а): 04 ноя 2011, 10:12Отпишись, пожалуйста, по остальному - понятно\непонятно, какие вопросы.

Что касается программирования, то похоже мне понятно только в очень общих чертах. :pardon:
Slimper
Сообщения: 101
Регистрация: 25 янв 2011

ТЗ: галактическая карта

Сообщение Slimper »

theCrow писал(а): 03 ноя 2011, 22:48Класс StarshipClass определяется следующим образом:
StarshipClass.Player - владелец корабля
StarshipClass.Type - тип корабля.
StarshipClass.Health - здоровье корабля.
StarshipClass.Attack - сила удара корабля.
StarshipClass.CurrentCoordinates - текущие координаты.
StarshipClass.NextCoordinates - координаты назначения.


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

Вот что мне точно бросается в глаза, хотя на деле потом их будет в несколько раз больше.
Аватара пользователя
theCrow
Сообщения: 40
Регистрация: 18 окт 2011

ТЗ: галактическая карта

Сообщение theCrow »

Vasaka писал(а): 04 ноя 2011, 11:28Что касается программирования, то похоже мне понятно только в очень общих чертах.
Тогда начинаем. Скоро будет тема.

Vasaka писал(а): 04 ноя 2011, 11:28Сделаю иллюстрацию.
ОК.

Slimper писал(а): 04 ноя 2011, 13:34Вопрос, а где:
Это пример.
Аватара пользователя
Vasaka
MOSC Team
Сообщения: 3195
Регистрация: 24 янв 2011

ТЗ: галактическая карта

Сообщение Vasaka »

Vasaka писал(а): 04 ноя 2011, 11:28Сделаю иллюстрацию.

Сделал интерфейс сообщений. Слова выделенные цветом будут ссылками к объктам и событиям.
Области обведённые красным, кандидаты на то, чтобы приютить иконки сообщений событий. Место будет определено позже.

Картинка кликабельна, для просмотра в родном разрешении. ОЧЕНЬ РЕКОМЕНДУЕТСЯ.
Изображение


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

Все они дублируются окном сообщения, но в настройках можно будет отменить любые сообщение для большого окна. Любые, какие игрок посчитает для себя не важными, за исключением разве что сообщений о нападении.
:thanks:
Аватара пользователя
Vasaka
MOSC Team
Сообщения: 3195
Регистрация: 24 янв 2011

ТЗ: галактическая карта

Сообщение Vasaka »

Кстати, пара вопросов.

Под какие разрешения будем делать первый вариант?
Масштабирование будем делать на галактической карте для первого варианта?
Аватара пользователя
Vasaka
MOSC Team
Сообщения: 3195
Регистрация: 24 янв 2011

ТЗ: галактическая карта

Сообщение Vasaka »

theCrow писал(а): 03 ноя 2011, 22:48Атрибуты могут играть роль флагов в любом количестве. Например, корабли, находящиеся на звёздной линии можно помечать флагом OnStarline, что увеличивает их скорость, или IsVisibleForRed для звезды, что определяет её видимость для кого-либо.
Однако же количество флагов необходимо постоянно сводить к минимуму, избегая роста размера класса.

Есть идея по архитектуре.
Предлагаю сделать параметр "не видим" для игрока такого-то, вместо "видим".
Что это даст?
Вначале игры, когда у нас мало объектов которые нужно держать в памяти и как-то обсчитывать, и это не сильно будет нагружать движок.
А когда игрок обнаружил звезду или планету, флагов становится всё меньше и потом, когда все знают об этом объекте (звезде), можно вообще убрать у неё соответствующее поле.

Но это если я правильно понял как всё работает. Всё-таки программист я ещё очень "не очень". :)
krupennikov
Сообщения: 53
Регистрация: 25 янв 2011

ТЗ: галактическая карта

Сообщение krupennikov »

Vasaka писал(а): 04 ноя 2011, 11:28Для вывода сообщений, таких как, прибытие флота, или нашли звезду, предлагаю использовать 2 способа.
1. Диалоговое окно в центре экрана, с выбором действия, если таковое предусмотрено. В настройках можно будет настроить для каких событий выводить это окно.
2. В верхнем меню для каждого из событий сделать значок с числовым значением появляющимся, если есть новые, непрочитанные сообщения такого типа (например найдены новые объекты).


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

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