回合制多人啤酒游戏
由于我需要在不久的将来组织一个系统思维研讨会,所以我需要一个啤酒游戏来开始它。
啤酒游戏本身由四个角色组成:零售商、批发商、分销商和工厂。通过物流的时滞性质来理解系统视角,可以更好地理解系统边界。
由于这是一个几个小时的工作坊,我希望这款啤酒游戏能够实现以下功能。
这是一款多人游戏。
啤酒游戏本身会有很多参与者在供应链中扮演不同的角色,但我希望能够有多个供应链同时竞争,看看谁得分更高。这样,我们就可以同时了解到他们的系统策略。
游戏主机应该能够看到每个人的状态。
由于有多个队伍同时参赛,作为主持人我需要能够看到每个队伍目前的进度和得分。
游戏流程必须简单且易于控制节奏。
正如我一开始所说的,这是一个简短的研讨会,所以我需要让每个人快速上手,并且我需要能够控制每一轮的细节。
此外,每轮开始时玩家的用户界面中都会出现一个计时器,通过倒计时来推进游戏节奏。
能够自定义角色。
经典的啤酒游戏由四个角色组成,但角色越多,游戏时间就越长。所以我想调整一下游戏节奏,最好是三个角色。
经过一番查找,发现无论是开源项目还是已经上线的项目都不能完美满足这些需求。所以,我还是自己做一个吧。
啤酒游戏项目
https://github.com/wirelessr/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进行角色划分。
当参与者加入时,您可以在主持人的屏幕上看到状态。
让我们看看从主持人的角度看完整的迭代会是什么样子。
所有需要操作的组件都在这张图中,每一轮都是按刷新按钮开始,按下周结束。
本轮向所有供应链发送多少订单,由下单触发。
值得一提的是,下单本身是幂等的,所以改变数字再按一次就可以了,会使用最后一个数字。每个参与者界面的下单也将是幂等的。
主人下单后,店铺玩家即可接单。
同样,供应链中的每个角色都以“刷新”开始,以“下订单”结束,商店玩家采取行动,然后零售商玩家采取行动,依此类推。
最后,回到主持人,再次按“刷新”即可查看本轮所有状态,按“下周”即可结束本轮。
游戏详情
刷新期间实际完成了几件事。
- 它根据四个星期前的订单从下游补充库存。
- 它接收来自上游的订单。
- 根据可以销售的库存来决定销售多少。
由于下订单是幂等的,因此刷新本身也是幂等的。
未来的工作
现在基本上满足了我所有的需求,但还有一些改进的地方。
例如,虽然主持人可以看到所有参与者的状态,但如果有一个图表来显示库存和成本信息随时间的变化会很有帮助,这对于比赛结束后回顾比赛很有用.
还有一个更基本的问题:当前的UI根本没有测试覆盖率,主要是因为当前的游戏流程相当简单。只需在 UI 上点击几下即可涵盖所有 UI 流程,因此我不太依赖自动测试。不过如果有UI修改的话,还是会有点繁琐,所以最好有一个UI单元测试。
总的来说,这些要求是优化,但缺少它们并不影响功能。
如果您有其他想法,也可以提交 Pull Request,欢迎贡献。
以上是回合制多人啤酒游戏的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。 Python以简洁和强大的生态系统着称,C 则以高性能和底层控制能力闻名。

两小时内可以学到Python的基础知识。1.学习变量和数据类型,2.掌握控制结构如if语句和循环,3.了解函数的定义和使用。这些将帮助你开始编写简单的Python程序。

Python在游戏和GUI开发中表现出色。1)游戏开发使用Pygame,提供绘图、音频等功能,适合创建2D游戏。2)GUI开发可选择Tkinter或PyQt,Tkinter简单易用,PyQt功能丰富,适合专业开发。

2小时内可以学会Python的基本编程概念和技能。1.学习变量和数据类型,2.掌握控制流(条件语句和循环),3.理解函数的定义和使用,4.通过简单示例和代码片段快速上手Python编程。

Python在web开发、数据科学、机器学习、自动化和脚本编写等领域有广泛应用。1)在web开发中,Django和Flask框架简化了开发过程。2)数据科学和机器学习领域,NumPy、Pandas、Scikit-learn和TensorFlow库提供了强大支持。3)自动化和脚本编写方面,Python适用于自动化测试和系统管理等任务。

Python更易学且易用,C 则更强大但复杂。1.Python语法简洁,适合初学者,动态类型和自动内存管理使其易用,但可能导致运行时错误。2.C 提供低级控制和高级特性,适合高性能应用,但学习门槛高,需手动管理内存和类型安全。

要在有限的时间内最大化学习Python的效率,可以使用Python的datetime、time和schedule模块。1.datetime模块用于记录和规划学习时间。2.time模块帮助设置学习和休息时间。3.schedule模块自动化安排每周学习任务。

Python在自动化、脚本编写和任务管理中表现出色。1)自动化:通过标准库如os、shutil实现文件备份。2)脚本编写:使用psutil库监控系统资源。3)任务管理:利用schedule库调度任务。Python的易用性和丰富库支持使其在这些领域中成为首选工具。
