You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Web-Dev-For-Beginners/translations/km/6-space-game/6-end-condition
localizeflow[bot] 388926566b
chore(i18n): sync translations with latest source changes (chunk 1/1, 243 changes)
4 months ago
..
solution chore(i18n): sync translations with latest source changes (chunk 1/1, 243 changes) 4 months ago
your-work chore(i18n): sync translations with latest source changes (chunk 1/1, 243 changes) 4 months ago
README.md chore(i18n): sync translations with latest source changes (chunk 1/1, 243 changes) 4 months ago
assignment.md chore(i18n): sync translations with latest source changes (chunk 1/1, 243 changes) 4 months ago

README.md

កសាងហ្គេមអាកាសចរណ៍ ផ្នែកទី 6៖ ចប់ និងចាប់ផ្ដើមម្ដងទៀត

journey
    title ដំណើរការសម្រេចលេងហ្គេមរបស់អ្នក
    section លក្ខខណ្ឌចប់
      កំណត់ស្ថានភាពឈ្នះ/แพ้: 3: Student
      អនុវត្តការត្រួតពិនិត្យលក្ខខណ្ឌ: 4: Student
      គ្រប់គ្រងការផ្លាស់ប្តូរស្ថានភាព: 4: Student
    section បទពិសោធន៍អ្នកលេង
      រៀបចំប្រព័ន្ធមតិយោបល់: 4: Student
      បង្កើតមេកានិចចាប់ផ្តើមឡើងវិញ: 5: Student
      លម្អរព្រួញអ្នកប្រើប្រាស់: 5: Student
    section សម្ព័ន្ធប្រព័ន្ធ
      គ្រប់គ្រងរយៈពេលហ្គេម: 5: Student
      គ្រប់គ្រងការលាងសម្អាតអង្គចងចាំ: 5: Student
      បង្កើតបទពិសោធន៍ពេញលេញ: 5: Student

ហ្គេមដ៏អស្ចារ្យអ្វីៗក៏ត្រូវការ លក្ខខណ្ឌបញ្ចប់ច្បាស់លាស់ និងយន្តការចាប់ផ្ដើមឡើងវិញយ៉ាងរលូន។ អ្នកបានបង្កើតហ្គេមអាកាសចរណ៍ដ៏គួរឱ្យទាក់ទាញមួយ ដែលមានចលនា សង្រ្គាម និងការគណនា ពេលនេះគឺពេលវេលាចង់បន្ថែមផ្នែកចុងក្រោយដែលធ្វើអោយវាភាពពេញលេញ។

ហ្គេមរបស់អ្នកឥឡូវនេះរត់ដោយមិនផុតដូចជាឧបករណ៍ដាក់សញ្ញា Voyager ដែល NASA បានបញ្ចូននៅឆ្នាំ 1977 - នៅតែធ្វើដំណើរឆ្លងកាត់អាកាសចរណ៍ជាច្រើនទសវត្ស។ ទោះបីបែបនេះនៅសម្រាប់ការស្រាវជ្រាវពីអាកាស ប៉ុន្តែហ្គេមត្រូវការ ចំណុចបញ្ចប់កំណត់ដើម្បីបង្កើតបទពិសោធន៍ដែលផ្តល់សេចក្តីសប្បាយចិត្ត។

ថ្ងៃនេះ ខ្ញុំនឹងអនុវត្តលក្ខខណ្ឌឈ្នះ/សianut ហើយប្រព័ន្ធចាប់ផ្ដើមឡើងវិញ។ នៅចុងមេរៀននេះ អ្នកនឹងមានហ្គេមដែលបានវាយកម្រិតស្អាតដែលអ្នកលេងអាចបញ្ចប់ និងលេងបន្តបាន ដូចហ្គេមអាការ៉ាដែលបានកំណត់មធ្យោបាយហ្គេម។

mindmap
  root((ការសម្រេចហ្គេម))
    End Conditions
      Victory States [ស្ថានភាពឈ្នះ]
      Defeat Conditions [លក្ខខណ្ឌបាត់បង់]
      Progress Tracking [ការតាមដានការរីកចម្រើន]
      State Validation [ការផ្ទៀងផ្ទាត់ស្ថានភាព]
    Player Feedback
      Visual Messages [សារមើលឃើញ]
      Color Psychology [ផ្នែកចិត្តវិទ្យ ពណ៌]
      Clear Communication [ការទំនាក់ទំនងច្បាស់លាស់]
      Emotional Response [ចលនាអារម្មណ៍]
    State Management
      Game Loop Control [ការគ្រប់គ្រងលំហូរ​ហ្គេម]
      Memory Cleanup [ការសំអាតចងចាំ]
      Object Lifecycle [ជីវចលវត្ថុ]
      Event Handling [ការដោះស្រាយព្រឹត្តិការណ៍]
    Restart Systems
      Input Handling [ការគ្រប់គ្រងការបញ្ចូល]
      State Reset [កំណត់ស្ថានភាពឡើងវិញ]
      Fresh Initialization [ការចាប់ផ្តើមថ្មី]
      User Experience [បទពិសោធន៍អ្នកប្រើ]
    Polish Elements
      Message Display [ការបង្ហាញសារ]
      Smooth Transitions [ការបម្លាស់ប្តូរយ៉ាងរលូន]
      Error Prevention [ការការពារ​កំហុស]
      Accessibility [ភាពងាយស្រួលចូលដំណើរការ]

វិចារណាសួរសំណួរមុនមេរៀន

វិចារណាសួរសំណួរមុនមេរៀន

ការយល់ដឹងអំពីលក្ខខណ្ឌបញ្ចប់ហ្គេម

ហ្គេមរបស់អ្នកគួរបញ្ចប់នៅពេលណា? សំណួរចម្បងនេះបានបង្ហាត់ការ រចនាហ្គេមទាំងមូល តាំងពីសម័យអាការ៉ាដំបូង។ Pac-Man បញ្ចប់នៅពេលអ្នកត្រូវបានគេចាប់ដោយខ្ញង់ ឬបានលុបចោលគ្រាប់ទាំងអស់ ខណៈដែល Space Invaders បញ្ចប់នៅពេលអាពាហ៍ពេជ្រឈានដល់ផ្នែកបាត ឬអ្នកបំផ្លាញពួកវាទាំងអស់។

ជាក្រុមច្នៃប្រឌិតហ្គេម អ្នកកំណត់លក្ខខណ្ឌឈ្នះ និងខូចខាត។ សម្រាប់ហ្គេមអាកាសចរណ៍របស់យើង មានវិធីសាស្រ្តដែលទទួលស្គាល់ដោយសំខាន់ ដើម្បីបង្កើតហ្គេមដែលគួរឱ្យចាប់អារម្មណ៍៖

