Rumah pembangunan bahagian belakang Tutorial Python Permainan Bir Berbilang Pemain Berasaskan Giliran

Permainan Bir Berbilang Pemain Berasaskan Giliran

Sep 11, 2024 pm 02:31 PM

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.

Projek Permainan Bir

https://github.com/wirelessr/beer_game

Turn Based Multiplayer Beer Game
UI hos

Turn Based Multiplayer Beer Game
UI Pemain

Keseluruhan projek ini dibangunkan dan diuji didorong oleh perniagaan dengan liputan lebih 90%, jadi jangan ragu untuk menggunakannya.

Kesediaan

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.

Pemasangan dan Penggunaan

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

Aliran Permainan

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.
Turn Based Multiplayer Beer Game

Mari kita lihat rupa lelaran penuh dari sudut pandangan hos.

Turn Based Multiplayer Beer Game

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.

Turn Based Multiplayer Beer Game

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.

Butiran Permainan

Terdapat beberapa perkara yang sebenarnya dilakukan semasa Muat Semula.

  1. ia mengisi semula inventori dari hiliran berdasarkan pesanan yang dibuat empat minggu lalu.
  2. ia menerima tempahan dari huluan.
  3. menentukan jumlah jualan berdasarkan inventori yang boleh dijual.

Memandangkan Pesanan Tempat adalah idempoten, Refresh sendiri juga idempoten.

Kerja masa depan

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Rimworld Odyssey Cara Ikan
1 bulan yang lalu By Jack chen
Apakah had transaksi untuk pengguna asing di Alipay?
1 bulan yang lalu By 下次还敢
Bolehkah saya mempunyai dua akaun Alipay?
1 bulan yang lalu By 下次还敢

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1506
276
Cara Mengendalikan Pengesahan API di Python Cara Mengendalikan Pengesahan API di Python Jul 13, 2025 am 02:22 AM

Kunci untuk menangani pengesahan API adalah untuk memahami dan menggunakan kaedah pengesahan dengan betul. 1. Apikey adalah kaedah pengesahan yang paling mudah, biasanya diletakkan dalam tajuk permintaan atau parameter URL; 2. BasicAuth menggunakan nama pengguna dan kata laluan untuk penghantaran pengekodan Base64, yang sesuai untuk sistem dalaman; 3. OAuth2 perlu mendapatkan token terlebih dahulu melalui client_id dan client_secret, dan kemudian bawa bearertoken dalam header permintaan; 4. Untuk menangani tamat tempoh token, kelas pengurusan token boleh dikemas dan secara automatik menyegarkan token; Singkatnya, memilih kaedah yang sesuai mengikut dokumen dan menyimpan maklumat utama adalah kunci.

Skop pembolehubah python dalam fungsi Skop pembolehubah python dalam fungsi Jul 12, 2025 am 02:49 AM

Dalam Python, pembolehubah yang ditakrifkan di dalam fungsi adalah pembolehubah tempatan dan hanya sah dalam fungsi; Ditakrifkan secara luaran adalah pembolehubah global yang boleh dibaca di mana sahaja. 1. Pembolehubah tempatan dimusnahkan kerana fungsi dilaksanakan; 2. Fungsi ini boleh mengakses pembolehubah global tetapi tidak dapat diubahsuai secara langsung, jadi kata kunci global diperlukan; 3. Jika anda ingin mengubah suai pembolehubah fungsi luar dalam fungsi bersarang, anda perlu menggunakan kata kunci nonlocal; 4. Pembolehubah dengan nama yang sama tidak mempengaruhi satu sama lain dalam skop yang berbeza; 5. Global mesti diisytiharkan apabila mengubah suai pembolehubah global, jika tidak, kesilapan unboundlocalerror akan dibangkitkan. Memahami peraturan ini membantu mengelakkan pepijat dan menulis lebih banyak fungsi yang boleh dipercayai.

Cara Menguji API dengan Python Cara Menguji API dengan Python Jul 12, 2025 am 02:47 AM

