New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Создание схемы базы и моделей #20
Comments
Battle пишется через a :) Но мне непонятно, зачем нужны две сущности для игры. |
По идее |
Точно, задание же тоже надо хранить. Тогда дополню свой вариант так: вводим сущность Task - задача, и связываем их с Game как один ко многим (в Game должна храниться ссылка на Task). Т.е., грубо, имеем следующую структуру БД:
В итоге процесс получается примерно такой:
|
в твоем случае получается два конечных автомата, как я понял создается две сущности |
если вместо второго юзера будет бот? |
Получается конечный автомат с тремя состояниями: Idle (дефолтное, 0-1 игроков), Running (только из Idle, 2+ игроков) и Finished (из Running или Idle, 0 игроков). Возможно, этот вариант чуть сложнее твоего, но и гибче - позволяет подключаться к одной игре более чем 2-м игрокам, к примеру. |
@krigar1184, Не совсем понял, в какой сущности в твоем случае будет |
Согласен с @krigar1184. Battle и Game выглядят сущностями одного порядка.
@vtm9 можно стейт хранить в Game(id, task_id, state) |
@st0ck, логично, согласен |
Должно быть достаточно для начала. |
@icu0755 |
Тогда это GameResult или GameStats, куда нужно записать результат игры. Тактику или Игровой лог можно писать в отдельную табличке, не привязанную к игроку или даже к игре (game_id в примере можно заменить просто на id).
|
@icu0755 по мне так один/пару запросов в базу в таблицу
На счет language в табличке, польза есть - у нас будет в базе реестр языков, а параметры со временем могут появиться. Хотя можно его и в коде приложения хранить. Тут на любителя.
По поводу кеша и тд, я бы пробовал оптимизировать позже, и поскольку у нас |
@icu0755 я не видел что из себя представляла реализация игры и поэтому, возможно, чего-то не понимаю. Там нельзя было зайти в уже прошедшую игру и посмотреть что происходило? Возможно я не очень понимаю, что конкретно имеется в виду под GameResult. Можешь пояснить? У User2Game была совершенно простая мысль - указать какие пользователи участвовали в конкретной игре. Язык и тактика - это то, что привязано к составному ключу (user_id, game_id) как 1-к-1 и было внесено в эту же таблицу просто чтобы не плодить сущности. На мой взгляд хранить в GameLog ход решения всех участников нецелесообразно. Гораздо проще будет обрабатывать информацию по каждому пользователю отдельно (с привязкой к задаче, игроку и, возможно, игре). |
@vtm9 @st0ck из переписки я понял, что User2Game планировалась для хранения текущих сессий, что, мне кажется, является неверным решением, поэтому я предложил от нее "избавиться". Если в ней хранится только результат, то да, она фактически копия По GameLog ваша правда, конечно же, надо разделить лог по языкам. Иначе этим логом невозможно будет пользоваться для создания бота. Если стоит задача хранить историю игры для повторного просмотра имеет смысл разбить на game_id, user_id. Пока такой задачи не стоит, судя по трекеру. @vtm9 в GameLog нам нужен по сути только уникальный id, табличка может выглядеть так |
Ребят, возвращаясь к теме ботов, нет ли смысла разделить понятие |
@kinley Если |
@vtm9 Если
Это некоторые моменты, которыми будет отличаться В общем, есть подозрение, что я усложняю. Саму реализацию бота еще не думал. Важно - хранить все логи игр. Тогда изначально можно просто копировать ходы лучшего/среднего игрока. А в дальнейшем можно добавить машинное обучение или прочие приблуды и экспериментировать с AI бота. |
@kinley. По идее Про логику игры ботов можно отдельное обсуждение сделать. |
@vtm9 такой вариант кажется лучше! Ребят, а есть где-то расписанные что-то вроде User Stories / Use Cases, чтобы было понятно, какие кейсы покрыты текущей структурой, а какие не очень на нее ложатся? |
Думаю, что пока надо отталкиваться от одной итории. Есть игры, есть пользователи с гитхаба. пользователь может выбирать игры и играть, а там либо другой игрок, либо бот |
Поддерживаю идею разделить пользователя и игрока, например AuthUser и Player - в будущем будет проще реализовать логику для ботов. |
@krigar1184, а можешь по подробнее, например как их хранить в базе |
@vtm9, простая связь один к одному. Когда пользователь логинится первый раз, создаётся AuthUser (наверняка во Фениксе это есть из коробки), здесь будут храниться данные, относящиеся к аутентификации/авторизации. Модель Player создаётся при вступлении пользователя в игру первый раз, и она же используется для последующих игр. Соответственно, тут храним данные, относящиеся непосредственно к играм: количество проведённых игр, побед и т.п. |
@krigar1184, пока не очень понятно, зачем |
Бот может быть Player без AuthUser, например. Для этого Player и нужен - для отделения логики аутентификации (которая ботам не нужна) от логики игры. |
Бота можно порождать как отдельный процесс, который шлет данный в игру, по заданному алгоритму, а потом помечать, что играл бот. Тогда |
Бот - это по сути тоже Player, т.е мы переместим с этим связанные проблемы (рейтинг, количество проведенных побед и т.д.) из таблицы User в таблицу Player. Для аутентификации по OAuth используются токены, которые скорее всего записываются в отдельную таблицу, а для бота естественно никакого токена не будет. Т.е. логика аутентификации уже будет вынесена в другую таблицу. |
Кстати на счет ботов, можно сделать такую штуку, как в strava. Типо там ты можешь пробежать маршрут, он его запишет со всеми подробностями, а потом твои друзья увидят твои результаты и могут соревноваться по этому же маршруту. То есть ты можешь играть на скорость с записями треков других пользователей, например если они твои друзья. |
Предлагаю коллективно продумать основные модели и их связи. Если кто-то знает бесплатный инструмент для совместного проектирования, будет круто. А так можно просто в обсуждении.
Как вариант:
модели:
User
,Game
,Battle
,Language
связи:
у
battle
дваuser-a
и одинgame
.many_to_many
user
иbattle
battle has_one game
many_to_many game languages
The text was updated successfully, but these errors were encountered: