Heim Backend-Entwicklung Python-Tutorial Rundenbasiertes Mehrspieler-Bierspiel

Rundenbasiertes Mehrspieler-Bierspiel

Sep 11, 2024 pm 02:31 PM

Da ich in naher Zukunft einen Workshop zum Systemdenken organisieren muss, brauche ich zum Start 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 Charaktere 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 = "<your mongo connection>"

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

[player]
key = "<your 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 noch einen grundlegenden Authentifizierungsmechanismus. Wenn Sie nur lokal arbeiten und die Authentifizierung problematisch ist, können Sie den entsprechenden Quellcode entfernen.

Installation und Verwendung

Diesem Projekt ist eine Docker-Datei beigefügt, 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 Drücken 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 kein Problem, 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 Gastgeber 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 durchfü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“, 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

Im Grunde erfüllt es jetzt alle meine Bedürfnisse, aber es gibt einige Verbesserungen, die vorgenommen werden könnten.

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 UI-Änderung vorgenommen wird, ist dies immer noch etwas mühsam, daher wäre es besser, einen UI-Unit-Test 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.

Das obige ist der detaillierte Inhalt vonRundenbasiertes Mehrspieler-Bierspiel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

PHP-Tutorial
1535
276
Jul 21, 2025 am 02:48 AM

Um mit Quantum Machine Learning (QML) zu beginnen, ist das bevorzugte Tool Python und Bibliotheken wie Pennylane, Qiskit, TensorFlowquantum oder Pytorchquantum müssen installiert werden. Machen Sie sich dann mit dem Prozess vertraut, indem Sie Beispiele ausführen, z. B. Pennylane zum Aufbau eines Quanten neuronalen Netzwerks. Implementieren Sie das Modell dann gemäß den Schritten der Datensatzvorbereitung, der Datencodierung, der Erstellung parametrischer Quantenschaltungen, klassisches Optimierer -Training usw.; Im tatsächlichen Kampf sollten Sie es vermeiden, komplexe Modelle von Anfang an zu verfolgen, Hardwarebeschränkungen zu beachten, hybride Modellstrukturen einzusetzen und kontinuierlich auf die neuesten Dokumente und offiziellen Dokumente zu verweisen, um die Entwicklung zu verfolgen.

Abgeschlossener Python Blockbuster Online -Eingang Python Free Fertig -Website -Sammlung Abgeschlossener Python Blockbuster Online -Eingang Python Free Fertig -Website -Sammlung Jul 23, 2025 pm 12:36 PM

Dieser Artikel hat mehrere "Fertig" -Projekt-Websites von Python und "Blockbuster" -Portalen "Blockbuster" für Sie ausgewählt. Egal, ob Sie nach Entwicklungsinspiration suchen, den Quellcode auf Master-Ebene beobachten und lernen oder Ihre praktischen Fähigkeiten systematisch verbessern, diese Plattformen sind nicht zu übersehen und können Ihnen helfen, schnell zu einem Python-Meister zu werden.

Python Run Shell -Befehlsbeispiel Python Run Shell -Befehlsbeispiel Jul 26, 2025 am 07:50 AM

Verwenden Sie Subprozess.run (), um die Befehle von Shell sicher auszuführen und die Ausgabe zu erfassen. Es wird empfohlen, Parameter in Listen zu übergeben, um Einspritzrisiken zu vermeiden. 2. Wenn die Shell -Eigenschaften erforderlich sind, können Sie Shell = True einstellen, aber achten Sie auf die Befehlsinjektion. 3. verwenden subprocess.popen, um die Echtzeit-Ausgangsverarbeitung zu realisieren. 4. Setzen Sie check = true, um Ausnahmen zu werfen, wenn der Befehl fehlschlägt. 5. Sie können direkt Ketten anrufen, um die Ausgabe in einem einfachen Szenario zu erhalten. Sie sollten Subprozess vorrangig machen. Die obigen Methoden überschreiben die Kernverwendung der Ausführung von Shell -Befehlen in Python.

Python Seeborn JointPlot Beispiel Python Seeborn JointPlot Beispiel Jul 26, 2025 am 08:11 AM

