搜索
首页后端开发Python教程回合制多人啤酒游戏

回合制多人啤酒游戏

Sep 11, 2024 pm 02:31 PM

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

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

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

这是一款多人游戏

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

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

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

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

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

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

能够自定义角色

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

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

啤酒游戏项目

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>"
</your></your></your>

由于该项目使用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
Python的科学计算中如何使用阵列?Python的科学计算中如何使用阵列?Apr 25, 2025 am 12:28 AM

Arraysinpython,尤其是Vianumpy,ArecrucialInsCientificComputingfortheireftheireffertheireffertheirefferthe.1)Heasuedfornumerericalicerationalation,dataAnalysis和Machinelearning.2)Numpy'Simpy'Simpy'simplementIncressionSressirestrionsfasteroperoperoperationspasterationspasterationspasterationspasterationspasterationsthanpythonlists.3)inthanypythonlists.3)andAreseNableAblequick

您如何处理同一系统上的不同Python版本?您如何处理同一系统上的不同Python版本?Apr 25, 2025 am 12:24 AM

你可以通过使用pyenv、venv和Anaconda来管理不同的Python版本。1)使用pyenv管理多个Python版本:安装pyenv,设置全局和本地版本。2)使用venv创建虚拟环境以隔离项目依赖。3)使用Anaconda管理数据科学项目中的Python版本。4)保留系统Python用于系统级任务。通过这些工具和策略,你可以有效地管理不同版本的Python,确保项目顺利运行。

与标准Python阵列相比,使用Numpy数组的一些优点是什么?与标准Python阵列相比,使用Numpy数组的一些优点是什么?Apr 25, 2025 am 12:21 AM

numpyarrayshaveseveraladagesoverandastardandpythonarrays:1)基于基于duetoc的iMplation,2)2)他们的aremoremoremorymorymoremorymoremorymoremorymoremoremory,尤其是WithlargedAtasets和3)效率化,效率化,矢量化函数函数函数函数构成和稳定性构成和稳定性的操作,制造

阵列的同质性质如何影响性能?阵列的同质性质如何影响性能?Apr 25, 2025 am 12:13 AM

数组的同质性对性能的影响是双重的:1)同质性允许编译器优化内存访问,提高性能;2)但限制了类型多样性,可能导致效率低下。总之,选择合适的数据结构至关重要。

编写可执行python脚本的最佳实践是什么?编写可执行python脚本的最佳实践是什么?Apr 25, 2025 am 12:11 AM

到CraftCraftExecutablePythcripts,lollow TheSebestPractices:1)Addashebangline(#!/usr/usr/bin/envpython3)tomakethescriptexecutable.2)setpermissionswithchmodwithchmod xyour_script.3)

Numpy数组与使用数组模块创建的数组有何不同?Numpy数组与使用数组模块创建的数组有何不同?Apr 24, 2025 pm 03:53 PM

numpyArraysareAreBetterFornumericalialoperations andmulti-demensionaldata,而learthearrayModuleSutableforbasic,内存效率段

Numpy数组的使用与使用Python中的数组模块阵列相比如何?Numpy数组的使用与使用Python中的数组模块阵列相比如何?Apr 24, 2025 pm 03:49 PM

numpyArraySareAreBetterForHeAvyNumericalComputing,而lelethearRayModulesiutable-usemoblemory-connerage-inderabledsswithSimpleDatateTypes.1)NumpyArsofferVerverVerverVerverVersAtility andPerformanceForlargedForlargedAtatasetSetsAtsAndAtasEndCompleXoper.2)

CTYPES模块与Python中的数组有何关系?CTYPES模块与Python中的数组有何关系?Apr 24, 2025 pm 03:45 PM

ctypesallowscreatingingangandmanipulatingc-stylarraysinpython.1)usectypestoInterfacewithClibrariesForperfermance.2)createc-stylec-stylec-stylarraysfornumericalcomputations.3)passarraystocfunctions foreforfunctionsforeffortions.however.however,However,HoweverofiousofmemoryManageManiverage,Pressiveo,Pressivero

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

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

热工具

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器