Rundenbasiertes Mehrspieler-Bierspiel
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
Host-Benutzeroberfläche
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.
Sehen wir uns an, wie eine vollständige Iteration aus Sicht des Hosts aussehen würde.
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.
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.
- Es füllt den Lagerbestand von nachgelagerten Unternehmen auf der Grundlage von Bestellungen auf, die vor vier Wochen aufgegeben wurden.
- Es erhält Aufträge von Upstream.
- 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!

Heiße KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

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

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

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.

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.

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.

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,

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.

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.

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.

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
