Membina Klon Skribbl.io: Dari Konsep hingga Selesai
Mencipta permainan berbilang pemain masa nyata seperti Skribbl.io ialah cabaran menarik yang menggabungkan pelbagai aspek pembangunan web. Dalam artikel ini, saya akan bercakap tentang pelaksanaan dan pemikiran saya dalam membina klon masa nyata bagaimana anda boleh mengendalikan permainan yang berasaskan bulat dan sistem pemasa
Jika anda ingin menyemak kod sumber untuk projek, anda boleh menemuinya di sini Github
Timbunan Teknologi
Sebelum menyelami butirannya, mari kita lihat secara ringkas susunan teknologi yang digunakan untuk projek ini:
- Node.js: Untuk pelayan hujung belakang.
- Socket.IO: Untuk komunikasi masa nyata.
- Redis: Untuk pengendalian data yang cekap.
- Vite: Untuk pembangunan pantas dengan React.
- Skrip Jenis: Untuk keselamatan taip di bahagian hadapan dan belakang.
- React: Untuk membina antara muka pengguna.
- Docker: Untuk kontena aplikasi.
Menyediakan Bahagian Belakang
Halaman belakang dikuasakan oleh Node.js dan Socket.IO, yang sesuai untuk mengendalikan interaksi masa nyata. Berikut ialah gambaran keseluruhan ringkas komponen utama:
1. WebSockets untuk Komunikasi Masa Nyata
Socket.IO membolehkan komunikasi lancar antara pelayan dan pelanggan. Kami menggunakannya untuk mengendalikan acara seperti pemain menyertai bilik, memulakan permainan dan menghantar data lukisan.
2. Sistem Bilik
Setiap permainan dihoskan dalam bilik unik, yang dikenal pasti melalui ID bilik. Pemain menyertai bilik menggunakan ID ini dan berinteraksi dengan orang lain dalam bilik yang sama. Sistem ini juga mengendalikan sambungan pemain dan pemutusan sambungan.
Tetapi di sini kami menghadapi masalah bagaimana kami boleh memastikan pelayan kami mengekalkan data yang ada dalam permainan jika pelayan itu pernah ranap
Di sini kami menggunakan pangkalan data yang pantas dan juga badan yang berasingan daripada pelayan
Redis ialah pilihan yang bagus untuk jenis bekas penggunaan sedemikian. Ia adalah pangkalan data dalam memori yang pantas dan boleh dijalankan secara berasingan pada pelayan yang berbeza
Kita akan bercakap tentang perkara itu lebih lanjut dalam siaran nanti.
3. Pengendalian Acara
Pelayan mendengar dan mengeluarkan pelbagai acara:
- Acara Pelanggan: sambung, putuskan sambungan, joinRoom, leaveRoom, startGame, cabutan, teka, tukarSettings, wordSelect
- Acara Pelayan: joinedRoom, playerJoined, playerLeft, gameStarted, gameEnded, drawData, guessed, turnEnded, chooseWord, wordChosen, settingsChanged, guessFail
Membangunkan Frontend
Untuk bahagian hadapan, saya menggunakan React dengan TypeScript dan Vite untuk pengalaman pembangunan yang lancar.
1. Membina UI
Antara muka pengguna termasuk komponen untuk melukis, meneka dan mengurus tetapan permainan. Seni bina berasaskan komponen React memudahkan untuk mencipta UI yang dinamik dan responsif.
2. Mengendalikan Keadaan Permainan
Halaman hadapan mengurus keadaan permainan, termasuk markah pemain, giliran semasa dan data lukisan. TypeScript memastikan bahawa struktur data ditakrifkan dengan baik dan bebas ralat.
3. Kemas Kini Masa Nyata
Menggunakan Socket.IO, bahagian hadapan mengemas kini dalam masa nyata berdasarkan acara pelayan. Contohnya, apabila pemain melukis, data lukisan dihantar kepada semua pelanggan di dalam bilik.
Permainan Pengurusan Negeri
Pengurusan keadaan permainan yang berkesan adalah penting untuk memastikan pengalaman yang lancar dan menyeronokkan dalam permainan berbilang pemain masa nyata seperti Skribbl.io. Berikut ialah pandangan terperinci tentang cara pelbagai aspek keadaan permainan diurus:
Pemain Menyertai dan Keluar
Mengurus pemain menyertai dan meninggalkan bilik melibatkan beberapa langkah penting:
-
Menyertai:
- Emisi Acara: Apabila pemain ingin menyertai bilik, mereka menghantar acara joinRoom dengan ID bilik ke pelayan.
- Pengesahan: Pelayan mengesahkan ID bilik dan menyemak sama ada bilik itu wujud.
- Penambahan Pemain: Jika sah, pemain ditambahkan pada senarai pemain bilik. Pelayan kemudiannya mengemas kini keadaan permainan dan memancarkan acara PlayerJoined kepada semua pelanggan di dalam bilik, memaklumkan mereka tentang ketibaan pemain baharu.
- Kemas Kini UI: Pada bahagian hadapan, kehadiran pemain baharu ditunjukkan dalam senarai pemain bilik, memastikan semua orang melihat senarai pemain terkini.
-
Meninggalkan:
- Emisi Acara: Apabila pemain memutuskan untuk keluar, mereka menghantar acara leaveRoom ke pelayan.
- Penyingkiran Pemain: Pelayan mengalih keluar pemain daripada senarai pemain bilik dan mengemas kini keadaan permainan dengan sewajarnya.
- Pemberitahuan: Pelayan memancarkan acara PlayerLeft kepada semua pelanggan yang tinggal, memberitahu mereka bahawa pemain telah meninggalkan bilik.
- Kemas Kini UI: Bahagian hadapan menggambarkan perubahan ini dengan mengalih keluar pemain daripada senarai pemain dan melaraskan mana-mana mekanik permainan yang sedang berjalan jika perlu.
Pemilihan Perkataan
Memilih perkataan dan mengurus giliran siapa untuk memilih melibatkan beberapa mekanisme:
-
Pusingan Pemain Semasa:
- Pengurusan Giliran: Pelayan mengekalkan rekod giliran siapa untuk memilih perkataan. Ini diurus oleh keadaan permainan, yang termasuk sifat yang menunjukkan ID pemain semasa.
- Gesaan Pemilihan Perkataan: Apabila tiba giliran pemain untuk memilih perkataan, mereka menerima acara chooseWord daripada pelayan, menggesa mereka memilih perkataan.
-
Mencegah Kebocoran Perkataan:
- Akses Giliran Terhad: Perkataan yang dipilih tidak segera disiarkan kepada pemain lain. Sebaliknya, ia hanya dikongsi apabila tiba giliran laci, untuk mengelakkan sebarang kelebihan yang tidak adil.
- Emisi Acara: Setelah laci telah memilih perkataan, pelayan memancarkan acara wordChosen kepada semua pemain. Acara ini termasuk pemberitahuan bahawa perkataan itu telah dipilih dan sedia untuk meneka.
-
Pemberitahuan Pemilihan Perkataan:
- Siaran: Acara wordChosen termasuk pemberitahuan bahawa perkataan telah dipilih, yang dihantar kepada semua pemain dalam bilik.
- Pengendalian Depan: Di sisi pelanggan, pemain dikemas kini untuk menunjukkan bahawa fasa lukisan telah bermula, dan mereka kini boleh mula meneka.
Mengendalikan Tamat Masa untuk Pemilihan Perkataan
Untuk mengendalikan kes di mana pemain semasa mungkin menangguhkan pemilihan perkataan:
-
Tugasan Automatik:
- Mekanisme Tamat Masa: Pelayan melaksanakan pemasa yang bermula apabila giliran pemain untuk memilih perkataan. Jika pemain tidak memilih perkataan dalam masa yang diperuntukkan, acara tamat masa akan dicetuskan.
- Tugasan Perkataan: Pelayan secara automatik memilih perkataan daripada senarai yang dipratentukan dan memberikannya kepada pemain. Ini memastikan permainan diteruskan tanpa kelewatan yang tidak perlu.
- Pemberitahuan: Acara wordChosen kemudiannya dipancarkan untuk memberitahu semua pemain bahawa satu perkataan telah ditetapkan dan fasa lukisan sedang bermula.
Melukis Pengendalian Data
Mengendalikan data lukisan adalah penting untuk mengekalkan penyegerakan antara pemain:
-
Lukisan Masa Nyata:
- Acara Lukisan: Pemain menghantar data lukisan ke pelayan menggunakan acara seri. Data ini termasuk warna berus, jejari dan koordinat titik yang dilukis.
- Penyiaran: Pelayan menerima data ini dan menyiarkannya kepada semua pelanggan di dalam bilik menggunakan acara drawData. Ini memastikan bahawa setiap kanvas pemain dikemas kini dalam masa nyata dengan maklumat lukisan terkini.
Mengendalikan Acara Teka Pemain
Mengurus tekaan pemain melibatkan pemprosesan dan pengesahan setiap tekaan:
-
Teka Penyerahan:
- Pengendalian Acara: Apabila pemain membuat tekaan, mereka menghantar acara tekaan ke pelayan dengan kata tekaan mereka.
- Pengesahan: Pelayan memproses tekaan, menyemaknya dengan perkataan yang betul. Jika tekaan itu betul, pelayan mengemas kini keadaan permainan dan markah pemain.
-
Hasil Penyiaran:
- Keputusan Teka: Pelayan mengeluarkan acara yang telah diteka kepada semua pemain, menunjukkan sama ada tekaan itu betul atau tidak.
- Kemas Kini UI: Pada bahagian hadapan, keputusan dipaparkan kepada semua pemain, menunjukkan siapa yang meneka dengan betul dan mengemas kini kemajuan permainan.
Tamat masa untuk Melukis dan Meneka
Menguruskan kekangan masa adalah kunci untuk memastikan permainan menarik:
-
Masa Cabutan Berakhir:
- Pengurusan Masa: Setiap pusingan mempunyai had masa yang ditetapkan untuk melukis. Pelayan menjejak masa ini dan mencetuskan acara TurnEnded apabila masa tamat.
- Peralihan: Acara ini menandakan tamatnya fasa lukisan dan permainan beralih ke fasa meneka atau pusingan seterusnya.
-
Semua Pemain Ditebak:
- Teka Selesai: Jika semua pemain meneka perkataan sebelum masa tamat, pelayan akan mencetuskan acara TurnEnded lebih awal.
- Aliran Permainan: Acara ini mengemas kini semua pelanggan bahawa fasa meneka telah selesai dan mengalihkan permainan ke fasa atau pusingan seterusnya.
Pendekatan untuk mengurus keadaan permainan ini memastikan pengalaman yang lancar, interaktif dan adil untuk semua pemain, meningkatkan keseronokan keseluruhan permainan.
Kesimpulan
Membina klon Skribbl.io melibatkan interaksi kompleks komunikasi masa nyata, pengurusan keadaan permainan dan interaksi pengguna. Melalui projek ini, kami telah meneroka pelbagai aspek pembangunan permainan, daripada mengendalikan sambungan pemain dan pemilihan perkataan kepada mengurus data lukisan dan tekaan pemain.
Pengambilan Utama
- Komunikasi Masa Nyata: Memanfaatkan Socket.IO membolehkan permainan yang lancar dan interaktif, memastikan semua pemain kekal disegerakkan.
- Pengurusan Negeri: Pengendalian keadaan permainan yang cekap—seperti penyertaan pemain, pemilihan perkataan dan data lukisan—adalah penting untuk pengalaman pengguna yang lancar. Melaksanakan tamat masa dan tugasan automatik memastikan permainan berjalan tanpa gangguan.
- Pengalaman Pengguna: Mengekalkan antara muka yang menarik dan responsif meningkatkan kepuasan pemain. Maklum balas yang jelas tentang tindakan seperti melukis dan meneka, digabungkan dengan kemas kini tepat pada masanya, memastikan pemain mendapat maklumat dan melabur dalam permainan.
Langkah Seterusnya
Jika anda mendapat inspirasi untuk meneruskan projek ini, pertimbangkan:
- Menambah Ciri Baharu: Laksanakan mod permainan tambahan, penyesuaian atau peningkatan untuk menjadikan permainan lebih dinamik.
- Mengoptimumkan Prestasi: Teroka cara untuk meningkatkan prestasi, seperti mengoptimumkan penghantaran data lukisan atau mengurangkan kependaman.
- Meningkatkan UI/UX: Perhalusi antara muka dan pengalaman pengguna berdasarkan maklum balas pemain untuk menjadikan permainan lebih menyeronokkan.
Projek ini telah menjadi satu perjalanan yang menarik ke dalam pembangunan permainan masa nyata, menggabungkan pelbagai teknologi dan teknik untuk mencipta pengalaman berbilang pemain yang menyeronokkan dan menarik. Saya harap artikel ini telah memberikan cerapan berharga tentang pengurusan keadaan permainan dan memberi inspirasi kepada anda untuk meneroka lebih banyak dalam dunia pembangunan permainan.
Jangan ragu untuk berkongsi pendapat, soalan atau penambahbaikan anda tentang projek ini dalam ulasan di bawah. Selamat mengekod!
Atas ialah kandungan terperinci Membina Klon Skribbl.io: Dari Konsep hingga Selesai. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

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

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Python lebih sesuai untuk pemula, dengan lengkung pembelajaran yang lancar dan sintaks ringkas; JavaScript sesuai untuk pembangunan front-end, dengan lengkung pembelajaran yang curam dan sintaks yang fleksibel. 1. Sintaks Python adalah intuitif dan sesuai untuk sains data dan pembangunan back-end. 2. JavaScript adalah fleksibel dan digunakan secara meluas dalam pengaturcaraan depan dan pelayan.

