首页  >  文章  >  后端开发  >  回合制多人啤酒游戏

回合制多人啤酒游戏

PHPz
PHPz原创
2024-09-11 14:31:48507浏览

由于我需要在不久的将来组织一个系统思维研讨会,所以我需要一个啤酒游戏来开始它。

啤酒游戏本身由四个角色组成:零售商、批发商、分销商和工厂。通过物流的时滞性质来理解系统视角,可以更好地理解系统边界。

由于这是一个几个小时的工作坊,我希望这款啤酒游戏能够实现以下功能。

这是一款多人游戏

啤酒游戏本身会有很多参与者在供应链中扮演不同的角色,但我希望能够有多个供应链同时竞争,看看谁得分更高。这样,我们就可以同时了解到他们的系统策略。

游戏主机应该能够看到每个人的状态

由于有多个队伍同时参赛,作为主持人我需要能够看到每个队伍目前的进度和得分。

游戏流程必须简单且易于控制节奏

正如我一开始所说的,这是一个简短的研讨会,所以我需要让每个人快速上手,并且我需要能够控制每一轮的细节。

此外,每轮开始时玩家的用户界面中都会出现一个计时器,通过倒计时来推进游戏节奏。

能够自定义角色

经典的啤酒游戏由四个角色组成,但角色越多,游戏时间就越长。所以我想调整一下游戏节奏,最好是三个角色。

经过一番查找,发现无论是开源项目还是已经上线的项目都不能完美满足这些需求。所以,我还是自己做一个吧。

啤酒游戏项目

https://github.com/wirelessr/beer_game

Turn Based Multiplayer Beer Game
主机界面

Turn Based Multiplayer Beer Game
玩家界面

整个项目是业务驱动开发和测试,覆盖率超过90%,请放心使用。

准备工作

在项目文件夹中创建一个机密文件。您应该看到我将其复制到 Dockerfile 中。

.streamlit/secrets.toml

[mongo]
uri = "<your mongo connection>"

[admin]
key = "<your admin key>"

[player]
key = "<your player key>"

由于该项目使用MongoDB,因此您必须在链接中填写您的帐户密码。另外,admin.key和player.key对应UI上的关键字段

毕竟我是将应用程序上传到公共云,所以我仍然需要一个基本的身份验证机制。如果您仅在本地运行并且觉得身份验证很麻烦,您可以删除相应的源代码。

安装与使用

该项目附加了 Dockerfile,因此可以直接使用 docker 运行。

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

对于开发,除了requiremnts.txt之外,还应该安装运行单元测试的requirements-test.txt。然后你可以通过Makefile运行所有的单元测试。

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

游戏流程

整个游戏分为主持人模式和参与者模式,分别对应UI右上角的选项。

主持人创建游戏时首先分配一个game_id,所有参与者都要用这个id填写player_game。

同一供应链上的所有玩家都需要使用相同的player_id,因此这个id也称为供应链ID,具有相同player_id的参与者通过player_role进行角色划分。

当参与者加入时,您可以在主持人的屏幕上看到状态。
Turn Based Multiplayer Beer Game

让我们看看从主持人的角度看完整的迭代会是什么样子。

Turn Based Multiplayer Beer Game

所有需要操作的组件都在这张图中,每一轮都是按刷新按钮开始,按下周结束。

本轮向所有供应链发送多少订单,由下单触发。

值得一提的是,下单本身是幂等的,所以改变数字再按一次就可以了,会使用最后一个数字。每个参与者界面的下单也将是幂等的。

主人下单后,店铺玩家即可接单。

Turn Based Multiplayer Beer Game

同样,供应链中的每个角色都以“刷新”开始,以“下订单”结束,商店玩家采取行动,然后零售商玩家采取行动,依此类推。

最后,回到主持人,再次按“刷新”即可查看本轮所有状态,按“下周”即可结束本轮。

游戏详情

刷新期间实际完成了几件事。

  1. 它根据四个星期前的订单从​​下游补充库存。
  2. 它接收来自上游的订单。
  3. 根据可以销售的库存来决定销售多少。

由于下订单是幂等的,因此刷新本身也是幂等的。

未来的工作

现在基本上满足了我所有的需求,但还有一些改进的地方。

例如,虽然主持人可以看到所有参与者的状态,但如果有一个图表来显示库存和成本信息随时间的变化会很有帮助,这对于比赛结束后回顾比赛很有用.

还有一个更基本的问题:当前的UI根本没有测试覆盖率,主要是因为当前的游戏流程相当简单。只需在 UI 上点击几下即可涵盖所有 UI 流程,因此我不太依赖自动测试。不过如果有UI修改的话,还是会有点繁琐,所以最好有一个UI单元测试。

总的来说,这些要求是优化,但缺少它们并不影响功能。

如果您有其他想法,也可以提交 Pull Request,欢迎贡献。

以上是回合制多人啤酒游戏的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn