Memandangkan saya perlu menganjurkan bengkel pemikiran sistem dalam masa terdekat, saya memerlukan permainan bir untuk memulakannya.
Permainan bir itu sendiri terdiri daripada empat watak: Peruncit, Pemborong, Pengedar dan Kilang. Melalui sifat kelewatan masa logistik untuk memahami perspektif sistem, dan boleh mempunyai pemahaman yang lebih baik tentang sempadan sistem.
Memandangkan bengkel ini hanya beberapa jam, saya mahu permainan bir ini memenuhi ciri-ciri berikut.
Ia adalah permainan berbilang pemain.
Permainan bir itu sendiri akan mempunyai ramai peserta memainkan pelbagai peranan dalam rantaian bekalan, tetapi saya ingin mempunyai beberapa rantaian bekalan bersaing pada masa yang sama untuk melihat siapa yang mendapat markah lebih tinggi. Oleh itu, kita boleh belajar tentang strategi sistem mereka pada masa yang sama.
Hos permainan sepatutnya dapat melihat status semua orang.
Memandangkan terdapat beberapa pasukan yang bersaing pada masa yang sama, sebagai tuan rumah saya perlu dapat melihat bagaimana setiap pasukan berkembang dan menjaringkan gol pada masa ini.
Aliran permainan mestilah ringkas dan mudah untuk mengawal rentak.
Seperti yang saya katakan pada mulanya, ini adalah bengkel yang singkat, jadi saya perlu mempercepatkan semua orang dan saya perlu dapat mengawal butiran setiap pusingan.
Selain itu, pemasa muncul dalam UI pemain pada permulaan setiap pusingan, memajukan rentak permainan dengan mengira detik.
Dapat menyesuaikan watak.
Permainan bir klasik terdiri daripada empat aksara, tetapi semakin banyak watak, semakin lama permainan itu. Jadi saya ingin melaraskan rentak permainan supaya lebih baik untuk mempunyai tiga watak.
Setelah mencari di sekeliling, saya mendapati bahawa projek sumber terbuka mahupun projek yang sudah dalam talian dapat memenuhi keperluan ini dengan sempurna. Jadi, lebih baik saya buat sendiri.
https://github.com/wirelessr/beer_game
UI hos
UI Pemain
Keseluruhan projek ini dibangunkan dan diuji didorong oleh perniagaan dengan liputan lebih 90%, jadi jangan ragu untuk menggunakannya.
Buat fail untuk rahsia dalam folder projek. Anda sepatutnya melihat saya menyalinnya dalam Fail Docker.
.streamlit/secrets.toml
[mongo] uri = "<your mongo connection>" [admin] key = "<your admin key>" [player] key = "<your player key>"
Memandangkan projek ini menggunakan MongoDB, anda perlu mengisi pautan dengan kata laluan akaun anda. Selain itu, admin.key dan player.key sepadan dengan medan utama pada UI.
Lagipun, saya sedang memuat naik apl ke awan awam, jadi saya masih memerlukan mekanisme pengesahan asas. Jika anda menjalankan secara setempat sahaja dan mendapati pengesahan menyusahkan, anda boleh mengalih keluar kod sumber yang sepadan.
Projek ini mempunyai fail Docker yang dilampirkan, jadi ia boleh dijalankan terus dengan docker.
docker build -t beer_game . docker run --rm --name beer -p 8501:8501 beer_game
Untuk pembangunan, sebagai tambahan kepada requiremnts.txt, requirements-test.txt, yang menjalankan ujian unit, juga harus dipasang. Kemudian anda boleh menjalankan semua ujian unit melalui Makefile.
pip install -r requiremnts.txt pip install -r requirements-test.txt make test
Seluruh permainan dibahagikan kepada mod hos dan mod peserta, yang sepadan dengan pilihan di sudut atas UI.
Hos terlebih dahulu memberikan game_id untuk mencipta permainan dan semua peserta perlu mengisi player_game dengan id ini.
Semua pemain dalam rantaian bekalan yang sama perlu menggunakan id_pemain yang sama, jadi id ini juga dikenali sebagai ID rantaian bekalan dan peserta dengan id_pemain yang sama diasingkan mengikut peranan mengikut peranan_pemain.
Anda boleh melihat status pada skrin hos apabila peserta menyertai.
Mari kita lihat rupa lelaran penuh dari sudut pandangan hos.
Semua komponen yang perlu dimanipulasi ada dalam gambar ini, dan setiap pusingan bermula dengan menekan butang Muat Semula dan tamat dengan menekan Minggu Seterusnya.
Berapa banyak pesanan yang perlu dihantar ke semua rantaian bekalan dalam pusingan ini, ia akan dicetuskan oleh Pesanan Tempat.
Perlu dinyatakan bahawa Pesanan Tempat itu sendiri adalah idempoten, jadi tidak mengapa untuk menukar nombor dan tekan sekali lagi, nombor terakhir akan digunakan. Susunan Tempat bagi setiap antara muka peserta akan menjadi idempoten juga.
Setelah hos membuat pesanan, pemain kedai boleh mengambil pesanan.
Begitu juga, setiap peranan dalam rantaian bekalan bermula dengan Muat Semula dan berakhir dengan Buat Pesanan, dengan pemain kedai mengambil tindakan diikuti oleh pemain peruncit, dan seterusnya.
Akhir sekali, kembali kepada hos, yang boleh menekan Muat semula sekali lagi untuk melihat semua status untuk pusingan, dan Minggu Seterusnya untuk menamatkan pusingan.
Terdapat beberapa perkara yang sebenarnya dilakukan semasa Muat Semula.
Memandangkan Pesanan Tempat adalah idempoten, Refresh sendiri juga idempoten.
Ia pada asasnya memenuhi semua keperluan saya sekarang, tetapi terdapat beberapa peningkatan yang boleh dibuat.
Sebagai contoh, walaupun hos boleh melihat status semua peserta, adalah berguna untuk mempunyai graf untuk menunjukkan perubahan inventori dan maklumat kos dari semasa ke semasa, yang berguna untuk menyemak permainan selepas permainan tersebut tamat. .
Terdapat juga masalah yang lebih asas: UI semasa tidak mempunyai liputan ujian sama sekali, terutamanya kerana aliran permainan semasa agak mudah. Hanya beberapa klik pada UI akan merangkumi semua aliran UI, jadi saya tidak terlalu bergantung pada ujian automatik. Walau bagaimanapun, jika terdapat pengubahsuaian UI, ia akan menjadi agak membosankan, jadi adalah lebih baik untuk mengadakan ujian unit UI.
Secara keseluruhan, keperluan ini adalah pengoptimuman, tetapi kekurangannya tidak menjejaskan fungsi.
Jika anda mempunyai idea tambahan, anda juga boleh menghantar permintaan tarik, sumbangan dialu-alukan.
Atas ialah kandungan terperinci Permainan Bir Berbilang Pemain Berasaskan Giliran. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!