Penggunaan utama JavaScript dalam pembangunan web termasuk interaksi klien, pengesahan bentuk dan komunikasi tak segerak. 1) kemas kini kandungan dinamik dan interaksi pengguna melalui operasi DOM; 2) pengesahan pelanggan dijalankan sebelum pengguna mengemukakan data untuk meningkatkan pengalaman pengguna; 3) Komunikasi yang tidak bersesuaian dengan pelayan dicapai melalui teknologi Ajax.

Aplikasi JavaScript di dunia nyata termasuk pembangunan depan dan back-end. 1) Memaparkan aplikasi front-end dengan membina aplikasi senarai TODO, yang melibatkan operasi DOM dan pemprosesan acara. 2) Membina Restfulapi melalui Node.js dan menyatakan untuk menunjukkan aplikasi back-end.

Memahami bagaimana enjin JavaScript berfungsi secara dalaman adalah penting kepada pemaju kerana ia membantu menulis kod yang lebih cekap dan memahami kesesakan prestasi dan strategi pengoptimuman. 1) aliran kerja enjin termasuk tiga peringkat: parsing, penyusun dan pelaksanaan; 2) Semasa proses pelaksanaan, enjin akan melakukan pengoptimuman dinamik, seperti cache dalam talian dan kelas tersembunyi; 3) Amalan terbaik termasuk mengelakkan pembolehubah global, mengoptimumkan gelung, menggunakan const dan membiarkan, dan mengelakkan penggunaan penutupan yang berlebihan.

