11 KiB
បង្កើតហ្គេមមួយ៖ អនុវត្តគំរូរចនាសម្ព័ន្ធ
សេចក្តីផ្តើម ឧទាហរណ៍
យកចំណេះដឹងថ្មីរបស់អ្នកអំពីគំរូរចនាសម្ព័ន្ធមកប្រើប្រាស់ដោយបង្កើតគំរូហ្គេមសាមញ្ញមួយ! ការងារនេះនឹងជួយអ្នកហ្វឹកហាត់ទាំងគំរូស្ថាបត្យកម្ម (អាជីពរកស៊ីឬសមាសធាតុ) និងប្រព័ន្ធផ្សព្វផ្សាយ/pubsub ដែលអ្នកបានរៀនក្នុងវគ្គសិក្សា។
សេចក្តីណែនាំ
បង្កើតតំណាងហ្គេមសាមញ្ញមួយដែលបង្ហាញពីគំរូរចនាសម្ព័ន្ធពីវគ្គនេះ។ ហ្គេមរបស់អ្នកគួរតែអាចដំណើរការ យ៉ាងไรก็ตาม មិនចាំបាច់ខ្លាំងនូវក្រាហ្វិកស្មុគស្មាញទេ — សំខាន់គឺផ្តោតលើស្ថាបត្យកម្មជាគ្រឹះ និងគំរូខ្ទង់ផ្សព្វផ្សាយ។
តម្រូវការ
ជ្រើសរើសគំរូស្ថាបត្យកម្មរបស់អ្នក៖
- ជម្រើស ក៖ ប្រើការទាញទារកនៅលើថ្នាក់ (ឧ.
GameObject→Movable→Hero) - ជម្រើស ខ៖ ប្រើសមាសធាតុ (ឧ. វិធីសាស្រ្តរោងចក្រជាមួយឥរិយាបថចម្រុះ)
អនុវត្តការទំនាក់ទំនង៖
- រួមបញ្ចូល ថ្នាក់
EventEmitterសម្រាប់សារផ្សព្វផ្សាយ/pubsub - រៀបចំ ប្រភេទសារចំនួនយ៉ាងហោចណាស់ 2-3 (ឧ.
PLAYER_MOVE,ENEMY_SPAWN,SCORE_UPDATE) - ភ្ជាប់ ការបញ្ចូលអ្នកប្រើ (ក្តារចុច/មណ្ឌលសុីម៉ៅ) ទៅកាន់ព្រឹត្តិការណ៍ហ្គេមតាមរយៈប្រព័ន្ធព្រឹត្តិការណ៍
ធាតុហ្គេមដែលត្រូវរួមបញ្ចូល៖
- តួអង្គមួយយ៉ាងហោចណាស់ដែលគ្រប់គ្រងដោយអ្នកលេង
- វត្ថុហ្គេមមួយផ្សេងទៀត (សត្រូវ, វត្ថុប្រមូលបាន, ឬធាតុបរិស្ថាន)
- ការប៉ះទង្គិចមូលដ្ឋានរវាងវត្ថុ (ប៉ះទង្គិច ប្រមូល ឬទំនាក់ទំនង)
គំនិតហ្គេមសម្រាប់ពិចារណា
ហ្គេមសាមញ្ញដែលអាចជ្រើសរើស៖
- ហ្គេមព្រួញ – ខ្សែមាត់ប្រតិបត្តិទៅផ្នែកមុខ, អាហារបង្ហាញបៃតងពីចម្ងាយ
- ការប្រែប្រួល Pong – ខ្សែប៊ិចឆ្លើយតបនឹងការបញ្ចូល, បាល់ត្រៀមកែតម្រូវលើជញ្ជាំង
- ហ្គេមប្រមូល – អ្នកលេងផ្លាស់ទីប្រមូលវត្ថុខណៈរត់គេចខ្លួនពីឧបសគ្គ
- មូលដ្ឋានការពារកាណូត – ប្រដាប់បាញ់កាំភ្លើងចាប់ផ្តើមប្រយុទ្ធប្រឆាំងសត្រូវចល័ត
แนวทางរចនាសម្ព័ន្ធកូដ
// រចនាសម្ព័ន្ធចាប់ផ្តើមគំរូ
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 */ }
ការពិនិត្យការអនុវត្តរបស់អ្នក
ផ្ទៀងផ្ទាត់កូដរបស់អ្នកដោយ៖
- សាកល្បង ថាវត្ថុរបស់អ្នកចល័តឬផ្លាស់ប្តូរប្រែប្រួលនៅពេលព្រឹត្តិការណ៍បញ្ចេញ
- បញ្ជាក់ ថាវត្ថុជាច្រើនអាចឆ្លើយតបទៅព្រឹត្តិការណ៍ដូចគ្នា
- ពិនិត្យ ថាអ្នកអាចបន្ថែមឥរិយាបថថ្មីដោយមិនកែប្រែកូដដែលមានរួច
- ធានា ការបញ្ចូលក្តារចុច/មណ្ឌលសុីម៉ៅបញ្ចេញព្រឹត្តិការណ៍ហ្គេមបានត្រឹមត្រូវ
លក្ខណៈសំខាន់សម្រាប់ដាក់ស្នើ
ការដាក់ស្នើរបស់អ្នកគួរតែរួមបញ្ចូល៖
- ឯកសារ JavaScript ដែលមានការអនុវត្តហ្គេមរបស់អ្នក
- ឯកសារ HTML សម្រាប់បើក និងសាកល្បងហ្គេម (អាចមានភាពសាមញ្ញ)
- មតិយោបល់ ដែលពន្យល់ពីគំរូដែលអ្នកបានជ្រើសរើស និងហេតុផល
- ឯកសារផ្ដល់ព័ត៌មានខ្លី អំពីប្រភេទសារនានា និងមុខងាររបស់ពួកវា
វេចខ្លាច
| លក្ខខណ្ឌ | ល្អបំផុត (3 ពិន្ទុ) | សមរម្យ (2 ពិន្ទុ) | ត្រូវការកែលម្អ (1 ពិន្ទុ) |
|---|---|---|---|
| គំរូស្ថាបត្យកម្ម | អនុវត្តត្រឹមត្រូវនៅក្នុងអាជីពរកស៊ី ឬសមាសធាតុជាមួយលំដាប់ថ្នាក់/វត្ថុច្បាស់លាស់ | ប្រើគំរូបាន ប៉ុន្តែមានបញ្ហាពិបាកខ្លះៗ ឬមិនស៊ាំល្អ | ព្យាយាមប្រើគំរូ តែការអនុវត្តមានបញ្ហាសំខាន់ៗ |
| ប្រព័ន្ធ Pub/Sub | EventEmitter ដំណើរការបានត្រឹមត្រូវជាមួយប្រភេទសារជាច្រើន និងដំណើរការព្រឹត្តិការណ៍ត្រឹមត្រូវ | ប្រព័ន្ធ pub/sub មូលដ្ឋានដំណើរការបានមានការគ្រប់គ្រងព្រឹត្តិការណ៍ខ្លះៗ | ប្រព័ន្ធព្រឹត្តិការណ៍មាន ប៉ុន្តែមិនដំណើរការបានយកចិត្តទុកដាក់ទេ |
| មុខងារហ្គេម | មានធាតុអន្តរកម្មបីឬច្រើនជាង ប្រាស្រ័យទាក់ទងតាមព្រឹត្តិការណ៍ | មានធាតុអន្តរកម្មពីរជាមួយការប្រាស្រ័យទាក់ទងព្រឹត្តិការណ៍មូលដ្ឋាន | មានធាតុមួយឆ្លើយតបនឹងព្រឹត្តិការណ៍ ឬមានអន្តរកម្មមូលដ្ឋាន |
| គុណភាពកូដ | កូដស្អាត មានមតិយោបល់ល្អ និងមានរៀបចំត្រឹមត្រូវជាមួយ JavaScript ពេលបច្ចុប្បន្ន | កូដរៀបចំបានល្អជាទូទៅ មានមតិយោបល់គ្រប់គ្រាន់ | កូដដំណើរការ បាន ប៉ុន្តែខ្វះរចនាសម្ព័ន្ធឬមតិយោបល់ច្បាស់លាស់ |
ពិន្ទុបន្ថែម៖
- ប្រព័ន្ធហ្គេមច្នៃប្រឌិត ដែលបង្ហាញកម្រិតប្រើប្រាស់គំរូអស្ចារ្យ
- វិធីបញ្ចូលច្រើន (ទាំងក្តារចុច និងមណ្ឌលសុីម៉ៅ)
- ស្ថាបត្យកម្មអាចពង្រីកបាន ដែលងាយស្រួលបន្ថែមមុខងារថ្មីៗ
ការបដិសេធ៖
ឯកសារនេះត្រូវបានបកប្រែដោយប្រើសេវាកម្មបកប្រែ AI Co-op Translator។ ខណៈពេលដែលយើងខំប្រឹងប្រែងសម្រាប់ភាពត្រឹមត្រូវ សូមដឹងថាការបកប្រែដោយអូតូម៉ាទិកអាចមានកំហុស ឬការខកខានបាន។ ឯកសារដើមដោយភាសាម្ដុំណឹងគួរត្រូវបានគិតថាជាដើមពិតប្រាកដ។ សម្រាប់ព័ត៌មានសំខាន់ៗ គឺមានការផ្ដល់អនុសាសន៍ឲ្យប្រើការបកប្រែដោយមនុស្សវិជ្ជាជីវៈ។ យើងមិនទទួលខុសត្រូវចំពោះការយល់ច្រឡំ ឬការបកស្រាយខុស ដែលកើតមានពីការប្រើប្រាស់ការបកប្រែនេះឡើយ។