# အခန်းတစ်ခုကို အဖြစ်အပျက်များ အသုံးပြု၍ ဂိမ်းတစ်ခု ဖန်တီးခြင်း တစ်ခါတစ်ရံမှာ သင်ဘတ်တန်ကိုနှိပ်တဲ့အခါ၊ သို့မဟုတ် စာသားဘောက်စ်ထဲမှာ ရိုက်ထည့်တဲ့အခါ ဝက်ဘ်ဆိုက်တွေက ဘယ်လိုသိနိုင်သလဲဆိုတာ စဉ်းစားဖူးပါသလား? ဒါက အဖြစ်အပျက်အခြေခံပရိုဂရမ်ရေးခြင်းရဲ့ မေတ္တာပါပဲ! ဒီအရေးကြီးတဲ့ကျွမ်းကျင်မှုကို သင်ယူဖို့အကောင်းဆုံးနည်းလမ်းကတော့ အသုံးဝင်တဲ့အရာတစ်ခုကို ဖန်တီးခြင်းဖြစ်ပါတယ် - သင်ရိုက်တဲ့အတိုင်းတုံ့ပြန်တဲ့ ရိုက်နှုန်းစမ်းသပ်ဂိမ်းတစ်ခု။ သင် JavaScript ကုဒ်နဲ့ ဝက်ဘ်ဘရောက်ဇာတွေ "ပြောဆို"တဲ့နည်းလမ်းကို ကိုယ်တိုင်တွေ့မြင်ရမှာပါ။ သင်နှိပ်တဲ့အခါ၊ ရိုက်တဲ့အခါ၊ သို့မဟုတ် မောက်စ်ကိုရွှေ့တဲ့အခါတိုင်း၊ ဘရောက်ဇာက သင့်ကုဒ်ကို "အဖြစ်အပျက်"လို့ခေါ်တဲ့ သတင်းစကားလေးတွေ ပို့နေပါတယ်၊ သင်ကတော့ အဲဒီအဖြစ်အပျက်တွေကို ဘယ်လိုတုံ့ပြန်မလဲဆိုတာ ဆုံးဖြတ်ရမှာပါ! ဒီနေရာမှာပြီးဆုံးတဲ့အခါမှာတော့ သင်ရိုက်နှုန်းနဲ့ တိကျမှုကို ထိန်းသိမ်းတဲ့ တကယ့်ရိုက်နှုန်းဂိမ်းတစ်ခုကို ဖန်တီးပြီးဖြစ်ပါလိမ့်မယ်။ အရေးကြီးတာကတော့ သင်အသုံးပြုဖူးတဲ့ ဝက်ဘ်ဆိုက်တိုင်းရဲ့ အဓိကအခြေခံအယူအဆတွေကို နားလည်သွားမှာပါ။ အခုစလိုက်ကြရအောင်! ## မိန့်ခွန်းမပြောမီ စမ်းမေးခွန်း [မိန့်ခွန်းမပြောမီ စမ်းမေးခွန်း](https://ff-quizzes.netlify.app/web/quiz/21) ## အဖြစ်အပျက်အခြေခံပရိုဂရမ်ရေးခြင်း သင်အကြိုက်ဆုံး app သို့မဟုတ် ဝက်ဘ်ဆိုက်ကို စဉ်းစားကြည့်ပါ - ဘာတွေက အဲဒီ app ကို အသက်ရှင်နေပြီး တုံ့ပြန်နိုင်တဲ့အတိုင်း ခံစားရစေသလဲ? အဲဒါက သင်လုပ်တဲ့အရာကို ဘယ်လိုတုံ့ပြန်တယ်ဆိုတာပဲ ဖြစ်ပါတယ်! တစ်ခါနှိပ်ခြင်း၊ ရိုက်ခြင်း၊ လွှဲခြင်း၊ သို့မဟုတ် စာရိုက်ခြင်းတိုင်းက "အဖြစ်အပျက်"လို့ခေါ်တဲ့အရာကို ဖန်တီးပေးပြီး အဲဒီမှာပဲ ဝက်ဘ်ဖွံ့ဖြိုးတိုးတက်မှုရဲ့ အံ့ဩဖွယ်အရာတွေ ဖြစ်ပေါ်လာပါတယ်။ ဝက်ဘ်အတွက် ပရိုဂရမ်ရေးခြင်းကို စိတ်ဝင်စားစရာကောင်းတဲ့အချက်ကတော့ - တစ်စုံတစ်ခုကို ဘယ်အချိန်မှာနှိပ်မလဲ၊ စာသားဘောက်စ်ထဲမှာ စတင်ရိုက်မလဲဆိုတာကို ဘယ်တော့မှ မသိနိုင်တာပါပဲ။ သူတို့က ချက်ချင်းနှိပ်နိုင်တယ်၊ မိနစ် ၅ စောင့်နိုင်တယ်၊ သို့မဟုတ် ဘယ်တော့မှ မနှိပ်နိုင်ပါဘူး! ဒီလို မသေချာမှုကြောင့် ကုဒ်ရေးတဲ့နည်းလမ်းကို ကွဲပြားစွာ စဉ်းစားဖို့လိုပါတယ်။ အစားမှာတော့ အပေါ်ကနေ အောက်ကို အဆင့်လိုက်လုပ်တဲ့ ကုဒ်ရေးခြင်းမဟုတ်ဘဲ တစ်စုံတစ်ခုဖြစ်လာဖို့ စောင့်နေတဲ့ ကုဒ်ကိုရေးပါတယ်။ ဒါဟာ ၁၈၀၀ ခုနှစ်တွေမှာ တယ်လီဂရပ်စက်ကို စောင့်နေတဲ့ operator တွေလိုပဲ ဖြစ်ပါတယ်၊ ဝါယာကြိုးက message တစ်ခုရောက်လာတဲ့အခါမှာ တုံ့ပြန်ဖို့ အဆင်သင့်ဖြစ်နေပါတယ်။ "အဖြစ်အပျက်"ဆိုတာ တိတိကျကျ ဘာလဲ? ရိုးရိုးပြောရရင်တော့ အဲဒါက တစ်စုံတစ်ခုဖြစ်လာတာပါပဲ! သင်ဘတ်တန်ကိုနှိပ်တဲ့အခါ - အဲဒါက အဖြစ်အပျက်ပါပဲ။ သင်စာလုံးတစ်လုံးကို ရိုက်တဲ့အခါ - အဲဒါက အဖြစ်အပျက်ပါပဲ။ သင်မောက်စ်ကိုရွှေ့တဲ့အခါ - အဲဒါက အခြားအဖြစ်အပျက်ပါပဲ။ အဖြစ်အပျက်အခြေခံပရိုဂရမ်ရေးခြင်းက သင့်ကုဒ်ကို နားထောင်ပြီး တုံ့ပြန်ဖို့ အဆင်သင့်ဖြစ်စေပါတယ်။ **အဖြစ်အပျက်နားထောင်သူများ**လို့ခေါ်တဲ့ အထူးလုပ်ဆောင်ချက်တွေကို ဖန်တီးပြီး တစ်စုံတစ်ခုဖြစ်လာဖို့ စောင့်နေပြီး အဲဒါဖြစ်လာတဲ့အခါမှာ လုပ်ဆောင်ဖို့ အဆင်သင့်ဖြစ်ပါတယ်။ အဖြစ်အပျက်နားထောင်သူတွေကို သင့်ကုဒ်ရဲ့ doorbell လို့ထင်ပါ။ သင် doorbell ကို (`addEventListener()`) တပ်ဆင်ပြီး 'click' သို့မဟုတ် 'keypress'လို အသံကို နားထောင်ဖို့ ပြောပြီး တစ်စုံတစ်ယောက် doorbell ကိုနှိပ်တဲ့အခါ ဘာလုပ်မလဲဆိုတာ သတ်မှတ်ပေးပါတယ် (သင့်ရဲ့ custom function)။ **အဖြစ်အပျက်နားထောင်သူတွေ ဘယ်လိုအလုပ်လုပ်သလဲဆိုတာ:** - **နားထောင်တယ်** - အသုံးပြုသူရဲ့ click, keystroke, သို့မဟုတ် mouse movement လို အရေးပါတဲ့ လှုပ်ရှားမှုတွေကို - **လုပ်ဆောင်တယ်** - သတ်မှတ်ထားတဲ့ အဖြစ်အပျက်ဖြစ်လာတဲ့အခါ သင့် custom code ကို - **တုံ့ပြန်တယ်** - အသုံးပြုသူရဲ့ interaction တွေကို ချက်ချင်းတုံ့ပြန်ပြီး seamless အတွေ့အကြုံကို ဖန်တီးပေးတယ် - **ကိုင်တွယ်တယ်** - တစ်ခုတည်းသော element ပေါ်မှာ အဖြစ်အပျက်အမျိုးမျိုးကို နားထောင်ပြီး handle လုပ်နိုင်တယ် > **NOTE:** အဖြစ်အပျက်နားထောင်သူတွေကို ဖန်တီးဖို့ နည်းလမ်းအမျိုးမျိုးရှိတယ်ဆိုတာ အထူးသတိပြုပါ။ သင် anonymous functions ကို အသုံးပြုနိုင်တယ်၊ သို့မဟုတ် named functions ဖန်တီးနိုင်တယ်။ `click` property ကို သတ်မှတ်ခြင်းလို shortcut တွေကို အသုံးပြုနိုင်တယ်၊ သို့မဟုတ် `addEventListener()` ကို အသုံးပြုနိုင်တယ်။ ကျွန်တော်တို့ရဲ့လေ့ကျင့်မှုမှာ `addEventListener()` နဲ့ anonymous functions ကို အဓိကထားပြီး အလုပ်လုပ်မှာဖြစ်ပါတယ်၊ အဲဒါက web developers တွေ အများဆုံးအသုံးပြုတဲ့နည်းလမ်းဖြစ်ပါတယ်။ `addEventListener()`က အဖြစ်အပျက်အားလုံးအတွက် အလုပ်လုပ်နိုင်ပြီး အဖြစ်အပျက်နာမည်ကို parameter အနေနဲ့ပေးနိုင်ပါတယ်။ ### အများဆုံးအသုံးပြုတဲ့ အဖြစ်အပျက်များ ဝက်ဘ်ဘရောက်ဇာတွေက သင်နားထောင်နိုင်တဲ့ အဖြစ်အပျက်အမျိုးမျိုးကို ပေးထားပေမယ့် အများဆုံး interactive application တွေက အရေးပါတဲ့ အဖြစ်အပျက်အနည်းငယ်ကိုပဲ အားထားပါတယ်။ ဒီအခြေခံအဖြစ်အပျက်တွေကို နားလည်ခြင်းက sophisticated user interaction တွေကို ဖန်တီးဖို့ အခြေခံပေးနိုင်ပါတယ်။ application တစ်ခုကို ဖန်တီးတဲ့အခါ အသုံးပြုသူက page ပေါ်မှာလုပ်တဲ့အရာတိုင်းက အဖြစ်အပျက်တစ်ခုကို ဖန်တီးပေးပြီး သင့်ရဲ့ design ကို အသုံးပြုသူအလိုအတိုင်း ဖြစ်စေဖို့ အခွင့်အာဏာများစွာပေးပါတယ်။ ကံကောင်းစွာ၊ သင်အများဆုံးအဖြစ်အပျက်အနည်းငယ်ကိုပဲ လိုအပ်ပါလိမ့်မယ်။ ဒီမှာ အများဆုံးအသုံးပြုတဲ့အဖြစ်အပျက်အချို့ကို ဖော်ပြထားပါတယ် (ကျွန်တော်တို့ရဲ့ဂိမ်းကို ဖန်တီးတဲ့အခါ အသုံးပြုမယ့်အဖြစ်အပျက် ၂ ခုကိုပါဝင်ပါတယ်)။ | အဖြစ်အပျက် | ဖော်ပြချက် | အသုံးပြုမှုများ | |-------------|------------|------------------| | `click` | အသုံးပြုသူက တစ်ခုခုကိုနှိပ်တယ် | Buttons, links, interactive elements | | `contextmenu` | အသုံးပြုသူက ညာဘက်မောက်စ်ကိုနှိပ်တယ် | Custom right-click menus | | `select` | အသုံးပြုသူက စာသားတစ်ချို့ကို ရွေးချယ်တယ် | Text editing, copy operations | | `input` | အသုံးပြုသူက စာသားတစ်ခုခုကို ရိုက်ထည့်တယ် | Form validation, real-time search | **ဒီအဖြစ်အပျက်အမျိုးအစားတွေကို နားလည်ခြင်း:** - **Triggers** - အသုံးပြုသူတွေ page ပေါ်မှာ element တစ်ခုခုကို လှုပ်ရှားတဲ့အခါ - **Provides** - အသုံးပြုသူရဲ့ လှုပ်ရှားမှုအကြောင်းကို အဖြစ်အပျက် object တွေကနေ အသေးစိတ်အချက်အလက်ပေးတယ် - **Enables** - responsive, interactive web applications ဖန်တီးနိုင်စေတယ် - **Works** - ဘရောက်ဇာနဲ့ device အမျိုးမျိုးမှာ တူညီစွာ အလုပ်လုပ်တယ် ## ဂိမ်းကို ဖန်တီးခြင်း အခုတော့ အဖြစ်အပျက်တွေ ဘယ်လိုအလုပ်လုပ်တယ်ဆိုတာ နားလည်ပြီးသားဖြစ်တဲ့အတွက် အဲဒီအသိကို အသုံးချပြီး အသုံးဝင်တဲ့အရာတစ်ခုကို ဖန်တီးကြရအောင်။ JavaScript ရဲ့ အဖြစ်အပျက်ကို handle လုပ်တဲ့နည်းလမ်းကို ပြသရင်း developer တွေအတွက် အရေးကြီးတဲ့ကျွမ်းကျင်မှုတစ်ခုကို ဖွံ့ဖြိုးစေမယ့် ရိုက်နှုန်းစမ်းသပ်ဂိမ်းတစ်ခုကို ဖန်တီးကြရအောင်။ JavaScript ရဲ့ အဖြစ်အပျက်တွေ ဘယ်လိုအလုပ်လုပ်တယ်ဆိုတာကို ရှာဖွေဖို့ ဂိမ်းတစ်ခုကို ဖန်တီးကြရအောင်။ ဂိမ်းက player ရဲ့ ရိုက်နှုန်းကျွမ်းကျင်မှုကို စမ်းသပ်မှာဖြစ်ပြီး developer တွေအတွက် အရေးမကြီးတဲ့ကျွမ်းကျင်မှုတစ်ခုဖြစ်ပါတယ်။ စိတ်ဝင်စားစရာ fun fact - QWERTY keyboard layout ကို ၁၈၇၀ ခုနှစ်တွေမှာ typewriter တွေအတွက် ဒီဇိုင်းဆွဲခဲ့တာဖြစ်ပြီး - ရိုက်နှုန်းကျွမ်းကျင်မှုက programmer တွေအတွက် အခုတိုင် အရေးကြီးနေဆဲပါပဲ! ဂိမ်းရဲ့ အထွေထွေစဉ်ဆက်မှုက ဒီလိုဖြစ်ပါတယ်: ```mermaid flowchart TD A[Player clicks Start] --> B[Random quote displays] B --> C[Player types in textbox] C --> D{Word complete?} D -->|Yes| E[Highlight next word] D -->|No| F{Correct so far?} F -->|Yes| G[Keep normal styling] F -->|No| H[Show error styling] E --> I{Quote complete?} I -->|No| C I -->|Yes| J[Show success message with time] G --> C H --> C ``` **ဂိမ်းက ဘယ်လိုအလုပ်လုပ်မလဲဆိုတာ:** - **စတင်တယ်** - player က start button ကိုနှိပ်တဲ့အခါ random quote ကို ပြသတယ် - **ထိန်းသိမ်းတယ်** - player ရဲ့ ရိုက်နှုန်းတိုးတက်မှုကို စကားလုံးတစ်လုံးချင်းစီ real-time မှာ - **အလင်းပေးတယ်** - player ရဲ့ အာရုံစိုက်မှုကို ဦးတည်စေဖို့ current word ကို highlight လုပ်တယ် - **visual feedback ပေးတယ်** - ရိုက်နှုန်းအမှားတွေကို ချက်ချင်းပြသတယ် - **တွက်ချက်တယ်** - quote ပြီးဆုံးတဲ့အခါ စုစုပေါင်းအချိန်ကို ပြသတယ် ဂိမ်းကို ဖန်တီးပြီး အဖြစ်အပျက်တွေကို သင်ယူကြရအောင်! ### ဖိုင်ဖွဲ့စည်းမှု ကုဒ်ရေးစဉ်မှာ အစကတည်းက ဖိုင်ဖွဲ့စည်းမှုကို သန့်ရှင်းစွာထားခြင်းက နောက်ပိုင်းမှာ အခက်အခဲတွေကို ကာကွယ်ပေးပြီး သင့် project ကို ပရော်ဖက်ရှင်နယ်ဖြစ်စေပါတယ် 😊 ကျွန်တော်တို့က `index.html` ကို page structure အတွက်၊ `script.js` ကို ဂိမ်း logic အားလုံးအတွက်၊ `style.css` ကို အားလုံးကို လှပစေဖို့အတွက် အသုံးပြုမယ့် ဖိုင် ၃ ခုသာ simple အနေနဲ့ထားမှာပါ။ ဒီဟာက ဝက်ဘ်ရဲ့ အများဆုံးအခြေခံအရာတွေကို အားထားပါတယ်! **console သို့မဟုတ် terminal window ကိုဖွင့်ပြီး အောက်ပါ command ကိုထည့်ပါ:** ```bash # Linux or macOS mkdir typing-game && cd typing-game # Windows md typing-game && cd typing-game ``` **ဒီ command တွေက ဘာလုပ်တယ်ဆိုရင်:** - **directory အသစ်တစ်ခု ဖန်တီးတယ်** - `typing-game` လို့ခေါ်တဲ့ project ဖိုင်တွေအတွက် - **directory အသစ်ထဲကို အလိုအလျောက်သွားတယ်** - **သန့်ရှင်းတဲ့ workspace တစ်ခု ဖန်တီးပေးတယ်** - game development အတွက် **Visual Studio Code ကိုဖွင့်ပါ:** ```bash code . ``` **ဒီ command က:** - **Visual Studio Code ကို စတင်တယ်** - လက်ရှိ directory မှာ - **project folder ကို editor မှာ ဖွင့်တယ်** - **သင့်ရဲ့ development tools အားလုံးကို အသုံးပြုခွင့်ပေးတယ်** **Visual Studio Code မှာ folder ထဲကို ဖိုင် ၃ ခုထည့်ပါ:** - `index.html` - သင့်ဂိမ်းရဲ့ structure နဲ့ content ကိုပါဝင်တယ် - `script.js` - ဂိမ်း logic နဲ့ အဖြစ်အပျက်နားထောင်သူတွေကို handle လုပ်တယ် - `style.css` - visual appearance နဲ့ styling ကို သတ်မှတ်တယ် ## အသုံးပြုသူ interface ကို ဖန်တီးခြင်း အခုတော့ ဂိမ်းရဲ့ အားလုံးအလုပ်လုပ်မယ့် stage ကို ဖန်တီးကြရအောင်! ဒီဟာက spaceship ရဲ့ control panel ကို ဒီဇိုင်းဆွဲတာလိုမျိုးပါပဲ - player တွေလိုအပ်တဲ့အရာအားလုံးကို သူတို့မျှော်လင့်တဲ့နေရာမှာရှိအောင်လုပ်ရမယ်။ ရိုက်နှုန်းဂိမ်းကိုကစားတဲ့အခါ screen ပေါ်မှာ ဘာတွေမြင်ချင်မလဲဆိုတာကို စဉ်းစားကြည့်ပါ။ ကျွန်တော်တို့အတွက် လိုအပ်တာတွေက: | UI Element | ရည်ရွယ်ချက် | HTML Element | |------------|--------------|--------------| | Quote Display | ရိုက်ဖို့စာသားကို ပြသတယ် | `

` with `id="quote"` | | Message Area | status နဲ့ အောင်မြင်မှု message တွေကို ပြသတယ် | `

` with `id="message"` | | Text Input | player တွေ စာသားကို ရိုက်ထည့်တဲ့နေရာ | `` with `id="typed-value"` | | Start Button | ဂိမ်းကို စတင်စေတယ် | `