„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Rundenbasiertes Mehrspieler-Bierspiel

Rundenbasiertes Mehrspieler-Bierspiel

Veröffentlicht am 16.11.2024
Durchsuche:571

Da ich in naher Zukunft einen Workshop zum Systemdenken organisieren muss, brauche ich zum Einstieg ein Bierspiel.

Das Bierspiel selbst besteht aus vier Charakteren: Einzelhändler, Großhändler, Händler und Fabrik. Durch die zeitverzögerte Natur der Logistik können Sie die Systemperspektive verstehen und die Systemgrenzen besser verstehen.

Da es sich um einen mehrstündigen Workshop handelt, möchte ich, dass dieses Bierspiel die folgenden Funktionen erfüllt.

Es ist ein Multiplayer-Spiel.

Beim Bierspiel selbst werden viele Teilnehmer verschiedene Rollen in der Lieferkette spielen, aber ich würde gerne mehrere Lieferketten gleichzeitig konkurrieren lassen, um zu sehen, wer besser abschneidet. So können wir gleichzeitig etwas über ihre Systemstrategien erfahren.

Der Spielhost sollte den Status aller sehen können.

Da mehrere Teams gleichzeitig gegeneinander antreten, muss ich als Gastgeber in der Lage sein, zu sehen, wie jedes Team im Moment Fortschritte macht und punktet.

Der Spielablauf muss einfach und leicht zu kontrollieren sein..

Wie ich zu Beginn sagte, ist dies ein kurzer Workshop, daher muss ich alle schnell auf den neuesten Stand bringen und in der Lage sein, die Details jeder Runde zu kontrollieren.

Darüber hinaus erscheint zu Beginn jeder Runde ein Timer in der Benutzeroberfläche des Spielers, der das Spieltempo durch Herunterzählen erhöht.

Sie können die Zeichen anpassen.

Ein klassisches Bierspiel besteht aus vier Charakteren, aber je mehr Charaktere es sind, desto länger dauert das Spiel. Deshalb möchte ich das Spieltempo so anpassen, dass es besser ist, drei Charaktere zu haben.

Nachdem ich mich umgesehen hatte, stellte ich fest, dass weder Open-Source-Projekte noch Projekte, die bereits online sind, diese Anforderungen perfekt erfüllen können. Also mache ich lieber selbst eins.

Bierspielprojekt

https://github.com/wirelessr/beer_game

Turn Based Multiplayer Beer Game
Host-Benutzeroberfläche

Turn Based Multiplayer Beer Game
Spieler-Benutzeroberfläche

Das gesamte Projekt wurde geschäftsorientiert entwickelt und mit einer Abdeckung von über 90 % getestet. Sie können es also gerne nutzen.

Bereitschaft

Erstellen Sie eine Datei für Geheimnisse im Projektordner. Sie sollten sehen, wie ich es in die Docker-Datei kopiere.

.streamlit/secrets.toml

[mongo]
uri = ""

[admin]
key = ""

[player]
key = ""

Da dieses Projekt MongoDB verwendet, müssen Sie den Link mit Ihrem Kontopasswort ausfüllen. Darüber hinaus entsprechen admin.key und player.key den Schlüsselfeldern auf der Benutzeroberfläche.

Schließlich lade ich die App in die öffentliche Cloud hoch und benötige daher weiterhin einen grundlegenden Authentifizierungsmechanismus. Wenn Sie nur lokal arbeiten und die Authentifizierung problematisch ist, können Sie den entsprechenden Quellcode entfernen.

Installation und Verwendung

An dieses Projekt ist eine Docker-Datei angehängt, sodass es direkt mit Docker ausgeführt werden kann.

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

Für die Entwicklung sollte zusätzlich zu requiremnts.txt auch require-test.txt installiert werden, das die Unit-Tests ausführt. Dann können Sie alle Unit-Tests über das Makefile ausführen.

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

Spielfluss

Das gesamte Spiel ist in einen Host-Modus und einen Teilnehmermodus unterteilt, die den Optionen in der oberen Ecke der Benutzeroberfläche entsprechen.