Python dan JavaScript mempunyai kelebihan dan kekurangan mereka sendiri dari segi komuniti, perpustakaan dan sumber. 1) Komuniti Python mesra dan sesuai untuk pemula, tetapi sumber pembangunan depan tidak kaya dengan JavaScript. 2) Python berkuasa dalam bidang sains data dan perpustakaan pembelajaran mesin, sementara JavaScript lebih baik dalam perpustakaan pembangunan dan kerangka pembangunan depan. 3) Kedua -duanya mempunyai sumber pembelajaran yang kaya, tetapi Python sesuai untuk memulakan dengan dokumen rasmi, sementara JavaScript lebih baik dengan MDNWebDocs. Pilihan harus berdasarkan keperluan projek dan kepentingan peribadi.

Kedua -dua pilihan Python dan JavaScript dalam persekitaran pembangunan adalah penting. 1) Persekitaran pembangunan Python termasuk Pycharm, Jupyternotebook dan Anaconda, yang sesuai untuk sains data dan prototaip cepat. 2) Persekitaran pembangunan JavaScript termasuk node.js, vscode dan webpack, yang sesuai untuk pembangunan front-end dan back-end. Memilih alat yang betul mengikut keperluan projek dapat meningkatkan kecekapan pembangunan dan kadar kejayaan projek.

C dan C memainkan peranan penting dalam enjin JavaScript, terutamanya digunakan untuk melaksanakan jurubahasa dan penyusun JIT. 1) C digunakan untuk menghuraikan kod sumber JavaScript dan menghasilkan pokok sintaks abstrak. 2) C bertanggungjawab untuk menjana dan melaksanakan bytecode. 3) C melaksanakan pengkompil JIT, mengoptimumkan dan menyusun kod hot-spot semasa runtime, dan dengan ketara meningkatkan kecekapan pelaksanaan JavaScript.

JavaScript digunakan secara meluas di laman web, aplikasi mudah alih, aplikasi desktop dan pengaturcaraan sisi pelayan. 1) Dalam pembangunan laman web, JavaScript mengendalikan DOM bersama -sama dengan HTML dan CSS untuk mencapai kesan dinamik dan menyokong rangka kerja seperti JQuery dan React. 2) Melalui reaktnatif dan ionik, JavaScript digunakan untuk membangunkan aplikasi mudah alih rentas platform. 3) Rangka kerja elektron membolehkan JavaScript membina aplikasi desktop. 4) Node.js membolehkan JavaScript berjalan di sisi pelayan dan menyokong permintaan serentak yang tinggi.