flowchart TD
    A["🎮 ចាប់ផ្តើមហ្គេម"] --> B{"ពិនិត្យល័ក្ខខណ្ឌ"}
    
    B --> C["ចំនួនសត្រូវ"]
    B --> D["ជីវិតវីរបុរស"]
    B --> E["កម្រិតពិន្ទុ"]
    B --> F["ការរីកចម្រើនកម្រិត"]
    
    C --> C1{"សត្រូវ = 0?"}
    D --> D1{"ជីវិត = 0?"}
    E --> E1{"ពិន្ទុ ≥ គោលដៅ?"}
    F --> F1{"បេសកកម្មបានបញ្ចប់?"}
    
    C1 -->|បាទ| G["🏆 ជ័យជម្នះ"]
    D1 -->|បាទ| H["💀 បរាជ័យ"]
    E1 -->|បាទ| G
    F1 -->|បាទ| G
    
    C1 -->|ទេ| B
    D1 -->|ទេ| B
    E1 -->|ទេ| B
    F1 -->|ទេ| B
    
    G --> I["🔄 ជម្រើសចាប់ផ្តើមម្តងទៀត"]
    H --> I
    
    style G fill:#e8f5e8
    style H fill:#ffebee
    style I fill:#e3f2fd
  • បំផ្លាញនាវាអ្នកសត្រូវ N យន្តហោះ៖ វាមានប្រយោជន៍បំផុត ប្រសិនបើអ្នកចែកហ្គេមជាចំណុចកម្រិតផ្សេងៗដែលអ្នកត្រូវបំផ្លាញយន្តហោះអាកាសចរណ៍អ្នកសត្រូវ N ដើម្បីបញ្ចប់កម្រិតមួយ
  • នាវារបស់អ្នកត្រូវបានបំផ្លាញ៖ មានហ្គេមឈានមុខបាត់បង់បើនាវារបស់អ្នកត្រូវបានបំផ្លាញ។ វិធីសាស្រ្តផ្សេងទៀតគឺមានមុខងារជីវិត។ រៀងរាល់ពេលដែលនាវារបស់អ្នកត្រូវបានបំផ្លាញ វានឹងកាត់បន្ថយជីវិតមួយ។ នៅពេលជីវិតទាំងអស់ត្រូវបាត់បង់ អ្នកនឹងបាត់បង់ហ្គេម។
  • អ្នកបានប្រមូលពិន្ទុ N៖ លក្ខខណ្ឌបញ្ចប់ទៀតគឺអ្នកប្រមូលពិន្ទុ។ របៀបយកពិន្ទុគឺដាក់នៅដៃអ្នក ប៉ុន្តែវាប្រហែលជាទារកកំណត់ពិន្ទុនៅលើសកម្មភាពញឹកញាប់ដូចជា បំផ្លាញនាវាសត្រូវឬប្រមូលធាតុដែលធាតុនោះធ្លាក់ចុះនៅពេលវាត្រូវបានបំផ្លាញ។
  • បញ្ចប់កម្រិតមួយ: វាអាចរួមបញ្ចូលលក្ខខណ្ឌជាច្រើនដូចជា បំផ្លាញ X នាវាសត្រូវ ប្រមូលពិន្ទុ Y ឬប្រមូលធាតុជាក់លាក់មួយ។

អនុវត្តប្រព័ន្ធចាប់ផ្ដើមឡើងវិញហ្គេម

ហ្គេមល្អជំរុញឱ្យចូលការលេងឡើងវិញ ដោយប្រើយន្តការចាប់ផ្ដើមឡើងវិញយ៉ាងរលូន។ ពេលអ្នកលេងបញ្ចប់ហ្គេម (ឬបាត់បង់) ពួកគេជាញឹកញាប់ចង់សាកល្បងម្ដងទៀតភ្លាមៗ - មិនថាដើម្បីលægtពិន្ទុ ឬធ្វើឱ្យធ្វើការ បានល្អប្រសើរឡើង។

stateDiagram-v2
    [*] --> Playing: ការទាញផ្តើមហ្គេម
    Playing --> Victory: សត្រូវទាំងអស់ត្រូវបំផ្លាញ
    Playing --> Defeat: ជីវិត = 0
    
    Victory --> MessageDisplay: បង្ហាញសារឈ្នះ
    Defeat --> MessageDisplay: បង្ហាញសារបាត់បង់
    
    MessageDisplay --> WaitingRestart: ចុច Enter សម្រាប់បន្ត
    WaitingRestart --> Resetting: ត្រូវបានចុច Enter
    
    Resetting --> CleanupMemory: លុបចោលអន្ទះអារម្មណ៍
    CleanupMemory --> ClearEvents: យកការស្តាប់ចេញ
    ClearEvents --> InitializeGame: ចាប់ផ្តើមថ្មី
    InitializeGame --> Playing: ហ្គេមថ្មីចាប់ផ្តើម
    
    note right of MessageDisplay
        មតិយោបល់ពណ៌-coded:
        ប Wi = ឈ្នះ
        ក្រហម = បាត់បង់
    end note
    
    note right of Resetting
        ការកំណត់ស្ថានភាពថ្មីបានបញ្ចប់
        ផ្តល់ការការពារជៀសវាងការលេចចេញនៃអង្គចងចាំ
    end note

Tetris ជាឧទាហរណ៍ដ៏ល្អបំផុត៖ ពេលឥវ៉ាន់របស់អ្នកដល់ផ្នែកលើ អ្នកអាចចាប់ផ្ដើមហ្គេមថ្មីភ្លាមៗ ដោយមិនត្រូវធ្វើដំណើរចូលម៉ឺនុយស្មុគស្មាញ។ យើងនឹងបង្កើតប្រព័ន្ធចាប់ផ្ដើមឡើងវិញដូចស្រដៀង គ្រប់គ្រងស្ថានភាពហ្គេមថ្មីៗ និងធ្វើឲ្យអ្នកលេងកាន់តែ ជាប់បញ្ចូលល្បឿនលឿន។

ការឆ្លុះបញ្ចាំង: សូមគិតអំពីហ្គេមដែលអ្នកបានលេង។ នៅក្រោមលក្ខខណ្ឌណាដែលពួកវាបញ្ចប់ ហើយតើអ្នកត្រូវធ្វើដូចម្តេចដើម្បីចាប់ផ្ដើមម្ដងទៀត? តើអ្វីធ្វើឲ្យបទពិសោធន៍ចាប់ផ្ដើមឡើងវិញមានភាពរលូនពីការជារឿយ?

អ្វីដែលអ្នកនឹងបង្កើត

អ្នកនឹងអនុវត្តមុខងារចុងក្រោយដែលបម្លែងគម្រោងរបស់អ្នកជា បទពិសោធន៍ហ្គេមមួយដែលពេញលេញ។ ធាតុទាំងនេះបំបែកហ្គេមដែលបានច្នៃប្រឌិតល្អ ពីគំរូទូទៅ។

នេះជាអ្វីដែលយើងនឹង បន្ថែមថ្ងៃនេះ៖

  1. លក្ខខណ្ឌឈ្នះ៖ បំផ្លាញសត្រូវទាំងអស់ និងទទួលបានការលំអរដ៏ត្រឹមត្រូវ (អ្នកបានសន្និដ្ឋានវា!)
  2. លក្ខខណ្ឌបាត់បង់៖ ខាតជីវិតនិងធ្វើបញ្ញត្តិជាមួយអេក្រង់បាត់បង់
  3. យន្តការចាប់ផ្ដើមឡើងវិញ៖ ចុច Enter ដើម្បីចូលវិញភ្លាមៗ - ព្រោះហ្គេមមួយមិនគ្រប់គ្រាន់ទេ
  4. ការគ្រប់គ្រងស្ថានភាព៖ សំអាតល្អរៀងរាល់ដង - គ្មានសត្រូវនៅសល់ ឬកំហុសចម្លែកដែលនៅពីហ្គេមមុន

