Java ဖြင့် Game အသေးစားများ ရေးသားခြင်း

အားလုံးမင်္ဂလာပါ။ ကဲ ရှည်ရှည်ဝေးဝေး တော့ ပြောမနေတော့ဘူး။ စလိုက်ရအောင်။

Game သဘောတရားကို ဖွင့်ဆိုကြည့်ရင် 3D game မှမဟုတ်ပါဘူး။ CMD(Command Prompt) ထဲမှာ Roll a Dice ကို လုပ်တဲ့ program ကော ၊ argument ပေးပြီး yes no ပေါ်မူတည်ပြီး result ထုတ်ပေးတဲ့ program ကော game ထဲမှာ အကျံုး ၀င်ပါတယ်။ ဒါကြောင့် ဒီလို Command Game လေးတွေအရင်ရေးဖို့ အကြံပေးလိုပါတယ်။ မဟုတ်ပါဘူး။ DOS game လေးတွေရေးတတ်ပါတယ်။ GUI game ကိုမှ ရေးချင်သပဆိုရင်တော့ …. ကဲ ကျနော်လုပ်ထားတာလေးတွေပြောမယ်။ ဒီlevel မှာ ကျနော်က ခင်ဗျားကို java နဲ့ programming ကောင်းကောင်းရေးတတ်တယ်လို့ ယူဆပါတယ်။

ကဲ Thread နဲ့စဖွင့်လိုက်ရအောင်။  Thread ဆိုတာ ဥပမာပြောရရင် စားပွဲထိုး တစ်ယောက်ရဲ ့တာဝန် နဲ့တူပါတယ်။ စားပွဲထိုးဆိုတာ သာမန် လဘ္ကရည်ဆိုင်အဆင့်မဟုတ်ပါဘူး။ ဧည့်သည်တွေ ရာချီပြီးလာတဲ့ စားသောက်ဆိုင်တစ်ခုမှာလုပ်နေတဲ့လူပါ။ သူ့ မှာ ဧည့်သည်တစ်ယောက်မက ဆီကနေ အမျိုးမျိုး အော်ဒါတွေကို လက်ခံရပါတယ်။ အဲ့အော်ဒါကို သူက မီးဖိုထဲကို အသိပေးရတယ်။ တခါ အသစ်ဝင်လာတဲ့ဧည့်သည်အတွက် နေရာ ချ၊ ရေချ၊ အော်ဒါကောက် စတာတွေလုပ်ရတယ်။ တခါ တချို ့ဆိုင်တွေမှာဆို အချိုပွဲ တို့ ယမကာတို့ကို စားပွဲထိုးကိုယ်တိုင်ထုတ်ရတာရှိတော့ အဲ့ဒါမျိုးတွေလည်းလုပ်ရတယ်။ ဟင်းပွဲထွက်လာရင်လည်း မှာထားတဲ့ဝိုင်းကို ရောက်အောင် ဂရုစိုက်ရပြန်တယ်။ အဲ့ဒါကြောင့်သူ့မှာ same time မှာဘဲ လုပ်စရာတွေ တပုံချည်းရှိတယ် ။ အဲ့လုပ်စရာတွေကို သူဟာ multitasking မလုပ်နိုင်တဲ့အတွက် သူ့အစီအစဉ်နဲ့သူ စနစ်တကျ လုပ်နိုင်မှသာ သူဟာ လုပ်ငန်းလည်ပတ်နိုင်မှာပေါ့။ ဒါပေမယ့် Computer မှာတော့ သင့်processor ကို စားပွဲထိုးလို့မြင်ကြည့်လိုက်ရင် သူဟာ စားပွဲထိုးထက်သာတာ၊ ဥပမာ သင်ဟာ ဖိုင်တစ်ခုကို ဒေါင်းနေချိန်မှာ ရုပ်ရှင်ကြည့်နေတာမျိုး အစရှိတဲ့ Tasks တွေကို တပြိုင်ထဲလုပ်နေတာကို သတိပြုမိမှာပါ။ Game မှာလည်း လွယ်လွယ်ပြောရရင် နောက်ခံ background ရှိတယ်။ လှုပ်နေမှာလား၊ user input ပေါ်မူတည်ပြီး ရွေ ့ပေးရမှာလား။ တခါ bgsound ဆိုလည်း ဘယ်အခြေအနေအတွက် ဘယ်အသံဆိုတာ ပြောင်းလဲပေးရမယ်လေ။ အဲ့လို အလုပ်တွေအများကြီးကို တစ်ချိန်ထဲမှာ လုပ်နေတာကို java မှာက thread တွေ run နေတယ်လို့ ခေါ်တာပါ။

