«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Пошаговая многопользовательская игра с пивом

Пошаговая многопользовательская игра с пивом

Опубликовано 16 ноября 2024 г.
Просматривать:756

Поскольку в ближайшем будущем мне нужно организовать семинар по системному мышлению, для начала мне нужна игра в пиво.

Сама игра о пиве состоит из четырех персонажей: Розничного торговца, Оптовикового торговца, Дистрибьютора и Фабрики. Благодаря временной задержке логистики можно понять перспективу системы и лучше понять границы системы.

Поскольку это семинар продолжительностью несколько часов, я хочу, чтобы эта пивная игра выполняла следующие функции.

Это многопользовательская игра.

В самой пивной игре будет много участников, играющих разные роли в цепочке поставок, но я бы хотел, чтобы несколько цепочек поставок конкурировали одновременно, чтобы увидеть, кто наберет больше очков. Таким образом, мы можем одновременно узнать об их системных стратегиях.

Хозяин игры должен иметь возможность видеть статус каждого.

Поскольку одновременно соревнуются несколько команд, мне как организатору необходимо иметь возможность видеть, как каждая команда прогрессирует и набирает очки в данный момент.

Ход игры должен быть простым и легким для контроля темпа.

Как я уже сказал вначале, это короткий семинар, поэтому мне нужно быстро ввести всех в курс дела и иметь возможность контролировать детали каждого раунда.

Более того, в начале каждого раунда в пользовательском интерфейсе игрока появляется таймер, ускоряющий темп игры за счет обратного отсчета.

Возможность настраивать персонажей.

Классическая пивная игра состоит из четырех персонажей, но чем больше персонажей, тем длиннее будет игра. Поэтому я бы хотел настроить темп игры так, чтобы было лучше иметь трёх персонажей.

После поиска я обнаружил, что ни проекты с открытым исходным кодом, ни проекты, которые уже находятся в сети, не могут полностью удовлетворить этим требованиям. Так что лучше я сделаю его сам.

Пивной игровой проект

https://github.com/wirelessr/beer_game

Turn Based Multiplayer Beer Game
Интерфейс хоста

Turn Based Multiplayer Beer Game
Интерфейс проигрывателя

Весь проект разработан и протестирован для бизнеса с охватом более 90%, поэтому не стесняйтесь его использовать.

Готовность

Создайте файл для секретов в папке проекта. Вы должны увидеть, как я копирую его в Dockerfile.

.streamlit/secrets.toml

[mongo]
uri = ""

[admin]
key = ""

[player]
key = ""

Поскольку в этом проекте используется MongoDB, вам необходимо заполнить ссылку паролем вашей учетной записи. Кроме того, admin.key и player.key соответствуют ключевым полям пользовательского интерфейса.

В конце концов, я загружаю приложение в общедоступное облако, поэтому мне все еще нужен базовый механизм аутентификации. Если вы работаете только локально и испытываете трудности с аутентификацией, вы можете удалить соответствующий исходный код.

Установка и использование

К этому проекту прикреплен файл Dockerfile, поэтому его можно запускать непосредственно с помощью docker.

docker build -t beer_game .
docker run --rm --name beer -p 8501:8501 beer_game

Для разработки, помимо requiremnts.txt, также следует установить файл require-test.txt, который запускает модульные тесты. Затем вы можете запустить все модульные тесты через Makefile.

pip install -r requiremnts.txt
pip install -r requirements-test.txt
make test

Ход игры

Вся игра разделена на режим организатора и режим участника, которые соответствуют опциям в верхнем углу пользовательского интерфейса.

Хост сначала назначает game_id для создания игры, и все участники должны заполнить player_game этим идентификатором.

Все игроки в одной цепочке поставок должны использовать один и тот же player_id, поэтому этот идентификатор также известен как идентификатор цепочки поставок, а участники с одинаковым player_id разделяются на роли с помощью player_role.

Вы можете увидеть статус на экране организатора, когда участник присоединяется.
Turn Based Multiplayer Beer Game

Давайте посмотрим, как будет выглядеть полная итерация с точки зрения хоста.

Turn Based Multiplayer Beer Game

Все компоненты, которыми нужно манипулировать, показаны на этом рисунке, и каждый ход начинается с нажатия кнопки «Обновить» и заканчивается нажатием кнопки «Следующая неделя».

Что касается количества заказов, которые нужно отправить во все цепочки поставок в этом раунде, они будут инициированы размещением заказа.

Стоит отметить, что порядок размещения сам по себе идемпотентный, поэтому можно изменить номер и нажать его еще раз, будет использован последний номер. Порядок размещения интерфейса каждого участника также будет идемпотентным.

После того как хозяин разместил заказ, игрок в магазине может его принять.

Turn Based Multiplayer Beer Game

Аналогично, каждая роль в цепочке поставок начинается с обновления и заканчивается размещением заказа, при этом действие выполняет игрок магазина, за ним следует игрок розничного продавца и так далее.

Наконец, вернемся к организатору, который может снова нажать «Обновить», чтобы просмотреть все статусы раунда, или «На следующей неделе», чтобы завершить раунд.

Детали игры

Во время обновления было сделано несколько вещей.

  1. он пополняет запасы нижестоящих предприятий на основе заказов, размещенных четыре недели назад.
  2. он получает заказы от добывающих компаний.
  3. решает, сколько продать, исходя из того, какой инвентарь он может продать.

Поскольку порядок размещения идемпотентен, сама функция обновления также идемпотентна.

Будущая работа

В принципе, сейчас он отвечает всем моим потребностям, но можно внести некоторые улучшения.

Например, хотя организатор может видеть статус всех участников, было бы полезно иметь график, показывающий изменение инвентаря и информацию о стоимости с течением времени, что было бы полезно для просмотра игры после ее завершения. .

Есть и более фундаментальная проблема: текущий пользовательский интерфейс вообще не покрыт тестами, главным образом потому, что текущий игровой процесс довольно прост. Всего несколько щелчков мышью по пользовательскому интерфейсу охватывают весь поток пользовательского интерфейса, поэтому я не слишком полагаюсь на автоматическое тестирование. Однако, если произойдет модификация пользовательского интерфейса, это все равно будет немного утомительным, поэтому было бы лучше провести модульный тест пользовательского интерфейса.

В целом данные требования являются оптимизациями, но их отсутствие не влияет на функциональность.

Если у вас есть дополнительные идеи, вы также можете просто отправить запрос на включение, вклад приветствуется.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/lazypro/turn-based-multiplayer-beer-game-3n5k?1. Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3