Untuk menguji API, anda perlu menggunakan Perpustakaan Permintaan Python. Langkah -langkahnya adalah untuk memasang perpustakaan, menghantar permintaan, mengesahkan respons, menetapkan masa dan cuba semula. Pertama, pasang perpustakaan melalui PipinstallRequests; kemudian gunakan permintaan.get () atau requests.post () dan kaedah lain untuk menghantar permintaan GET atau pos; Kemudian semak respons.status_code dan response.json () untuk memastikan hasil pulangan mematuhi jangkaan; Akhirnya, tambah parameter tamat masa untuk menetapkan masa tamat, dan menggabungkan perpustakaan semula untuk mencapai percubaan automatik untuk meningkatkan kestabilan.

Tutorial Python Fastapi Tutorial Python Fastapi Jul 12, 2025 am 02:42 AM

Untuk mewujudkan API moden dan cekap menggunakan Python, FastAPI disyorkan; Ia berdasarkan kepada jenis python standard yang diminta dan secara automatik dapat menghasilkan dokumen, dengan prestasi yang sangat baik. Selepas memasang FastAPI dan Asgi Server UVicorn, anda boleh menulis kod antara muka. Dengan menentukan laluan, menulis fungsi pemprosesan, dan data yang kembali, API boleh dibina dengan cepat. FastAPI menyokong pelbagai kaedah HTTP dan menyediakan sistem dokumentasi Swaggersui dan Redoc yang dihasilkan secara automatik. Parameter URL boleh ditangkap melalui definisi laluan, manakala parameter pertanyaan boleh dilaksanakan dengan menetapkan nilai lalai untuk parameter fungsi. Penggunaan rasional model Pydantic dapat membantu meningkatkan kecekapan dan ketepatan pembangunan.

Bagaimana cara menghuraikan fail JSON yang besar di Python? Bagaimana cara menghuraikan fail JSON yang besar di Python? Jul 13, 2025 am 01:46 AM

Bagaimana cara mengendalikan fail JSON yang besar di Python? 1. Gunakan Perpustakaan IJSON untuk mengalir dan mengelakkan limpahan memori melalui parsing item demi item; 2. Jika dalam format Jsonlines, anda boleh membacanya dengan garis dan memprosesnya dengan json.loads (); 3. Atau memecah fail besar ke dalam kepingan kecil dan kemudian memprosesnya secara berasingan. Kaedah ini dengan berkesan menyelesaikan masalah batasan memori dan sesuai untuk senario yang berbeza.

Python untuk gelung di atas tuple Python untuk gelung di atas tuple Jul 13, 2025 am 02:55 AM

Di Python, kaedah melintasi tupel dengan gelung termasuk secara langsung melelehkan unsur -unsur, mendapatkan indeks dan elemen pada masa yang sama, dan memproses tuple bersarang. 1. Gunakan gelung untuk terus mengakses setiap elemen dalam urutan tanpa menguruskan indeks; 2. Gunakan penghitungan () untuk mendapatkan indeks dan nilai pada masa yang sama. Indeks lalai adalah 0, dan parameter permulaan juga boleh ditentukan; 3. Di samping itu, tuple tidak berubah dan kandungan tidak dapat diubah suai dalam gelung. Nilai yang tidak diingini boleh diabaikan oleh \ _. Adalah disyorkan untuk memeriksa sama ada tuple kosong sebelum melintasi untuk mengelakkan kesilapan.

Bolehkah kelas Python mempunyai beberapa pembina? Bolehkah kelas Python mempunyai beberapa pembina? Jul 15, 2025 am 02:54 AM

Ya, apythonclasscanhavemulleConstructorsThoughalternetechniques.1.usedefaultargumentsIntheS

Python untuk julat gelung Python untuk julat gelung Jul 14, 2025 am 02:47 AM

Di Python, menggunakan gelung untuk fungsi julat () adalah cara biasa untuk mengawal bilangan gelung. 1. Gunakan apabila anda mengetahui bilangan gelung atau perlu mengakses elemen dengan indeks; 2. Julat (berhenti) dari 0 hingga Stop-1, julat (mula, berhenti) dari awal hingga berhenti-1, julat (mula, berhenti) menambah saiz langkah; 3. Perhatikan bahawa julat tidak mengandungi nilai akhir, dan mengembalikan objek yang boleh diperolehi daripada senarai dalam Python 3; 4. Anda boleh menukar ke senarai melalui senarai (julat ()), dan gunakan saiz langkah negatif dalam urutan terbalik.

See all articles