Thread သုံးဖို့အတွက်က Thread Class ကို extends လုပ်တာဘဲဖြစ်ဖြစ် Runnable Interface ကို Implements လုပ်တာဘဲဖြစ်ဖြစ် သုံးလို့ရပါတယ်။အသေးစိတ်ကိုတော့ Java Thread ဆိုပြီး ဖတ်ကြည့်ရင်တွေ့နိုင်ပါတယ်။ ဘာလို့ဆို အဲ့လောက်လိုက်ပြောရရင် Java Programming ဘက်ကို ပြန်ရောက်သွားပြီး ကာလ ကဆုံးမှာမဟုတ်တော့ဘူးလေ။…..

အဲ့တော့ Thread ဆိုတာ simultaneous tasks တွေဆိုတာသိရင် game တွေမှာဘာကြောင့် Thread ကိုသုံးလဲဆိုတာ ပြောဖို့လိုမယ်မထင်ပါဘူး။ အဲ တခြား language တွေဖြစ်တဲ့ VB တို့မှာတော့ Thread အစား object တွေကို Timer နဲ့ အလုပ်တွေခိုင်းကြတယ်။ Java မှာတော့ Thread က အသက်ပါ။ ကဲပြီးတော့ Thread ရဲဲ ့ အသက်ဖြစ်တဲ့ Sleep(Long MilliSecond) function အကြောင်းပြောအုံးမယ်။ Game တွေမှာ Thread တွေကို အမြဲတမ်း မ run ခိုင်းပါဘူးဗျာ။ Thread တစ်ခုဟာ သူ့အလုပ်ပြီးသွားရင် ခဏနားရပါတယ်။ ဥပမာ…… ရန်သူကိုရွေ ့စေတဲ့ Thread ကို ရန်သူသေသွားရင် အိပ်ခိုင်းထားပြီး နောက်ထပ်ရန်သူ အသစ်ရဲ ့ Thread ကိုခေါ်… တခါ ခုနက ရန်သူကို ပြန်ခေါ်မယ်ဆိုရင် အိပ်နေတဲ့ကောင်ကို disturb() နဲ့ ပြန်နှိုး ဒီလိုလုပ်ရတာပါ။ ဒါကြောင့် Thread.sleep(long millisecond) function က Thread ကို ခဏအိပ်ခိုင်းတယ်လို့ မှတ်ပေါ့ဗျာ။ တစ်ခါ Thread တွေ အချင်းချင်း arguement တောင်းတာတွေရှိတယ်။ ဥပမာ။ game ထဲမှာ အသေးစားရန်သူလေးတွေန ဲ့ ဆရာကြီး ရှိတယ်ဆိုပါတော့။ အကယ်၍သာ အဲ့ Thread တွေအကုန်လုံးကို ပေး run လိုက်ရင် stage စထဲက ဆရာကြီးက ထွက်လာပြီး ဘယ်ပျော်ဖို့ကောင်းတော့မလဲ။ ဒါကြောင့် ပထမ Thread က သူအလုပ်လုပ်နေတုန်း ဒုတိယ Thread ကို lock လုပ်ခိုင်းထားရတယ်။ သူအလုပ်ပြီးတာနဲ့ notify() function ဒါမှမဟုတ် သူ့ကို အများကြီးက စောင့်နေမယ်ဆိုရင် notifyall() function နဲ့ အသိပေးရတယ်။ အဲ့လိုအသိပေးတဲ့အခါ method တိုင်းကတော့ မသိပါဘူး။ synchronized လုပ်ထား တနည်းအားဖြင့် စောင့်ခိုင်းထားတဲ့ method တွေကဘဲ သိမှာပါ။ ဒါကြောင့် synchronized ဆိုတာ လွယ်လွယ်ပြောရရင်တော့ lock ချတဲ့အဓိပ္ပါယ်ပါ။ Java Thread အကြောင်းဖတ်ဖြစ်ရင် synchronized ပါသိလာပါလိမ့်မယ်။ ဘာလို့ဆို သူကလည်း Thread ရ ဲ့အသက်ကိုး။ ကဲ နည်းနည်းတော့ အိမ်စာပေးအုံးမှ။ သင် Thread ဖတ်ပြီးရင်တော့ တစ်ခု လုပ်စေချင်တယ်။ Thread သုံးခုလောက်ဆောက်ပါ။ တစ်ခုဆီမှာ jlabel တစ်ခုဆီထည့်ပြီး sleep() အချိန်တွေ မတူအောင်ထည့်၊ looping ပါတ်ပြီး jlabel ရဲ ့ Postion (x or y) ရွှေ ့ကြည့်စမ်းပါ။ ဖြစ်နိုင်သလား။ ဖြစ်ခဲ့ရင်တော့ သင့်အတွက် ပထမဆုံး animation တစ်ခု ရေးတတ်သွားပါပြီ။

