Платформа, Арбитр, api - gnkoshelev/ai-game-platform GitHub Wiki
Платформа / Арбитр
Здесь будет предполагаемая точка "разделения обязанностей". Введя заготовки классов Platform и GameArbitr и настроив Api между ними, далее можно будет работать над различными модулями независимо.
Первое направаление
- Взаимодействие с БД
- Связь с FrontEnd
- Курирование различных GameArbitr-ов
- Настройка роутинга
- Авторизация/Аутентификация
- Интерфейс для загрузки новых AI/Игр
Второе направление
- Реализация GameArbitr
- Загрузка Game и AI(s)
- Моделирование хода игры
- Сохранение результатов игры
Ес-но это всё не в формате "Первое - для человека Х, а второе - для Y". Практически любые два модуля из двух разнных групп можно будет начать реализовывать параллельно, так что это лишь для удобства дальнейшего планирования.
Пока в роли Platform выступает само приложение (TODO: понять, как оно работает в боевом режиме с группой одновременных пользователей). GameArbitr реализован в виде заглушки.
Методы GameArbitr
- GameArbitr(game: Game) - Конструктор.
- LoadAI(ai : AI, id: Int) - загрузка указанного AI на заданное место
- CurrentState() : GameState - возвращает ID состояния партии.
- Start() - начинает моделирование игры
- GetSnapshot(id : Int) : GameSnapshot - возвращает состоянии партии в начале заданного хода. TODO: обсудить, состояние с точки зрения игры или же с точки зрения текущего игрока TODO: обсужить формат GameSnapshot
- GetSnapshots() : List - хотелось бы что-то вроде IEnumerable из C#.
- TODO: Требуется метод для возвращения информации об ошибке во время исполнения игры (возможен wrapper внутри GameArbitr для AI и Game)
- GetStatus() : StatusCode
- TODO: Требуется review API Гришей
GameState
- NOT_LOADED - не хватает чего-то для старта игры (например, самой игры или AI)
- READY - игра готова к старту
- IN_PROGRESS
- FINISHED - игра успешно закончена
- FINISHED_AND_SAVED - результаты игры сохранены в БД
- ERROR - произошла ошибка, которые привела к остановке моделирования игры / сохранения результатов
Пример использования
val gameArbitr = GameArbitr(game)
gameArbitr.LoadAI(ai1, 0)
gameArbitr.LoadAI(ai2, 1)
gameArbitr.Start()
...
val snapshots = gameArbitr.GetSnapshots()