Der Host weist zunächst eine Game_ID zu, um das Spiel zu erstellen, und alle Teilnehmer müssen das Player_Game mit dieser ID ausfüllen.

Alle Spieler in derselben Lieferkette müssen dieselbe Spieler-ID verwenden, daher wird diese ID auch als Lieferketten-ID bezeichnet und Teilnehmer mit derselben Spieler-ID werden durch Spielerrolle in Rollen unterteilt.

Sie können den Status auf dem Bildschirm des Gastgebers sehen, wenn ein Teilnehmer beitritt.
Turn Based Multiplayer Beer Game

Sehen wir uns an, wie eine vollständige Iteration aus Sicht des Hosts aussehen würde.

Turn Based Multiplayer Beer Game

Alle Komponenten, die manipuliert werden müssen, sind in diesem Bild zu sehen, und jede Runde beginnt mit dem Klicken auf die Schaltfläche „Aktualisieren“ und endet mit dem Klicken auf „Nächste Woche“.

Wie viele Bestellungen in dieser Runde an alle Lieferketten gesendet werden sollen, wird durch „Bestellung aufgeben“ ausgelöst.

Es ist erwähnenswert, dass die Bestellung selbst idempotent ist. Es ist also in Ordnung, die Nummer zu ändern und erneut zu drücken. Die letzte Nummer wird verwendet. Die Platzierungsreihenfolge der Schnittstelle jedes Teilnehmers ist ebenfalls idempotent.

Sobald der Host die Bestellung aufgegeben hat, kann der Shop-Spieler die Bestellung annehmen.

Turn Based Multiplayer Beer Game

In ähnlicher Weise beginnt jede Rolle in der Lieferkette mit „Aktualisieren“ und endet mit „Bestellung aufgeben“, wobei der Shop-Spieler die Aktion ausführt, gefolgt vom Einzelhändler-Spieler und so weiter.

Abschließend zurück zum Gastgeber, der erneut auf „Aktualisieren“ klicken kann, um alle Status für die Runde anzuzeigen, und auf „Nächste Woche“ klicken kann, um die Runde zu beenden.

Spieldetails

Während der Aktualisierung werden tatsächlich einige Dinge erledigt.

  1. Es füllt den Lagerbestand von nachgelagerten Unternehmen auf der Grundlage von Bestellungen auf, die vor vier Wochen aufgegeben wurden.
  2. Es erhält Aufträge von Upstream.
  3. Entscheidet, wie viel verkauft werden soll, basierend auf dem Inventar, das verkauft werden kann.

Da „Order platzieren“ idempotent ist, ist auch „Aktualisieren“ selbst idempotent.

Zukünftige Arbeit

Es erfüllt im Grunde alle meine Anforderungen, aber es könnten einige Verbesserungen vorgenommen werden.

Obwohl der Gastgeber beispielsweise den Status aller Teilnehmer sehen kann, wäre es hilfreich, ein Diagramm zu haben, das die Veränderung des Inventars und die Kosteninformationen im Laufe der Zeit zeigt, was für die Überprüfung des Spiels nach dem Ende nützlich wäre .

Es gibt auch ein grundlegenderes Problem: Die aktuelle Benutzeroberfläche bietet überhaupt keine Testabdeckung, hauptsächlich weil der aktuelle Spielablauf recht einfach ist. Nur ein paar Klicks auf der Benutzeroberfläche reichen aus, um den gesamten Benutzeroberflächenfluss abzudecken, daher verlasse ich mich nicht so sehr auf automatische Tests. Wenn jedoch eine Änderung der Benutzeroberfläche vorgenommen wird, ist dies immer noch etwas mühsam. Daher ist es besser, einen Komponententest der Benutzeroberfläche durchzuführen.

Insgesamt handelt es sich bei diesen Anforderungen um Optimierungen, deren Fehlen jedoch keinen Einfluss auf die Funktionalität hat.

Wenn Sie weitere Ideen haben, können Sie auch einfach einen Pull-Request einreichen, Beiträge sind willkommen.

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/lazypro/turn-based-multiplayer-beer-game-3n5k?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3