ဒါနဲ့ coding လေးတော့ နည်းနည်း ထည့်ပေးလိုက်မယ်။..

public class MyThread extends Thread {

    public void run() {

        System.out.println("Do something cool here.");

    }

}

ဆိုပြီး class ဆောက်လိုက်တာနဲ့ အဲ့ class က Thread ဖြစ်သွားတော့ run() ကို တိုက်ရိုက်ခေါ်လို့ရပြီ။

Thread ကို စ run မယ်ဆိုရင်

main() ထဲမှာ

Thread myThread = new MyThread();
myThread.start();

ဆိုပြီးခေါ်ရတာကြောင့် start() ကိုခေါ်တာနဲ့ run() ထဲကိုသွားအလုပ်လုပ်တာမို့ပါ။ ဒါကတော့ Thread class

ကိုသုံးတဲ့စတိုင်။ ဒါမှမဟုတ် Runnable Interface သုံးလဲ အတူတူဘဲ။ ကျနော်ကတော့ Thread ကို
inner class နဲ့ သုံးတာများတယ်။
အောက်က class ကို run ကြည့်လိုက်ပါ။

public class MyFristThread{
    public static void main(String args[]){
        Thread myThread=new Thread(new Runnable(){
            public void run(){
                int i=100;
                while(i>0){
                    System.out.println("Value of i"+i);
                    i--;
                try{
                    Thread.sleep(1000);//sleep for 1 second
                }
                catch(Exception e){}
                }
                }
        });
    myThread.start();
    }
}

ဒီ program ကို run လိုက်ရင် 100 ကနေ 1 ထိကို 1 second ကို 1လုံးစီ လျှော့ပေးသွားမှာပါ။
ဒီprogram ကိုကြည့်ရင် Thread ကိုဘာကြောင့် သုံးဖို့လိုလဲ သိနိုင်ပါတယ်။ အချိန်ကို control လုပ်ပြီး အလုပ်တွေခိုင်းနိုင်တယ်လေ။
မယုံရင် sleep() တန်ဖိုးကို 2000 3000 ဒါမှမဟုတ် 500 100 ပြောင်းကြည့်။ ဒါကြောင့် Thread ထဲမှာ looping ရေးနိုင်ရင် Image
တွေကို ရွှေ ့လို့ရပါတယ်။jlabel ကိုလဲ ရွှေ ့ကြည့်စမ်းပါဦးဗျာ။

7 Replies to “Java ဖြင့် Game အသေးစားများ ရေးသားခြင်း”

  1. အဆင်ပြေရင် sample code လေးတွေပါ ထည့်ပေးပါလား။ အခုက စာတွေပဲဆိုတော့ သိပ်ပြီးတော့ မမြင်ရဘူး။ code တွေ ပါရင်တော့ ပြည့်စုံသွားပြီ။ စားပွဲထိုး ဥပမာလေး သဘောကျတယ်။ =)

    1. ဟုတ်တယ်။ thread ထက်စာရင် timer က ပိုအဆင်ပြေတယ်။ java မှာ timer ဘယ်လို သုံးလဲတော့ မသိ။ ရှိမရှိလည်း မသိ။ java ဆိုရင် ကော်ဖီပဲသိတယ်။ objective-c မှာတော့ thread မသုံးဘူး။ timer ကို အဓိက သုံးတယ်။

  2. ဟုတ်ပါတယ် … Java မှာ Timer မရှိခဲ့လို့ပါ။ jdk 1.4 နောက်ပိုင်းက စပြီး Timer ပါလာပေမယ့် သူကလည်း background Thread တစ်ခုဆိုတော့ Thread နဲ့ဘာမှမကွာပါဘူး။ ဒါကြောင့်ပါ

  3. Hello Everyone!
    I am busy with my works and I cant still have a chance to continue my writting! But, I promise that I will come back soon with “Screen Processing and Graphics Monitoring in Java”.Thanks!

Leave a Reply

Your email address will not be published. Required fields are marked *