ចាប់ផ្ដើម

សូមរៀបចំបរិយាកាសអភិវឌ្ឍរបស់អ្នក។ អ្នកគួរតែមានឯកសារហ្គេមអាកាសចរណ៍ទាំងអស់ពីមេរៀនមុនៗរួចរាល់។

គម្រោងរបស់អ្នកគួរតែមានរូបរាងប្រហែលដូចជា៖

-| assets
  -| enemyShip.png
  -| player.png
  -| laserRed.png
  -| life.png
-| index.html
-| app.js
-| package.json

ចាប់ផ្ដើមម៉ាស៊ីនបម្រើអភិវឌ្ឍរបស់អ្នក:

cd your-work
npm start

ពាក្យបញ្ជានេះ:

  • រត់ម៉ាស៊ីនបម្រើតាមលំនៅ http://localhost:5000
  • បម្រើឯកសាររបស់អ្នកយ៉ាងត្រឹមត្រូវ
  • Automatically ចុង to refresh នៅពេលអ្នកធ្វើបំប្រែប្រាស់

បើក http://localhost:5000 ជាមួយកម្មវិធីរុករកហើយផ្ទៀងផ្ទាត់ថាហ្គេមរបស់អ្នកកំពុងរត់។ អ្នកគួរតែអាចចលនា វាយប្រហារ និងធ្វើអន្តរកម្មជាមួយសត្រូវបាន។ បន្ទាប់ពីបញ្ជាក់ហើយ អ្នកអាចបន្តអនុវត្តបាន។

💡 ជំនួយជាន់ខ្ពស់: ដើម្បីជៀសវាងការព្រមាននៅ Visual Studio Code សូមប្រកាស gameLoopId នៅផ្នែកលើនៃឯកសាររបស់អ្នកជា let gameLoopId; ជំនួសការប្រកាសវាក្នុងមុខងារ window.onload។ វាធ្វើតាមទំរង់ប្រកាសអថេរ JavaScript សម័យថ្មី។

flowchart TD
    A["១. ការតាមដានលក្ខខណ្ឌ"] --> B["២. អ្នកដំណើរការព្រឹត្តិការណ៍"]
    B --> C["៣. អក្ខរក្រមសារ"]
    C --> D["៤. គ្រប់គ្រងការចាប់ផ្តើមឡើងវិញ"]
    D --> E["៥. ការបង្ហាញសារ"]
    E --> F["៦. ការកំណត់ឡើងវិញប្រព័ន្ធ"]
    
    G["isHeroDead()\nisEnemiesDead()"] --> A
    H["ព្រឹត្តិការណ៍ប៉ះ\nព្រឹត្តិការណ៍ចប់ហ្គេម"] --> B
    I["GAME_END_WIN\nGAME_END_LOSS"] --> C
    J["ក្តារចូល\nការបញ្ចេញការចាប់ផ្តើមឡើងវិញ"] --> D
    K["ជ័យជម្នះ/បរាជ័យ\nអក្សរតាមពណ៌"] --> E
    L["ការសម្អាតស្ថានភាព\nការចាប់ផ្តើមថ្មី"] --> F
    
    F --> M["🎮 ហ្គេមបញ្ចប់"]
    
    style A fill:#e3f2fd
    style B fill:#e8f5e8
    style C fill:#fff3e0
    style D fill:#f3e5f5
    style E fill:#e0f2f1
    style F fill:#fce4ec
    style M fill:#e1f5fe

ជំហានអនុវត្ត

ជំហាន 1៖ បង្កើតមុខងារតាមដានលក្ខខណ្ឌបញ្ចប់

យើងត្រូវការមុខងារដើម្បីត្រួតពិនិត្យពេលណាហ្គេមគួរបញ្ចប់។ ដូចឧបករណ៍ចាប់សញ្ញានៅស្ថានីយអាកាសអន្តរជាតិ ដែលត្រួតពិនិត្យប្រព័ន្ធសំខាន់ៗជាថ្មីៗ មុខងារនេះនឹងត្រួតពិនិត្យស្ថានភាពហ្គេមជាប់ជាបន្តបន្ទាប់។

function isHeroDead() {
  return hero.life <= 0;
}

function isEnemiesDead() {
  const enemies = gameObjects.filter((go) => go.type === "Enemy" && !go.dead);
  return enemies.length === 0;
}

អ្វីដែលកំពុងកើតឡើងក្រោមឆាស:

  • ត្រួតពិនិត្យថានរណាមួយរបស់វាកំពុងខាតជីវិត (អូហ្ស!)
  • រាប់មានសត្រូវនៅរស់នៅប៉ុន្មាននាក់
  • ត្រឡប់ជាtrueនៅពេលទឹកដីប្រយុទ្ធសម្រាលពីសត្រូវ
  • ប្រើលូនតម្លៃកំហុសត្រឹមត្រូវ/មិនត្រឹមត្រូវ ដើម្បីធ្វើអោយឆោតសាមញ្ញ
  • បញ្ជ្រាបតាមអង្គធាតុំទាំងអស់ក្នុងហ្គេមដើម្បីស្វែងរកអ្នកនៅរស់

ជំហាន 2៖ បច្ចុប្បន្នភាពអ្នកដំណើរការកម្មវិធីសម្រាប់លក្ខខណ្ឌបញ្ចប់

ឥឡូវយើងនឹងភ្ជាប់ការត្រួតពិនិត្យលក្ខខណ្ឌទាំងនេះទៅប្រព័ន្ធព្រឹត្តិការ្្យហ្គេម។ រៀងរាល់ពេលមានប៉ះទង្គិច កម្មវិធីហ្គេមនឹងវាយតម្លៃថា វាបង្កើតលក្ខខណ្ឌបញ្ចប់ឬទេ។ វាបង្កើតមតិយោបល់ភ្លាម សម្រាប់ព្រឹត្តិការណ៍សំខាន់ៗក្នុងហ្គេម។

sequenceDiagram
    participant Collision
    participant GameLogic
    participant Conditions
    participant EventSystem
    participant Display
    
    Collision->>GameLogic: ដែកបន្ទាត់ប៉ះសត្រូវ
    GameLogic->>GameLogic: បំផ្លាញវត្ថុ
    GameLogic->>Conditions: ពិនិត្យ isEnemiesDead()
    
    alt សត្រូវគ្រប់គ្នាបានឈ្នះ
        Conditions->>EventSystem: បញ្ចេញ GAME_END_WIN
        EventSystem->>Display: បង្ហាញសារជ័យជម្នះ
    else សត្រូវនៅសល់
        Conditions->>GameLogic: បន្តហ្គេម
    end
    
    Collision->>GameLogic: សត្រូវប៉ះតួអង្គ
    GameLogic->>GameLogic: កាត់បន្ថយជីវិត
    GameLogic->>Conditions: ពិនិត្យ isHeroDead()
    
    alt ជីវិត = 0
        Conditions->>EventSystem: បញ្ចេញ GAME_END_LOSS
        EventSystem->>Display: បង្ហាញសារបរាជ័យ
    else ជីវិតនៅសល់
        GameLogic->>Conditions: ពិនិត្យ isEnemiesDead()
        alt សត្រូវគ្រប់គ្នាបានឈ្នះ
            Conditions->>EventSystem: បញ្ចេញ GAME_END_WIN
        end
    end
