ТЗ: галактическая карта
Добавлено: 03 ноя 2011, 22:48
Черновик технического задания
Это документ, который необходимо принять к сведению как основной алгоритм при реализации требований к проекту. Требования к проекту необходимо брать из раздела первичной архитектуры.
Первичная архитектура
Пошаговая стратегия с динамическими и статическими объектами. Во время хода каждый игрок отдаёт приказ своим динамическим объектом, затем ход завершается и приказы выполняются одновременно.
Основным динамическим объектом игрока является корабль. Основным статическим объектом является звезда. Перемещение корабля по галактической карте происходит линейно и поточечно, исключительно от статического объекта к статическому объекту. Что бы попасть в какой-либо объект, необходимо попасть в ту же точку, что и он сам. Указывать в качестве объектов другие корабли нельзя.
Попадая на пустую звезду, игрок попадает в планетарную карту.
Попадая на звезду, где находится корабль другого игрока, открывается панель боя с предложением начать битву. Если один из игроков соглашается, то бой начинается.
Попадая на звезду, где находится корабль того же игрока, у игрока есть выбор для соединения кораблей в группу. Группа может содержать максимум 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, и представляет собой картографию (другими словами, маппинг объектов на плоскость). Картография обновляется каждую фазу хода через сверку с массивами объектов и забором их координат и дальнейшей перерисовкой. Каждую фазу хода происходит проверка на коллизии (когда два или более объектов находятся в одной точке, т.е., взаимодействуют).
Реализация интерфейса взаимодействия объектов
Интерфейс объектов представляет собой унифицированный способ взаимодействия между объектами (между кораблём и звездой, между кораблём и кораблем, и пр.). Данный интерфейс возникает всегда, когда необходимо совершить действие - например, действие полёта корабля к звезде или действие внутри экрана боя, или внутри экрана планеты. Это может быть какая-то кнопка, может быть мини панель, которая подсвечивается при наведении мыши на требуемый объект, может быть что-то иное.
На данном этапе для этого элемента будет поставлена заглушка. Будущее задание для геймдизайнера\дизайнера - разработать и проиллюстрировать этот интерфейс.
Писалось в дефиците времени, поэтому названо черновиком. Тем не менее, программист должен понимать, что здесь написано (реализация этого - первое его задание, как программиста). Как только программисту будет понятно всего, что написано - начнётся разработка.
На данном этапе программистов двое - я и Васяка.
Ожидаю любые вопросы\ответы. Время для технических вопросов.
Это документ, который необходимо принять к сведению как основной алгоритм при реализации требований к проекту. Требования к проекту необходимо брать из раздела первичной архитектуры.
Первичная архитектура
Пошаговая стратегия с динамическими и статическими объектами. Во время хода каждый игрок отдаёт приказ своим динамическим объектом, затем ход завершается и приказы выполняются одновременно.
Основным динамическим объектом игрока является корабль. Основным статическим объектом является звезда. Перемещение корабля по галактической карте происходит линейно и поточечно, исключительно от статического объекта к статическому объекту. Что бы попасть в какой-либо объект, необходимо попасть в ту же точку, что и он сам. Указывать в качестве объектов другие корабли нельзя.
Попадая на пустую звезду, игрок попадает в планетарную карту.
Попадая на звезду, где находится корабль другого игрока, открывается панель боя с предложением начать битву. Если один из игроков соглашается, то бой начинается.
Попадая на звезду, где находится корабль того же игрока, у игрока есть выбор для соединения кораблей в группу. Группа может содержать максимум 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, и представляет собой картографию (другими словами, маппинг объектов на плоскость). Картография обновляется каждую фазу хода через сверку с массивами объектов и забором их координат и дальнейшей перерисовкой. Каждую фазу хода происходит проверка на коллизии (когда два или более объектов находятся в одной точке, т.е., взаимодействуют).
Реализация интерфейса взаимодействия объектов
Интерфейс объектов представляет собой унифицированный способ взаимодействия между объектами (между кораблём и звездой, между кораблём и кораблем, и пр.). Данный интерфейс возникает всегда, когда необходимо совершить действие - например, действие полёта корабля к звезде или действие внутри экрана боя, или внутри экрана планеты. Это может быть какая-то кнопка, может быть мини панель, которая подсвечивается при наведении мыши на требуемый объект, может быть что-то иное.
На данном этапе для этого элемента будет поставлена заглушка. Будущее задание для геймдизайнера\дизайнера - разработать и проиллюстрировать этот интерфейс.
Писалось в дефиците времени, поэтому названо черновиком. Тем не менее, программист должен понимать, что здесь написано (реализация этого - первое его задание, как программиста). Как только программисту будет понятно всего, что написано - начнётся разработка.
На данном этапе программистов двое - я и Васяка.
Ожидаю любые вопросы\ответы. Время для технических вопросов.