Verwenden Sie die Jointplot von Seeborn, um die Beziehung und Verteilung zwischen zwei Variablen schnell zu visualisieren. 2. Das grundlegende Streudiagramm wird durch sns.jointplot (data = tips, x = "total_bill", y = "tip", sort = "scatter") implementiert, das Zentrum ist ein Streudiagramm und das Histogramm wird auf der oberen und unteren und rechten Seite angezeigt. 3. Fügen Sie Regressionslinien und Dichteinformationen zu einer Art "Reg" hinzu und kombinieren Sie Marginal_KWS, um den Edge -Plot -Stil festzulegen. 4. Wenn das Datenvolumen groß ist, wird empfohlen, "Hex" zu verwenden,

Python Web Scraping Tutorial Python Web Scraping Tutorial Jul 21, 2025 am 02:39 AM

Um Python -Webcrawler zu beherrschen, müssen Sie drei Kernschritte erfassen: 1. Verwenden Sie Anfragen, um eine Anfrage zu initiieren, Webseiteninhalte durch GET -Methode zu erhalten, die Einstellung von Headern zu beachten, Ausnahmen zu bearbeiten und Robots.txt zu entsprechen. 2. Verwenden Sie BeautifulSoup oder XPath, um Daten zu extrahieren. Ersteres eignet sich zum einfachen Parsen, während letzteres flexibler und für komplexe Strukturen geeignet ist. 3.. Verwenden Sie Selen, um Browseroperationen für dynamische Ladeinhalte zu simulieren. Obwohl die Geschwindigkeit langsam ist, kann sie mit komplexen Seiten fertig werden. Sie können auch versuchen, eine Website -API -Schnittstelle zu finden, um die Effizienz zu verbessern.

Python httpx Async Client Beispiel Python httpx Async Client Beispiel Jul 29, 2025 am 01:08 AM

Verwenden Sie httpx.asyncclient, um asynchrone HTTP -Anforderungen effizient zu initiieren. 1. Basic-Get-Anfragen verwalten Clients über Asyncwith und verwenden Sie AwaitClient.get, um nicht blockierende Anforderungen zu initiieren. 2. kombiniert asyncio.gather, sich mit asyncio zu kombinieren. Gather kann die Leistung erheblich verbessern, und die Gesamtzeit entspricht der langsamsten Anfrage. 3.. Unterstützen Sie benutzerdefinierte Header, Authentifizierung, Base_url und Zeitüberschreitungseinstellungen; 4. kann Postanfragen senden und JSON -Daten tragen; 5. Achten Sie darauf, dass das Mischen von synchronem asynchronem Code vermieden wird. Der Proxy-Support muss auf die Back-End-Kompatibilität achten, die für Crawlers oder API-Aggregation und andere Szenarien geeignet ist.

Python -Liste zum String Conversion Beispiel Python -Liste zum String Conversion Beispiel Jul 26, 2025 am 08:00 AM

String -Listen können mit der join () -Methode wie '' .Join (Words) zusammengeführt werden, um "helloWorldfrompython" zu erhalten; 2. Die Zahlenlisten müssen vor dem Beitritt in Zeichenfolgen mit Karte (STR, Zahlen) oder [STR (x) ForxInnumbers] konvertiert werden. 3. Jede Typliste kann direkt in Zeichenfolgen mit Klammern und Zitaten umgewandelt werden, die zum Debuggen geeignet sind. 4. Benutzerdefinierte Formate können durch Generatorausdrücke in Kombination mit Join () implementiert werden, wie z.

Python verbinden sich mit SQL Server PyoDBC -Beispiel Python verbinden sich mit SQL Server PyoDBC -Beispiel Jul 30, 2025 am 02:53 AM

Installieren Sie PYODBC: Verwenden Sie den Befehl pipinstallpyoDBC, um die Bibliothek zu installieren. 2. SQLServer verbinden: Verwenden Sie die Verbindungszeichenfolge, die Treiber, Server, Datenbank, UID/PWD oder Trusted_Connection über die Methode Pyodbc.Connect () und die SQL -Authentifizierung bzw. der Windows -Authentifizierung unterstützen; 3. Überprüfen Sie den installierten Treiber: Führen Sie Pyodbc.Drivers () aus und filtern Sie den Treibernamen mit 'SQLServer', um sicherzustellen, dass der richtige Treiberame wie 'ODBCDRIVER17 für SQLServer' verwendet wird. 4. Schlüsselparameter der Verbindungszeichenfolge

See all articles