eventEmitter.on(Messages.COLLISION_ENEMY_LASER, (_, { first, second }) => {
    first.dead = true;
    second.dead = true;
    hero.incrementPoints();

    if (isEnemiesDead()) {
      eventEmitter.emit(Messages.GAME_END_WIN);
    }
});

eventEmitter.on(Messages.COLLISION_ENEMY_HERO, (_, { enemy }) => {
    enemy.dead = true;
    hero.decrementLife();
    if (isHeroDead())  {
      eventEmitter.emit(Messages.GAME_END_LOSS);
      return; // ខូចខាតមុនការឈ្នះ
    }
    if (isEnemiesDead()) {
      eventEmitter.emit(Messages.GAME_END_WIN);
    }
});

eventEmitter.on(Messages.GAME_END_WIN, () => {
    endGame(true);
});
  
eventEmitter.on(Messages.GAME_END_LOSS, () => {
  endGame(false);
});

អ្វីកំពុងកើតឡើងនៅទីនេះ:

  • កាំភ្លើងបាញ់សត្រូវ: ពួកវារួមជាមួយៗគ្នា, អ្នកទទួលបានពិន្ទុ ហើយយើងពិនិត្យថាតើអ្នកឈ្នះរឺហើយ
  • សតេចាក់ផ្ទើមអ្នក: អ្នកបាត់ជីវិតមួយ ហើយយើងពិនិត្យថាតើអ្នកនៅរស់ឬទេ
  • កំណត់រដូវលំដាប់ថ្នាក់: ពួកយើងពិនិត្យស្ថានភាពបាត់បង់ជាមុន (គ្មាននរណាចង់ឈ្នះ និងបាត់បង់ក្នុងពេលតែមួយ!)
  • ចម្លើយភ្លាមៗ: នៅពេលអ្វីមួយសំខាន់កើតឡើង, ហ្គេមដឹងអំពីវាភ្លាមៗ

ជំហាន 3៖ បន្ថែម Constants សារថ្មី

អ្នកត្រូវការបន្ថែមប្រភេទសារថ្មីទៅឯកសារគោល Messages។ Constants ទាំងនេះជួយរក្សាសុពលភាព និងបង្ការ ការខ្វះខាតសំណុំក្នុងប្រព័ន្ធព្រឹត្តិការ។

GAME_END_LOSS: "GAME_END_LOSS",
GAME_END_WIN: "GAME_END_WIN",

ក្នុងខាងលើ យើងបាន:

  • បន្ថែម constants សម្រាប់ព្រឹត្តិការណ៍បញ្ចប់ហ្គេម ដើម្បីរក្សាសម្រង់
  • ប្រើឈ្មោះពិពណ៌នាដែលច្បាស់លាស់ បង្ហាញគោលបំណងនៃព្រឹត្តិការណ៍
  • អនុវត្ត ទម្រង់ឈ្មោះដែលបានមានរួចមកសម្រាប់ប្រភេទសារ

ជំហាន 4៖ អនុវត្តការត្រួតពិនិត្យការចាប់ផ្ដើមឡើងវិញ

ឥឡូវនេះអ្នកនឹងបន្ថែមការគ្រប់គ្រងក្តារចុច ដែលអនុញ្ញាតឲ្យអ្នកលេង ចាប់ផ្ដើមហ្គេមឡើងវិញ។ សោ Enter គឺជាជម្រើសគ្រប់គ្រាន់ ព្រោះវាត្រូវបានទាក់ទង ជាមួយកំណត់យល់ព្រម និងចាប់ផ្ដើមហ្គេមថ្មី។

បន្ថែមការចាប់យកសោ Enter ទៅក្នុង កម្មវិធីស្តាប់ keydown ដែលមានរួចហើយ៖

else if(evt.key === "Enter") {
   eventEmitter.emit(Messages.KEY_EVENT_ENTER);
}

បន្ថែម constant សារថ្មី៖

KEY_EVENT_ENTER: "KEY_EVENT_ENTER",

អ្វីដែលអ្នកត្រូវដឹង:

  • ពង្រឹង ប្រព័ន្ធគ្រប់គ្រងព្រឹត្តិការណ៍ក្តារចុចដែលមានរួចហើយ
  • ប្រើ សោ Enter ជាការចាប់ផ្ដើមឡើងវិញ ដើម្បីផ្តល់បទពិសោធន៍បញ្ចូលលឿន
  • បញ្ចេញព្រឹត្តិការណ៍ផ្ទាល់ខ្លួន ដែលផ្នែកផ្សេងៗរបស់ហ្គេមអាចស្ដាប់បាន
  • រក្សា ទម្រង់ដូចគ្នានឹងការគ្រប់គ្រងក្តារចុចផ្សេងៗ

ជំហាន 5៖ បង្កើតប្រព័ន្ធបង្ហាញសារ

ហ្គេមរបស់អ្នកត្រូវការប្រាស្រ័យទាក់ទងលទ្ធផលច្បាស់លាស់ទៅអ្នកលេង។ យើងនឹងបង្កើតប្រព័ន្ធបង្ហាញសារដែលបង្ហាញស្ថានភាពឈ្នះ និងខាត ជាមួយអក្សរពណ៌ ផ្សេងគ្នា ដូចជាផ្ទាំងប្រដាប់បញ្ចូលកុំព្យូទ័រចាស់ៗ ដែលពណ៌បៃតងសំដៅទៅលទ្ធផលនៅសំណាង និងពណ៌ក្រហមសំដៅទៅកំហុស។

បង្កើតមុខងារ displayMessage():

function displayMessage(message, color = "red") {
  ctx.font = "30px Arial";
  ctx.fillStyle = color;
  ctx.textAlign = "center";
  ctx.fillText(message, canvas.width / 2, canvas.height / 2);
}

ជំហានៗដែលកំពុងកើតឡើង៖

  • កំណត់ ទំហំ និងគ្រួសារអក្សរដើម្បីអនុញ្ញាតឱ្យអក្សរយល់បានច្បាស់
  • អនុវត្ត ពណ៌ជាផារ៉ាម៉ែត្រដែលមាន "ក្រហម" ជាលំនាំដើមសម្រាប់ការព្រមាន
  • វាយកណ្តាលអក្សរជាផ្នែកទូទៅ និងផ្នែកបញ្ឈរ នៅលើផ្ទាំងគូដ
  • ប្រើ ពាណិជ្ជកម្មប្រៀបប្រដៅ JavaScript សម័យថ្មី សម្រាប់ជម្រើសពណ៌អាចបង្វិល
  • ប្រើ context canvas 2D សម្រាប់បង្ហាញអក្សរដោយផ្ទាល់

បង្កើតមុខងារ endGame():

function endGame(win) {
  clearInterval(gameLoopId);

  // កំណត់ការពន្យារពេលដើម្បីធានាថាការបង្ហាញដែលនៅក្នុងប្រតិបត្តិ៍បានបញ្ចប់រួច ។
  setTimeout(() => {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.fillStyle = "black";
    ctx.fillRect(0, 0, canvas.width, canvas.height);
    if (win) {
      displayMessage(
        "Victory!!! Pew Pew... - Press [Enter] to start a new game Captain Pew Pew",
        "green"
      );
    } else {
      displayMessage(
        "You died !!! Press [Enter] to start a new game Captain Pew Pew"
      );
    }
  }, 200)  
}

