Skip to content

Домашнее задание 4 - Проектирование игрового движка - #2

Open
mmikhail2001 wants to merge 12 commits into
mainfrom
game_logic
Open

mmikhail2001 wants to merge 12 commits into
mainfrom
game_logic

Conversation

@mmikhail2001

@mmikhail2001 mmikhail2001 commented Nov 7, 2022

Copy link
Copy Markdown
Collaborator

Описание классов

  1. IGameLoop

    • В методе Play() задает последовательность действий игрового цикла (ШП "Шаблонный метод")
      • void InitializeGame(OPTION_PLAY option)
      • size_t MakeStep(size_t indexPlayer)
      • bool EndOfGame()
      • void PrintWinner()
    • Метод Play() запускает игровую сессию в отдельном потоке, контроль возврата управления осуществляется на сервере
  2. TicTacToeLoop

    • Наследник IGameLoop
    • Переопределяет действия конкретной игры
    • Владеет следующими объектами, которые необходимы для функционирования игрового цикла:
      • 2 объекта класса IInput для ввода команд первого и второго игрока (пользователя, бота)
      • объект класса IOutput для вывода состояния игры, игрового поля, сообщений пользователям
      • объект класса IGameLogic, который инкапсулирует логику игры, правила и игровое поле
      • объект класса GameProgress для логирования ходов игроков в рамках одного раунда и отката на предыдущие шаги
  3. IGameLogic

    • Инкапсулирует правила игры, текущее состояние раунда
    • Владеет игровым полем, зависит от его состояния
  4. IGameField

    • Предоставляет функционал для работы с игровым полем как с контейнером
  5. IRoundStorage

    • Отвечает за добавление и хранение ходов игроков в рамках одного раунда
      • void AddStep(size_t indexCell, size_t indexPlayer, size_t valueCell)
    • Может восстановить игровое поле на момент последнего хода
      • void InitializeField(IGameField *field) const
  6. IGameProgress

    • Наследник IRoundStorage
    • Добавляет функционал для отката к предыдущим шагам
      • void Rollback(IGameField *field, size_t countSteps)
  7. ICompressor

    • Инкапсулирует логику для упаковки и распаковки хронологии ходов раунда
    • Использует с IRoundStorage
  8. ManagerHandler (ШП "Централизованная цепочка обязанностей")

    • Класс для обработки запроса с сервера
    • Содержит вектор обработчиков по ссылке на базовый класс
    • По приходу данных из сети перебирает обработчики в поисках нужного и запускает обработку запроса

UML-диаграмма (app.diagrams.net): ссылка

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant