# បង្កើតហ្គេមមួយ៖ អនុវត្តគំរូរចនាសម្ព័ន្ធ ## សេចក្តីផ្តើម ឧទាហរណ៍ យកចំណេះដឹងថ្មីរបស់អ្នកអំពីគំរូរចនាសម្ព័ន្ធមកប្រើប្រាស់ដោយបង្កើតគំរូហ្គេមសាមញ្ញមួយ! ការងារនេះនឹងជួយអ្នកហ្វឹកហាត់ទាំងគំរូស្ថាបត្យកម្ម (អាជីពរកស៊ីឬសមាសធាតុ) និងប្រព័ន្ធផ្សព្វផ្សាយ/pubsub ដែលអ្នកបានរៀនក្នុងវគ្គសិក្សា។ ## សេចក្តីណែនាំ បង្កើតតំណាងហ្គេមសាមញ្ញមួយដែលបង្ហាញពីគំរូរចនាសម្ព័ន្ធពីវគ្គនេះ។ ហ្គេមរបស់អ្នកគួរតែអាចដំណើរការ យ៉ាងไรก็ตาม មិនចាំបាច់ខ្លាំងនូវក្រាហ្វិកស្មុគស្មាញទេ — សំខាន់គឺផ្តោតលើស្ថាបត្យកម្មជាគ្រឹះ និងគំរូខ្ទង់ផ្សព្វផ្សាយ។ ### តម្រូវការ **ជ្រើសរើសគំរូស្ថាបត្យកម្មរបស់អ្នក៖** - **ជម្រើស ក**៖ ប្រើការទាញទារកនៅលើថ្នាក់ (ឧ. `GameObject` → `Movable` → `Hero`) - **ជម្រើស ខ**៖ ប្រើសមាសធាតុ (ឧ. វិធីសាស្រ្តរោងចក្រជាមួយឥរិយាបថចម្រុះ) **អនុវត្តការទំនាក់ទំនង៖** - **រួមបញ្ចូល** ថ្នាក់ `EventEmitter` សម្រាប់សារផ្សព្វផ្សាយ/pubsub - **រៀបចំ** ប្រភេទសារចំនួនយ៉ាងហោចណាស់ 2-3 (ឧ. `PLAYER_MOVE`, `ENEMY_SPAWN`, `SCORE_UPDATE`) - **ភ្ជាប់** ការបញ្ចូលអ្នកប្រើ (ក្តារចុច/មណ្ឌលសុីម៉ៅ) ទៅកាន់ព្រឹត្តិការណ៍ហ្គេមតាមរយៈប្រព័ន្ធព្រឹត្តិការណ៍ **ធាតុហ្គេមដែលត្រូវរួមបញ្ចូល៖** - តួអង្គមួយយ៉ាងហោចណាស់ដែលគ្រប់គ្រងដោយអ្នកលេង - វត្ថុហ្គេមមួយផ្សេងទៀត (សត្រូវ, វត្ថុប្រមូលបាន, ឬធាតុបរិស្ថាន) - ការប៉ះទង្គិចមូលដ្ឋានរវាងវត្ថុ (ប៉ះទង្គិច ប្រមូល ឬទំនាក់ទំនង) ### គំនិតហ្គេមសម្រាប់ពិចារណា **ហ្គេមសាមញ្ញដែលអាចជ្រើសរើស៖** - **ហ្គេមព្រួញ** – ខ្សែមាត់ប្រតិបត្តិទៅផ្នែកមុខ, អាហារបង្ហាញបៃតងពីចម្ងាយ - **ការប្រែប្រួល Pong** – ខ្សែប៊ិចឆ្លើយតបនឹងការបញ្ចូល, បាល់ត្រៀមកែតម្រូវលើជញ្ជាំង - **ហ្គេមប្រមូល** – អ្នកលេងផ្លាស់ទីប្រមូលវត្ថុខណៈរត់គេចខ្លួនពីឧបសគ្គ - **មូលដ្ឋានការពារកាណូត** – ប្រដាប់បាញ់កាំភ្លើងចាប់ផ្តើមប្រយុទ្ធប្រឆាំងសត្រូវចល័ត ### แนวทางរចនាសម្ព័ន្ធកូដ ```javascript // រចនាសម្ព័ន្ធចាប់ផ្តើមគំរូ const Messages = { // កំណត់សារប្រកួតរបស់អ្នកនៅទីនេះ }; class EventEmitter { // ការអនុវត្តប្រព័ន្ធព្រឹត្តិការណ៍របស់អ្នក } // ជ្រើសរើសរបៀបផ្អែកលើថ្នាក់ ឬ វិធីសាស្ត្រចងក្រង // ឧទាហរណ៍ផ្អែកលើថ្នាក់៖ class GameObject { /* base properties */ } class Player extends GameObject { /* player-specific behavior */ } // ឬ ឧទាហរណ៍ចងក្រង៖ const gameObject = { /* base properties */ }; const movable = { /* movement behavior */ }; function createPlayer() { /* combine behaviors */ } ``` ### ការពិនិត្យការអនុវត្តរបស់អ្នក **ផ្ទៀងផ្ទាត់កូដរបស់អ្នកដោយ៖** - **សាកល្បង** ថាវត្ថុរបស់អ្នកចល័តឬផ្លាស់ប្តូរប្រែប្រួលនៅពេលព្រឹត្តិការណ៍បញ្ចេញ - **បញ្ជាក់** ថាវត្ថុជាច្រើនអាចឆ្លើយតបទៅព្រឹត្តិការណ៍ដូចគ្នា - **ពិនិត្យ** ថាអ្នកអាចបន្ថែមឥរិយាបថថ្មីដោយមិនកែប្រែកូដដែលមានរួច - **ធានា** ការបញ្ចូលក្តារចុច/មណ្ឌលសុីម៉ៅបញ្ចេញព្រឹត្តិការណ៍ហ្គេមបានត្រឹមត្រូវ ## លក្ខណៈសំខាន់សម្រាប់ដាក់ស្នើ **ការដាក់ស្នើរបស់អ្នកគួរតែរួមបញ្ចូល៖** 1. **ឯកសារ JavaScript** ដែលមានការអនុវត្តហ្គេមរបស់អ្នក 2. **ឯកសារ HTML** សម្រាប់បើក និងសាកល្បងហ្គេម (អាចមានភាពសាមញ្ញ) 3. **មតិយោបល់** ដែលពន្យល់ពីគំរូដែលអ្នកបានជ្រើសរើស និងហេតុផល 4. **ឯកសារផ្ដល់ព័ត៌មានខ្លី** អំពីប្រភេទសារនានា និងមុខងាររបស់ពួកវា ## វេចខ្លាច | លក្ខខណ្ឌ | ល្អបំផុត (3 ពិន្ទុ) | សមរម្យ (2 ពិន្ទុ) | ត្រូវការកែលម្អ (1 ពិន្ទុ) | |----------|---------------------|---------------------|-----------------------------| | **គំរូស្ថាបត្យកម្ម** | អនុវត្តត្រឹមត្រូវនៅក្នុងអាជីពរកស៊ី ឬសមាសធាតុជាមួយលំដាប់ថ្នាក់/វត្ថុច្បាស់លាស់ | ប្រើគំរូបាន ប៉ុន្តែមានបញ្ហាពិបាកខ្លះៗ ឬមិនស៊ាំល្អ | ព្យាយាមប្រើគំរូ តែការអនុវត្តមានបញ្ហាសំខាន់ៗ | | **ប្រព័ន្ធ Pub/Sub** | EventEmitter ដំណើរការបានត្រឹមត្រូវជាមួយប្រភេទសារជាច្រើន និងដំណើរការព្រឹត្តិការណ៍ត្រឹមត្រូវ | ប្រព័ន្ធ pub/sub មូលដ្ឋានដំណើរការបានមានការគ្រប់គ្រងព្រឹត្តិការណ៍ខ្លះៗ | ប្រព័ន្ធព្រឹត្តិការណ៍មាន ប៉ុន្តែមិនដំណើរការបានយកចិត្តទុកដាក់ទេ | | **មុខងារហ្គេម** | មានធាតុអន្តរកម្មបីឬច្រើនជាង ប្រាស្រ័យទាក់ទងតាមព្រឹត្តិការណ៍ | មានធាតុអន្តរកម្មពីរជាមួយការប្រាស្រ័យទាក់ទងព្រឹត្តិការណ៍មូលដ្ឋាន | មានធាតុមួយឆ្លើយតបនឹងព្រឹត្តិការណ៍ ឬមានអន្តរកម្មមូលដ្ឋាន | | **គុណភាពកូដ** | កូដស្អាត មានមតិយោបល់ល្អ និងមានរៀបចំត្រឹមត្រូវជាមួយ JavaScript ពេលបច្ចុប្បន្ន | កូដរៀបចំបានល្អជាទូទៅ មានមតិយោបល់គ្រប់គ្រាន់ | កូដដំណើរការ បាន ប៉ុន្តែខ្វះរចនាសម្ព័ន្ធឬមតិយោបល់ច្បាស់លាស់ | **ពិន្ទុបន្ថែម៖** - **ប្រព័ន្ធហ្គេមច្នៃប្រឌិត** ដែលបង្ហាញកម្រិតប្រើប្រាស់គំរូអស្ចារ្យ - **វិធីបញ្ចូលច្រើន** (ទាំងក្តារចុច និងមណ្ឌលសុីម៉ៅ) - **ស្ថាបត្យកម្មអាចពង្រីកបាន** ដែលងាយស្រួលបន្ថែមមុខងារថ្មីៗ --- **ការបដិសេធ**៖ ឯកសារនេះត្រូវបានបកប្រែដោយប្រើសេវាកម្មបកប្រែ AI [Co-op Translator](https://github.com/Azure/co-op-translator)។ ខណៈពេលដែលយើងខំប្រឹងប្រែងសម្រាប់ភាពត្រឹមត្រូវ សូមដឹងថាការបកប្រែដោយអូតូម៉ាទិកអាចមានកំហុស ឬការខកខានបាន។ ឯកសារដើមដោយភាសាម្ដុំណឹងគួរត្រូវបានគិតថាជាដើមពិតប្រាកដ។ សម្រាប់ព័ត៌មានសំខាន់ៗ គឺមានការផ្ដល់អនុសាសន៍ឲ្យប្រើការបកប្រែដោយមនុស្សវិជ្ជាជីវៈ។ យើងមិនទទួលខុសត្រូវចំពោះការយល់ច្រឡំ ឬការបកស្រាយខុស ដែលកើតមានពីការប្រើប្រាស់ការបកប្រែនេះឡើយ។