អ្វីដែលមុខងារនេះធ្វើ:

  • ឈប់សកម្មភាពទាំងអស់ - គ្មានចលនាយន្តហោះ ឬកាំភ្លើងបាញ់ទៀតទេ
  • ឈប់ពេលខ្លី (200ms) ដើម្បីឲ្យគ្រាប់ផ្ទាំងចុងក្រោយបានគូដរួច
  • សម្អាតអេក្រង់បូមជាប់ពណ៌ខ្មៅ ដើម្បីបង្កើតអ efeito គួរឱ្យចាប់អារម្មណ៍
  • បង្ហាញសារ ផ្សេងៗសម្រាប់អ្នកឈ្នះ និងអ្នកបាត់បង់
  • ពណ៌ចេញផ្សាយ ពីសារជោគជ័យជាពណ៌បៃតង និងសារបរាជ័យជាពណ៌ក្រហម
  • ប្រាប់ អ្នកលេងយ៉ាងច្បាស់ពីរបៀបចាប់ផ្ដើមឡើងវិញ

🔄 ការត្រួតពិនិត្យផ្នែកបង្រៀន

ការគ្រប់គ្រងស្ថានភាពហ្គេម៖ មុនអនុវត្តមុខងារការស្តារឡើងវិញ សូមប្រាកដថាអ្នកយល់ពី៖

  • របៀបដែលលក្ខខណ្ឌបញ្ចប់បង្កើតវត្ថុបំណងកំណត់ល្បែងច្បាស់លាស់
  • ហេតុអ្វីបានជាការផ្តល់មតិក្នុងរូបភាពសំខាន់សម្រាប់ការយល់ដឹងអ្នកលេង
  • សារៈសំខាន់នៃការសំអាតដែលត្រឹមត្រូវ ដើម្បីការពារការពុកម៉ូឡាំងអង្គចងចាំ
  • របៀបដែលស្ថាបត្យកម្មកម្មវិធីដោយបង្កើតព្រឹត្តិការណ៍អនុញ្ញាតឲ្យស្ថានភាពបំផ្លាញបានយ៉ាងស្អាត

ការធ្វើតេស្តខ្លី៖ តើអ្វីនឹងកើតឡើងបើអ្នកមិនសម្អាតអ្នកស្តាប់ព្រឹត្តិការណ៍ពេលស្តារឡើងវិញ? ចម្លើយ៖ ការពុកម៉ូឡាំងអង្គចងចាំ និងអ្នកដំណើរការព្រឹត្តិការណ៍ដដែលៗដែលធ្វើឲ្យមានបញ្ហាបែបមិនអាចទាក់ទាញបាន

គោលការណ៍រចនាហ្គេម៖ ឥឡូវនេះអ្នកកំពុងអនុវត្ត៖

  • វត្ថុបំណងច្បាស់លាស់៖ អ្នកលេងដឹងច្បាស់ពីអ្វីដែលកំណត់ភាពជោគជ័យ និងបរាជ័យ
  • មតិភ្លាមៗ៖ ការផ្លាស់ប្តូរស្ថានភាពហ្គេមត្រូវបានបង្ហាញភ្លាមៗ
  • ការគ្រប់គ្រងអ្នកប្រើ៖ អ្នកលេងអាចចាប់ផ្ដើមឡើងវិញពេលដែលពួកគេចង់បាន
  • ភាពទាន់ចិត្តរបស់ប្រព័ន្ធ៖ ការសំអាតត្រឹមត្រូវជៀសវាងកំហុស និងបញ្ហា

ជំហាន 6៖ អនុវត្តមុខងារស្តារហ្គេមឡើងវិញ

ប្រព័ន្ធស្តារត្រូវការសម្ងាត់សារពើភ័ណ្ឌហ្គេមបច្ចុប្បន្ន ហើយចាប់ផ្ដើមសម័យហ្គេមថ្មីឆ្លាតវៃ។ វាប្រាកដថាអ្នកលេងទទួលបានចាប់ផ្ដើមថ្មី លើសមាសធាតុណាមួយដែលនៅសល់ពីហ្គេមមុន។

បង្កើតមុខងារ resetGame():

function resetGame() {
  if (gameLoopId) {
    clearInterval(gameLoopId);
    eventEmitter.clear();
    initGame();
    gameLoopId = setInterval(() => {
      ctx.clearRect(0, 0, canvas.width, canvas.height);
      ctx.fillStyle = "black";
      ctx.fillRect(0, 0, canvas.width, canvas.height);
      drawPoints();
      drawLife();
      updateGameObjects();
      drawGameObjects(ctx);
    }, 100);
  }
}

យើងបានយល់ពីចំណុចនីមួយៗ៖

  • ពិនិត្យថា បន្ទាត់ហ្គេមកំពុងរត់ មុនពេលស្តារឡើងវិញ
  • លុបបន្ទាត់ហ្គេមបច្ចុប្បន្ន ដើម្បីបញ្ឈប់សកម្មភាពទាំងអស់
  • ដកអ្នកស្ដាប់ព្រឹត្តិការណ៍ទាំងអស់ ដើម្បីការពារការពុកម៉ូឡាំងអង្គចងចាំ
  • ចាប់ផ្ដើមម្តងទៀតស្ថានភាពហ្គេមជាមួយវត្ថុ និងអថេរថ្មី
  • ចាប់ផ្ដើម បន្ទាត់ហ្គេមថ្មីជាមួយមុខងារហ្គេមទាំងអស់
  • រក្សាចន្លោះពេលនៅ 100ms ដូចដើម ដើម្បីធានាថាប្រសិទ្ធភាពគ្រប់គ្រាន់

បន្ថែមកម្មវិធីដំណើរការសំរាប់សោ Enter ទៅក្នុងមុខងារ initGame():

eventEmitter.on(Messages.KEY_EVENT_ENTER, () => {
  resetGame();
});

បន្ថែមវិធីសាស្រ្ត clear() ទៅក្នុងថ្នាក់ទំព័រព្រឹត្តិការណ៍ EventEmitter របស់អ្នក៖

clear() {
  this.listeners = {};
}

ចំណុចសំខាន់ដើម្បីចងចាំ៖

  • ភ្ជាប់ការចុចសោ Enter ជាមួយមុខងារស្តារហ្គេមឡើងវិញ
  • ចុះបញ្ជីអ្នកស្ដាប់ហេតុការណ៍នេះនៅពេលចាប់ផ្ដើមហ្គេម
  • ផ្តល់វិធីសាស្រ្តស្អាតសម្រាប់លុបអ្នកស្ដាប់ព្រឹត្តិការណ៍ទាំងអស់ពេលស្តារ
  • ការពារការពុកម៉ូឡាំងអង្គចងចាំដោយត្រូវសម្អាតអ្នកដំណើរការព្រឹត្តិការណ៍ចាស់ៗ
  • ស្តារឡើងវិញវត្ថុអ្នកស្ដាប់ឲ្យថ៌សស្អាតសម្រាប់ការចាប់ផ្ដើមថ្មី

អបអរសាទរ! 🎉

