rts_game_backend/README.md
DracoSense 3c4f793e18 init
2021-03-16 22:12:46 +03:00

83 lines
5.8 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Описание игры
## Общее
1. Жанр - RTS
2. Графика - ncurses
3. Язык - c++
4. Сборка - cmake . && make
## Описание
    Игра - попытка сделать RTS в консоли с расширяемыми и конфигурируемыми абстрактными юнитами. Т.е. все более-менее сложные объекты в игре являются классом Unit с определённым набором модулей дополнения. Модули задают свойства (кроме основных характеристик) и способности объекта.
    Управление - стрелочки для "курсора", которым можно что-то делать в мире, выбор в меню с помощью привязанных клавиш. Хотелось бы ещё довавить привязки клавиш к группам юнитов и позициям (дополнительно).
    Игра может быть будет против AI, ещё менее вероятно получится / успею сделать игру для 2 игроков с одного компьютера (дополнительно) и по p2p соединению (дополнительно)
     Дополнительно - значит "было бы хорошо сделать, но скорее всего не успею"
## Классы
1. App - главный класс, отвечает за инициализацию приложения
2. Game - класс, отвечающий за игру
3. Menu - класс, отвечающий за меню вне игры
4. Draw - "фасад" библиотеки отрисовки, низкоуровневое рисование
5. MenuDraw - "фасад", высокоуровневое рисование для Menu (элементы вне игры)
Рисует меню по массиву строк, реализует выделение активного пункта
6. GameDraw - "фасад", высокоуровневое рисование для Game
Принимает указатели на GameMap, GameMenu, PlayerData
Рисует интерфейс: меню из пунктов + клавиш активации пунктов, карт, рисует миникарту по карте (дополнительная цель)
7. Input - обработка ввода для игрока / buhjrjd
8. GameController - Для каждого игрока / AI преобразует команды в события в GameEvents
9. GameEvents - центр событий, передаётся как аргумент в разные классы, имеет функцию, ставящую функцию для прослушивания события и функцию для активации события
10. PlayerData - текущие данные для игрока (позиция "курсора" и тп)
11. GameMap - класс карты
Карта состоит из Cell
На карте есть Action-элементы - простейшие элементы, как-то меняющие мир при update (например, атака)
На карте есть UnitObj - объекты юнитов (Unit) на карте
12. Cell - клетка поля, содержит тип, привязанный Unit (если есть) и привязанный Action (если есть)
13. UnitObj - набор клеток, привязан к Unit и отображает его на карте
14. GameMenu - класс, создающий и обовляющий состояние меню (в зависимости от активного объекта и тп)
15. Unit - основной класс юнита, состоит из базовых карактеристик, привязки к Map, PlayerData, GameMenu..., массива Memory - памяти, использующейся для совершения действий, массива Module - модулей, позволяющих юниту совершать действия и тп
16. UnitBuilder - конструктор Unit из файла / функциями
Конфигурируется набор модулей, некоторый характеристика, размер Memory
17. Action - может реагировать на события, может что-то делать на update(), на прохожение через клетку (в зависимости от типа), на столкновение с UnitObj
18. Attack - простейшая атака, мгновенно двигается до цели и наносит повреждения, потомок Action
19. Module - модуль Unit, может что-то делать с Memory, привязанными к Unit классами (например, Map). Номера Memory ячеек для функций конфигурируются в ModuleBuilder
От Module наследуются различные осн. модули (двагатель, пушка...), логические для элементов Memory (while i move j -> k, if i copy j -> k ...) (дополнительно), простейшие (таймер, подвинутся. создать опр. Action...) (дополнительно)
20. ModuleBuilder - конструктор Module из файла / функциями
Конфигурируются все используемые Memory-поля, некоторые характеристики
21. Memory - простая ячейка памяти (пока), умеет get/set (может быть стоит заменить просто на int)