👽 💥 🚀 អ្នកបានសាងសង់ហ្គេមពេញលេញពីដំបូង។ ដូចកម្មវិធីបង្កើតហ្គេមវីដេអូដំបូងៗ នៅទសវត្ស 1970 អ្នកបានប្ដូរជួរឈរគ្រាប់កូដទៅជាបទពិសោធន៍អន្តរកម្មជាមួយយន្តការហ្គេម និងមតិកម្មវិធីភ្នាក់ងារ។ 🚀 💥 👽

អ្នកបានសម្រេច:

  • អនុវត្តលក្ខខណ្ឌឈ្នះនិងបាត់បង់រួមបញ្ចូលមតិអ្នកប្រើប្រាស់
  • បង្កើតប្រព័ន្ធចាប់ផ្ដើមឡើងវិញដែលរលូនសម្រាប់លេងជាបន្តបន្ទាប់
  • រចនាការប្រាស្រ័យទាក់ទងក្រៅមើលឃើញសម្រាប់ស្ថានភាពហ្គេម
  • គ្រប់គ្រងការផ្លាស់ប្តូរស្ថានភាពហ្គេម និងការសម្អាតស្មុំកំហុស
  • បញ្ចូលសមាសាគ្រឿងទាំងអស់ជាហ្គេមដែលលេងបានល្អ

🔄 ការត្រួតពិនិត្យផ្នែកបង្រៀន

ប្រព័ន្ធអភិវឌ្ឍហ្គេមពេញលេញ៖ រំលឹកពីការជំនាញហ្គេមរបស់អ្នកពេញលេញ៖

  • របៀបដែលលក្ខខណ្ឌបញ្ចប់បង្កើតបទពិសោធន៍ល្អឥតខ្ចោះសម្រាប់អ្នកលេង
  • ហេតុអ្វីបានជាការគ្រប់គ្រងស្ថានភាពត្រឹមត្រូវមានសារៈសំខាន់សម្រាប់ស្ថេរភាពហ្គេម
  • របៀបដែលមតិផ្តល់កម្មវិធីជាមួយការបង្ហាញសំខាន់ឲ្យយល់
  • តួនាទីនៃប្រព័ន្ធចាប់ផ្ដើមឡើងវិញ ក្នុងការទាក់ទាញអ្នកលេងទៅជាមួយហ្គេម

ជំនាញប្រព័ន្ធ៖ ហ្គេមពេញលេញរបស់អ្នកបញ្ជាក់៖

  • ការអភិវឌ្ឍកម្រិតពេញលេញ៖ ចាប់ពីក្រាហ្វិក ទទួលយក ដល់ការគ្រប់គ្រងស្ថានភាព
  • ស្ថាបត្យកម្មជាកម្មវិធីដំណើរការព្រឹត្តិការណ៍៖ ប្រព័ន្ធដាច់ខាត មានការសម្អាតត្រឹមត្រូវ
  • រចនាបទពិសោធន៍អ្នកប្រើ៖ ផ្តល់មតិក្នុងរូបភាពច្បាស់លាស់ និងការគ្រប់គ្រងគួរឱ្យចាប់អារម្មណ៍
  • បង្កើនប្រសិទ្ធភាព៖ ល្បឿនបង្ហាញល្អ និងគ្រប់គ្រងអង្គចងចាំប្រសើរ
  • កម្រិតលំអ និងពេញលេញ៖ ព័ត៌មានលម្អិតគ្រប់យ៉ាងដែលធ្វើឲ្យហ្គេមម៉ឺងម៉ាត់

ជំនាញស្រាប់សម្រាប់ឧស្សាហកម្ម៖ អ្នកបានអនុវត្ត៖

  • ស្ថាបត្យកម្មបន្ទាត់ហ្គេម៖ ប្រព័ន្ធពេលជាក់ស្តែង ដែលមានការេតអតិផរណា
  • កម្មវិធីដំណើរការព្រឹត្តិការណ៍៖ ប្រព័ន្ធដាច់ខាតដែលអាចរីករាយលើស
  • គ្រប់គ្រងស្ថានភាព៖ ការដំណើរការទិន្នន័យស្មុគស្មាញ និងរយៈពេលងាយស្រួល
  • រចនាផ្ទៃមុខអ្នកប្រើ៖ ការប្រាស្រ័យទាក់ទងច្បាស់លាស់ និងការត្រួតពិនិត្យអនុលោម
  • ការសាកល្បង និងរកកំហុស៖ ការអភិវឌ្ឍបន្តនិងដោះស្រាយបញ្ហា

អ្វីដែលអ្នកអាចធ្វើក្នុង ៥ នាទីខាងមុខ

  • លេងហ្គេមរបស់អ្នកដែលបានបញ្ចប់ និងសាកល្បងលក្ខខណ្ឌឈ្នះ និងបាត់បង់ទាំងអស់
  • សាកល្បងបញ្ជំនឹងលក្ខខណ្ឌបញ្ចប់ផ្សេងៗ
  • ព្យាយាមបន្ថែមសារជាមួយ console.log ដើម្បីតាមដានការផ្លាស់ប្តូរស្ថានភាពហ្គេម
  • ចែករំលែកហ្គេមរបស់អ្នកជាមួយមិត្តភក្តិ ហើយទទួលបានមតិយោបល់

🎯 អ្វីដែលអ្នកអាចសម្រេចក្នុងមួយម៉ោងនេះ

  • បញ្ចប់វិចារណាសួរបន្ទាប់មេរៀន និងប្រើប្រាស់ដំណើរការអភិវឌ្ឍហ្គេមរបស់អ្នក
  • បន្ថែមសម្លេងពិសេសសម្រាប់ស្ថានភាពឈ្នះ និងបាត់បង់
  • អនុវត្តលក្ខខណ្ឌបញ្ចប់បន្ថែមដូចជា កំណត់ពេលវេលា ឬ គោលបំណងអាគុយម៉ង់ស
  • បង្កើតកម្រិតកម្ពស់ខុសគ្នា ជាមួយចំនួនសត្រូវបែបខុសៗគ្នា
  • លើកកម្ពស់ការតម្លើងរូបភាព ជាមួយអក្សរនិងពណ៌ល្អប្រសើរ

📅 ជំនាញអភិវឌ្ឍហ្គេមរបស់អ្នកសម្រាប់មួយសប្តាហ៍

  • បញ្ចប់ហ្គេមអាកាសចរណ៍កម្រិតខ្ពស់ ជាមួយកម្រិតច្រើននិងលំដាប់
  • បន្ថែមមុខងារខ្ពស់ដូចជា ថាមពលបន្ថែម ប្រភេទសត្រូវផ្សេងៗ និងអាវុធពិសេស
  • បង្កើតប្រព័ន្ធពិន្ទុខ្ពស់ ជាមួយស្តុកទិន្នន័យយូរអង្វែង
  • រចនាមួយផ្ទៃមុខអ្នកប្រើសម្រាប់ម៉ឺនុយ ការកំណត់ និងជម្រើសហ្គេម
  • បង្កើនល្បឿនសម្រាប់ឧបករណ៍ និងកម្មវិធីរុករកផ្សេងៗ
  • ប្រើប្រាស់ហ្គេមរបស់អ្នកតាមអ៊ីនធឺណិត ហើយចែករំលែកជាមួយសហគមន៍

🌟 អាជីពអភិវឌ្ឍហ្គេមរបស់អ្នកក្នុងមួយខែ

  • សាងសង់ហ្គេមពេញលេញជាច្រើនដែលស្វែងយល់ពីប្រភេទនិងយានយន្តផ្សេងៗ
  • រៀនកម្រាស់ខាងការអភិវឌ្ឍហ្គេមដូចជា Phaser ឬ Three.js
  • អនុវត្តឱ្យបានចំណេញទៅគម្រោងអភិវឌ្ឍហ្គេមបើកផ្សេងទៀត
  • អធិប្បាយពីគោលការណ៍រចនាហ្គេម និងចិត្តវិទ្យាក្រុមហ៊ុនលេង
  • បង្កើតព្រុយហ្វ៉ូលីយ៉ូបង្ហាញជំនាញអភិវឌ្ឍហ្គេមរបស់អ្នក
  • តភ្ជាប់ជាមួយសហគមន៍អភិវឌ្ឍហ្គេម និងបន្តរៀន

🎯 រយៈពេលគ្រប់គ្រងជំនាញអភិវឌ្ឍហ្គេមរបស់អ្នក

timeline
    title ការរីកចម្រើនក្នុងការរៀនអភិវឌ្ឍន៍ហ្គេមពេញលេញ
    
    section មូលដ្ឋាន (មេរៀន 1-2)
        Game Architecture: រចនាសម្ព័ន្ធគម្រោង
                         : ការគ្រប់គ្រងទ្រព្យសម្បត្តិ
                         : មូលដ្ឋានកន្វាស
                         : ប្រព័ន្ធព្រឹត្តិការណ៍
        
    section ប្រព័ន្ធអន្តរកម្ម (មេរៀន 3-4)
        Player Control: ការបដិសេធបញ្ចូល
                      :យន្តការ​ចលនា
                      : ការរកឃើញការប៉ះទង្គិច
                      : ការតំណាងរូបវិទ្យា
        
    section មេកានិចហ្គេម (មេរៀន 5)
        Feedback Systems: យន្តការចំណាត់ថ្នាក់
                        : ការគ្រប់គ្រងជីវិត
                        : ការប្រាស្រ័យទាក់ទងឃ្លាន
                        : ការលើកទឹកចិត្តអ្នកលេង
        
    section ការសម្រេចហ្គេម (មេរៀន 6)
        Polish & Flow: លក្ខខណ្ឌចប់
                     : ការគ្រប់គ្រងស្ថានភាព
                     : ប្រព័ន្ធចាប់ផ្តើមម្តងទៀត
                     : បទពិសោធអ្នកប្រើប្រាស់
        
    section លក្ខណៈពិសេសកម្រិតខ្ពស់ (១ សប្តាហ៍)
        Enhancement Skills: ការរួមបញ្ចូលសម្លេង
                          : ប្រសិទ្ធភាពទូទៅ
                          : ការរីកចម្រើនកម្រិត
                          : ការបង្កើនសមត្ថភាព
        
    section ការអភិវឌ្ឍវិជ្ជាជីវៈ (១ ខែ)
        Industry Readiness: ជំនាញផ្ទៃក្នុងស៊ុម
                          : ការសហការក្រុម
                          : ការអភិវឌ្ឍផតថល
                          : ការចូលរួមសហគមន៍
        
    section ការរីកចម្រើនអាជីព (៣ ខែ)
        Specialization: ម៉ាស៊ីនហ្គេមកម្រិតខ្ពស់
                      : ការបង្ហោះលើវេទិកា
                      : យុទ្ធសាស្ត្រសម្រាប់រកប្រាក់ចំណេញ
                      : បណ្ដាញឧស្សាហកម្ម

🛠️ សង្ខេបសម្ភារៈការអភិវឌ្ឍហ្គេមរបស់អ្នក

បន្ទាប់ពីបញ្ចប់ស៊េរីហ្គេមអាកាសនេះទាំងមូល អ្នកបានទទួលជំនាញ៖

  • ស្ថាបត្យកម្មហ្គេម៖ ប្រព័ន្ធដែលបើកដំណើរការ តំបន់ហ្គេម និងការគ្រប់គ្រងស្ថានភាព
  • កម្មវិធីក្រាហ្វិក៖ ការប្រើប្រាស់ Canvas API, ការជាងរូប sprite, និងប្រសិទ្ធភាពរូបភាព
  • ប្រព័ន្ធបញ្ចូលទិន្នន័យ៖ ការដោះស្រាយក្តារចុច ការស៊ើបអង្កេតការប៉ះទង្គិច និងការគ្រប់គ្រងយ៉ាងឆ្លាត
  • រចនាហ្គេម៖ មតិយោបល់អ្នកលេង ប្រព័ន្ធឡើងកម្រិត និងយានយន្តការចូលរួម
  • បង្កើនប្រសិទ្ធភាពកម្រិតប្រតិបត្តិការ៖ ការជាងរូបយ៉ាងមានប្រសិទ្ធភាព ការគ្រប់គ្រងអង្គចងចាំ និងការត្រួតពិនិត្យកម្រិតវីដេអូ
  • បទពិសោធន៍អ្នកប្រើ៖ ការទំនាក់ទំនងច្បាស់លាស់ ការគ្រប់គ្រងងាយស្រួល និងការតុបតែង
  • គំរូវិជ្ជាជីវៈ៖ សូម្បីកូដស្អាត ការស្កេនកំហុស និងការអនុវត្តគម្រោង

កម្មវិធីនៅពេលពិតប្រាកដ៖ ជំនាញអភិវឌ្ឍហ្គេមរបស់អ្នកអាចអនុវត្តបានផ្ទាល់ទៅ៖

  • កម្មវិធីវេបអ៊ីនធើរ៉ាក់ធ្វើ៖ មុខងារដោយស្វ័យប្រវត្តិ និងប្រព័ន្ធពេលពិត
  • ការបង្ហាញទិន្នន័យ៖ ការបង្ហាញតារាងមានភាពចល័ត និងក្រាហ្វិកអ៊ីនធើរ៉ាក់ធ្វើ
  • បច្ចេកវិទ្យាអប់រំ៖ ការប្រើហ្គេមក្នុងការអប់រំនិងបទពិសោធបណ្តុះបណ្តាល
  • អភិវឌ្ឍទូរស័ព្ទ៖ ការប្រតិបត្តិការ​តាមការប៉ះ និងបង្កើនប្រសិទ្ធភាព
  • កម្មវិធីសមមូល៖ ម៉ាស៊ីនរូបវន្ត និងគំរូពេលពិត
  • ឧស្សាហកម្មប្លែកៗ៖ សិល្បៈអន្តរកម្ម ការអប់រំ និងបទពិសោធវិជ្ជាជីវៈឌីជីថល

ជំនាញវិជ្ជាជីវៈដែលទទួលបាន៖ អ្នកអាចឥលយៈ៖

  • រចនា ប្រព័ន្ធអន្តរកម្មស្មុគស្មាញពីដើម
  • តេស្តកំហុស កម្មវិធីពេលពិតដោយវិធានការប្រព័ន្ធ
  • បង្កើនប្រសិទ្ធភាព ប្រតិបត្តិការសម្រាប់បទពិសោធអ្នកប្រើរលូន
  • រចនា មុខងារប្រើប្រាស់ងាយនិងពន្លឿនចូលរួម
  • សហការណ៍ ដោយមានរបៀបរៀបចំកូដល្អលើគម្រោងបច្ចេកទេស

មូលដ្ឋានគំនិតអភិវឌ្ឍហ្គេមដែលអ្នកយល់ដឹង

  • ប្រព័ន្ធពេលពិត៖ លំហូរហ្គេម ការគ្រប់គ្រងកម្រិតវីដេអូ និងប្រសិទ្ធភាព
  • ស្ថាបត្យកម្មលើគ្រប់ព្រឹត្តិការណ៍៖ ប្រព័ន្ធបំបែក និងការផ្ញើសារ
  • គ្រប់គ្រងស្ថានភាព៖ ការដោះស្រាយទិន្នន័យស្មុគស្មាញ និងជីវប្រវត្តិជាប្រព័ន្ធ
  • កម្មវិធីអនាមិកអ្នកប្រើ៖ រូបក្រាហ្វិក Canvas និងរចនាបទចំរូងប្រតិបត្តិការណ៍
  • ទ្រឹស្តីរចនាហ្គេម៖ ចិត្ដវិទ្យាអ្នកលេង និងយានយន្តចូលរួម

កម្រិតបន្ទាប់៖ អ្នកត្រៀមខ្លួនរួចរាល់ក្នុងការស្វែងយល់គម្រោងហ្គេមកម្រិតខ្ពស់, រូប 3D, ប្រព័ន្ធលេងច្រើននាក់ ឬប្តូរចូលជាតំណាងអភិវឌ្ឍហ្គេមវិជ្ជាជីវៈ!

🌟 សមិទ្ធផល៖ អ្នកបានបញ្ចប់ដំណើរការអភិវឌ្ឍហ្គេមពេញលេញ និងបានបង្កើតបទពិសោធអន្តរកម្មគុណភាពវិជ្ជាជីវៈពីការពិចារណាចាប់ផ្តើម!

សូមស្វាគមន៍មកកាន់សហគមន៍អភិវឌ្ឍហ្គេម! 🎮

챌린지 GitHub Copilot Agent 🚀

ប្រើរបៀប Agent ដើម្បីបញ្ចប់រង្វាន់ខាងក្រោម៖

បរិយាយ៖ បន្ថែមប្រព័ន្ធកម្រិតដំណើរការជាមួយការលំបាកតែខ្ពស់និងមុខងារបូណាស់។

សំណើ៖ បង្កើតប្រព័ន្ធហ្គេមអាកាសពហុកម្រិតដែលក្នុងមួយកម្រិតមានហ្គេមសម្លាប់ផ្ទៃពហុជាមួយល្បឿននិងសុខភាពសិប្បនិម្មិតកាន់តែខ្ពស់។ បន្ថែមប៊ិចពិន្ទុដែលកើនឡើងជាមួយកម្រិតនីមួយៗ និងអនុវត្តភាគរយថាមពល (បែបបាញ់លឿន ឬជ័រពារ) ដែលបង្ហាញឆ្ងាយពីការបាញ់រំខានពេលសម្លាប់សត្រូវ។ រួមបញ្ចូលរង្វាន់បញ្ចប់កម្រិត និងបង្ហាញកម្រិតបច្ចុប្បន្ននៅលើអេក្រង់ជាមួយពិន្ទុ និងជីវិតដែលមានស្រាប់។

សូមស្វែងយល់បន្ថែមពី agent mode នៅទីនេះ។

🚀 បញ្ហាបង្កើតប្រែប្រួលជាតម្រូវការជាជម្រើស

បន្ថែមសម្លេងទៅក្នុងហ្គេមរបស់អ្នក៖ បង្កើនបទពិសោធហ្គេមដោយអនុវត្តសម្លេង! គិតលើការបន្ថែមសម្លេងសម្រាប់៖

  • បាញ់ឡាស៊ែរ ពេលអ្នកលេងបាញ់
  • ការបញ្ចេញសត្រូវ ពេលយន្តហោះសត្រូវត្រូវបានបំផ្លាញ
  • កម្រាលទ្រង់ ពេលអ្នកលេងទទួលរងការជាកំលាំង
  • តន្ត្រីឈ្នះ ពេលហ្គេមទទួលបានជ័យជម្នះ
  • សម្លេងចាញ់ ពេលហ្គេមបរាជ័យ

ឧទាហរណ៍អនុវត្តសម្លេង៖

// បង្កើតវត្ថុសំឡេង
const laserSound = new Audio('assets/laser.wav');
const explosionSound = new Audio('assets/explosion.wav');

// ចាក់សំឡេងនៅពេលមានព្រឹត្តិការណ៍ក្នុងហ្គេម
function playLaserSound() {
  laserSound.currentTime = 0; // កំណត់ឡើងវិញទៅចាប់ផ្តើម
  laserSound.play();
}

អ្វីដែលអ្នកត្រូវដឹង៖

  • បង្កើត អូឌីយោobjects សម្រាប់សម្លេងផ្សេងៗ
  • កំណត់ឡើងវិញ នៃcurrentTime ដើម្បីអនុញ្ញាតិឱ្យមានសម្លេងបាញ់លឿន
  • គ្រប់គ្រង គោលនយោបាយ autoplay របស់កម្មវិធីរុករកដោយបញ្ចេញសម្លេងតាមការប៉ះអ្នកប្រើ
  • ធ្វើការគ្រប់គ្រង ពហុភាព និងពេលវេលាសម្រាប់បទពិសោធហ្គេមល្អប្រសើរ

💡 ធនធានរៀន៖ ស្វែងយល់បន្ថែមពី audio sandbox សម្រាប់ការអនុវត្តសម្លេងនៅក្នុងហ្គេម JavaScript ។

ការប្រលងបន្ទាប់រៀន

ការប្រលងបន្ទាប់រៀន

ការត្រួតពិនិត្យ និងរៀនដោយខ្លួនឯង

ភារកិច្ចរបស់អ្នកគឺបង្កើតហ្គេមលក់ថ្មីមួយ ដូច្នេះសូមស្វែងរកហ្គេមគួរឱ្យចាប់អារម្មណ៍ខាងក្រៅដើម្បីមើលថាហ្គេមប្រភេទណាដែលអ្នកអាចសង់បាន។

បេសកកម្ម

សង់ហ្គេមលក់មួយ


ការព្រមាន
ឯកសារនេះត្រូវបានបកប្រែដោយប្រើសេវាកម្មបកប្រែកម្មវិធី AI Co-op Translator។ ទោះបីយើងខិតខំសំរាប់ភាពត្រឹមត្រូវក្តីក៏ដោយ សូមចង់បានចំណាំថា ការបកប្រែដោយស្វយ័តអាចមានកំហុស ឬភាពមិនត្រឹមត្រូវ។ ឯកសារដើមជាភាសាដែលមានដើមគួរត្រូវបានយកម៉ោងថា ជាផ្លូវការបំផុត។ សំរាប់ព័ត៌មានសំខាន់ៗ វាជាការណែនាំឱ្យប្រើប្រាស់ការបកប្រែដោយអ្នកជំនាញរូបិយវត្ថុ។ យើងមិនមានជំងឺខ្វះខាតណាមួយចំពោះការយល់ច្រឡំ ឬការបកស្រាយខុសពីការប្រើប្រាស់ការបកប្រែនេះឡើយ។