..စမ္းသပ္ၿခင္းၿဖစ္ေနလို႕ ကိုယ္ပိုင္းပိုစ္႕တဗုဒ္မွမပါဘူးခင္ဗ်ာ တဆင္႕ၿပန္ရွယ္တာမို႕ သီးခံအၾကံေပးက်ပါခင္ဗ်ာ ခ်မ္းေျမ့ပါေစ


လာေရာက္လည္ပတ္သူအားလံုးကိုေဗဒါအိုင္တီနည္းပညာစမ္းသပ္ ၿခင္းမွထူးေက်းဇူးတင္ရိွပါတယ္ခင္ ဗ်ာ



glitter-graphics.com
glitter-graphics.com

Saturday, July 20, 2013

Kalkules 1.9.0.19 Portable



ကၽြန္ေတာ္တို႔ Kalkules ဟာ universal scientific freeware calculator ေလးတစ္မ်ိဳးပဲျဖစ္ပါတယ္။ ကၽြန္ေတာ္တို႔ high school ေက်ာင္းသားေတြနဲ႔  university students ေတြအတြက္ အဆင္အေျပဆံုး အျမန္ဆံုး တြက္ခ်က္ေပးႏုိင္ပါလိမ္႔မယ္။ ကၽြန္ေတာ္အေရွ႕မွာ Calculators စုစည္းမွဳေလးေတြအျပင္ အျခားအျခားေသာ Calculators ေလးေတြကိုလည္း တင္ေပးခဲ႔ဘူးပါတယ္။ ေနာက္ပိုင္း ကၽြန္ေတာ္မျပန္ခင္မွာေတာ႔ ကၽြန္ေတာ္႔ဆီမွာ ရွိတဲ႔ ေကာင္ေလးေတြကိုစုၿပီး တင္ေပးခဲ႔ပါမယ္။ အခုေတာ႔ ဒီေကာင္ေလးက 4.4 MB ပဲရွိပါတယ္.။ ေအာက္မွာ ယူသြားလိုက္ပါဗ်ာ။
ကၽြန္ေတာ္ေအာက္မွာ ႏွစ္ေနရာခြဲတင္ေပးထားပါတယ္။ အဆင္ေျပမယ္႔လင္႔ခ္ေလး ကေနသာ ယူသြားလိုက္ပါဗ်ာ။ 


Kalkules 1.9.0.19  Portable



အားလံုးပဲအဆင္ေျပေပ်ာ္ရႊင္ႏိုင္ၾကပါေစ။ ေက်းဇူးတင္ပါတယ္ခင္ဗ်ာ။

အခမဲ႔ ျမန္မာျပည္TV ၾကည့္နိင္ပါျပီေနာ္

အကယ္ တစ္ကမၻာလံုးက Sports, music, news, movie, fun, Science, Cartoons, Networks, lifestyle, shopping စတဲ႔ TV ထုတ္လႊင့္မႈေတြဘဲၾကည့္မလား..ဒါမွမဟုတ္ အမိျမန္မာျပည္႔ကို အလြမ္းေျဖဖို႔ Myanmar International, Myanmar Entertainment မွာျမန္မာလိုေျပာျပီး အဂၤလိပ္လိုစာတန္းထားတဲ႔ ျမန္မာ TV လိုင္းေတြ ဘဲၾကည့္မလား. GOD TV လဲပါပါတယ္.စံုလင္လွတဲ႔ TVU player ေလးနဲ႔ မိတ္ဆက္ျပီး တင္ေပးလိုက္ပါတယ္ .. ျမန္မာလိုင္းကိုအလြယ္တကူရွိခ်င္ရင္ အေပၚက search box မွာ myanmar လို႔ေရးလိုက္တာနဲ႔ ျမန္မာျပည္ရဲ႔ လိုင္းႏွစ္လိုင္းကို ၾကည့္ရႈႏိုင္မွာျဖစ္ပါတယ္ဒီအျပင္ Channels ေတြအားလံုးအတြက္ ဘယ္အခ်ိန္မွာ ဘာလာမယ္ဆိုတာကို ကိုယ္႔ႏိုင္ငံရဲ႔အခ်ိန္နဲ႔ ကိုက္ျပီးေဖာ္ျပ ေပးထားပါတယ္ ..အားလံုးအဆင္ေျပေပ်ာ္ရႊင္ႏိုင္ပါေစလို႔မိတ္ဆက္ေပးလိုက္ပါတယ္
 .အခမဲ႔ၾကည့္ရမွာျဖစ္ပါတယ္....ျပီးေတာ့ Portable
 ေလးျဖစ္ပါတယ္..install စရာမလိုဘဲ ေအးေအးေဆးေဆးအသံုးျပဳႏိုင္ေၾကာင္းပါ။
DOWNLOAD TVU Player (Downloads times 1454)





မွတ္ခ်က္။ ျမန္မာျပည္သား တိုင္းရင္းသားမ်ား ၏ ဘာသာေရး၊ လူမွဳ႔ေရး၊ အလွဴအတန္း၊ ေမြးေန့၊ မ၈ၤလာပဲြမ်ားႏွင့္ ပဲြလမ္းသဘင္မ်ား ၊ တိုင္းရင္းသားမ်ား၏ ေန႔ထူးေန႔ျမတ္ပဲြမ်ား ၊သာေရး၊ နာေရး ကိစၥရပ္မ်ားအတြက္ မိမိ၏Website တြင္ ေၾကာ္ျငွာ အျဖစ္ ထည့္သြင္းေဖၚျပလိုပါက aunglaybc.blogspot.com@gmail.com သို႔ ေပးပို႔လာပါက ေၾကာ္ျငွာမ်ားကို အခမဲ့ ေဖၚျပေပးမည္ျဖစ္ေၾကာင္း အသိေပးအပ္ပါသည္။

Monday, July 15, 2013

အြန္လိုင္းေပၚမွာ ပိုက္ဆံရွာခ်င္သူမ်ားအတြက္


ဟုတ္ကဲ့ ကၽြန္ေတာ္တို႔ စီးပြားရွာခ်င္ၾကပါတယ္ ပိုက္ဆံရမယ့္ အလုပ္မ်ိဳးေတြ ကိုယ္စီကိုယ္စီလုပ္ခ်င္ၾကပါတယ္ အၿပင္မွာအလုပ္လုပ္တဲ့သူေတြလဲ ရွိၾကပါတယ္ ဒါေပမယ့္အခု ကၽြန္ေတာ္တို႔ လိုင္းေပၚမွာ အခ်ိန္ နာရီ၀က္ေလးေပးၿပီ ပိုက္ဆံ ရွာၾကမယ္ ကဲ စိတ္၀င္စားၾကတယ္ဟုတ္...စလိုက္ၾကမယ္ဗ်ာ အိုေတ..
အင္တာနက္ေပၚမွာ တစ္ေန႕ကို မိနစ္ 30 အခ်ိန္ေပးရံုနဲ႕ ေငြရွာတဲ့နည္းလမ္းေလး အားလံုးေသာေရႊျမန္မာတို႕အတြက္
ေရးသားေပးလုိက္ရပါတယ္ခင္ဗ်ာ..ဒီေနရာမယ္ က်ေနာ္အမွာစကားတစ္ခုေျပာလုိတာက ယခုနည္းသည္ က်ေနာ္ကိုယ္တိုင္စမ္းသပ္ၿပီး ရလာတဲ့ Result အေျခအေနကို စုစည္းတင္ျပထားျခင္းျဖစ္ပါတယ္..တစ္ခ်ိဳ႕က ေျပာပါမယ္ဒီေလာက္လြယ္ေနမွေတာ့ လူတိုင္းလုပ္ကုန္မွာေပါ့..ဒါေလာက္လုပ္ေနၾကမွေတာ့ ေငြေပးတဲ့ Company ေတြမြဲကုန္မွာေပ့ါ ဆိုၿပီးေတာ့ပါ…
ဟုတ္ပါတယ္ ယခုနည္းလမ္းဟာ ႏိုင္ငံျခားတိုင္းျပည္အခ်ိဳ႕မွာ ေခတ္စားေနပါၿပီ..က်ေနာ္တို႕ျမန္မာႏိုင္ငံမွာ
လဲ သိတဲ့သူေတြသိၾကပါတယ္..အခ်ိဳးနဲ႕ျပမယ္ဆိုရင္ သိတဲ့သူက 5 % မသိတဲ့သူက 95% ႏႈန္းနဲ႕ခန္႕မွန္းရပါတယ္..။
ဘာလို႕တုန္းဆိုေတာ့ ယခုလိုနည္းလမ္းေတြကို ျမန္မာအင္တာနက္စာမ်က္ႏွာေတာ္ေတာ္မ်ားမ်ားမွာ ေဖာ္ျပထားတာမေတြ႕ရလို႕ပါဘ.ဲ ..
ဒီလ ို ေငြရွာတဲ့သူေတြက ို ေငြေပးတ ဲ့ Company ေတြက လ ဲ ေငြရွာတဲ့သူကိုေပးတ ဲ့ ေငြအေရအတြက္ထက ္သူတို႕ အျခားေၾကာ္ျငာလုပ္ငန္းေတြကေန လက္ခံရရွိတဲ့ ေငြအေရအတြက္က ပိုမ်ားပါတယ္..
ဥပမာ အခုက်ေနာ္ေဖာ္ျပမယ့္နည္းလမ္းဟာဆိုရင္ သူတို႕ျပထားတဲ့ ေၾကာ္ျငာေတြကို Click လုပ္ရမွာျဖစ္ပါတယ္..ဒီလို ကလစ္လုပ္တာနဲ႕ သူတုိ႕ကကိုယ့္ကို ေငြျပန္ေပးတယ္…ဒီလိုဘဲ.. ကိုယ္ကလစ္ႏိုင္ဖို႕ ေငြေပးတဲ့ Company က ျပထားတဲ့ ေၾကာ္ျငာေတြဟာလည္း
အျခား Company ကသူတို႕ကို လာအပ္ ထားတဲ့ေၾကာ္ျငာေတြပါဘ ဲ .. ဒီေတာ ့ အရွင္းဆုံးေျပာရရင ္ ကိုယ္က သူတို႕ဆီမယ ္ေန႕စားနဲ႕အလုပ္လုပ္ရတဲ့ ေၾကာ္ျငာ Clicker ေတြေပါ့ဗ်ာ.. အလုပ္လုပ္ႏိုင္မႈ ဥာဏ္ရည္ဥာဏ္ေသြးရွိမႈအေပၚမူတည္ၿပီးကိုယ့္ရဲ႕ ပိုက္ဆံရႏႈန္းေတြဟာ တစ္လနဲ႕တစ္လ ပိုၿပီးျမင့္တက္လာမွာပါ..ေျပာရရင္ေတာ့ ရာထူးတိုးလာတာေပါ့ဗ်ာ
က…ဲ အခုေဖာ္ျပမယ့္နည္းလမ္းကေတာ ့ သူတို႕ျပထားတဲ့ေၾကာ္ျငာေတြက ို Click ၿပီး ေငြရွာတဲ့နည္းပါဘ.ဲ .
ဒီေလာက္ဆိုရင္ အက်ဥ္းခ်ံဳးၿပီးေတာ့ သေဘာေပါက္ေလာက္မယ္ထင္ပါတယ္
ေအာက္မွာ အေကာင္းဆံုးလို႔ထင္မယ့္ ေၾကာ္ၿငာၾကည့္တဲ့ဆိုက္ေလးေတြကို ေဖာ္ၿပေပးထားပါတယ္ ရွိတာကေတာ့ ဆိုက္အမ်ားၾကီးပါ ဒါေပမယ့္ က်ေနာ္တို႔ ကိုယ္ဘာသာကိုယ္ခ်ိန္ၿပီး စဥ္းစားၾကရမယ္ေလဗ်ာ အခုက်ေနာ္ ဒီဆိုက္ ၁၂ခုကိုလွည္ပတ္ၿပီး ကလစ္တာ အခ်ိန္တနာရီေလာက္ယူရပါတယ္ လိုင္းေကာင္းဖို႔လဲလိုေသးတာေပါ့ေနာ္ ဒါေပမယ့္ နိုင္းဆိုက္ႏွစ္ခုဖြင့္စာနဲ႔ ေၾကာ္ၿငာဆိုက္တခုဖြင့္စာနဲ႔ တူတယ္ဆိုေတာ့ သိပ္ေတာ့ မေကာင္းလဲ ရပါတယ္ အိုေက
ေအာ္...အေရးၾကီးတာကိုလဲ ေၿပာရအံုးမယ္ ရမယ့္ပိုက္ဆံကဘယ္ေလာက္လဲ??? ?????
ဟုတ္တယ္...က်ေနာ္ကိုယ္တိုင္လဲ မလုပ္ခင္အဲေမးခြန္းစေမးခဲ့တယ္ ၿပီးေတာ့ စိတ္ေရာခ်ရရဲ့လား ????တကယ္ေရာေပးမွာလား?????? ေပးေတာ့ေရာဘယ္လိုယူမွာလဲ?????
ဟုတ္ပါတယ္.....ဒါဆိုရမယ့္ပိုက္ဆံကို အရင္စေၿပာမယ္...
ဆိုက္တစ္ဆိုက္နဲ႔တစ္ဆိုက္ကေတာ့မတူပါဘူး ဒါကေတာ့ အေကာင့္၀င္ မန္ဘာလုပ္ရင္းနဲ႔ နားလည္လာမွာပါ ဒီေတာ့အၾကမ္းဖ်င္းရွင္းၿပမယ္ ပထမကက်ေနာ္ ေၿပာထားတဲ့အတိုင္းပဲ ဇြဲရွိရမယ္ ဘယ္အလုပ္မဆိုလြယ္လြယ္နဲ႔ေတာ့မရပါဘူး တစ္ေနတစ္ခါ ပံုမွန္ေလး ဇြဲရွိရွိနဲ႔ ကလစ္သြားမယ္ဆိုရင္ တစ္လထက္တစ္လ ၀င္ေငြက ႏွစ္ဆႏွစ္ဆတိုးသြားပါ့မယ့္ အဲ အဲလိုတိုးသြားဖို႔ကလဲ အဲဆိုက္ေတြထဲမွာပဲ ကိုယ္လိုပဲေၾကာ္ၿငာကလစ္သူ မွာတာတို႔ဘာတို႔ ရွိေသးတာကိုးဗ် ထားပါ ဒါကေတာ့ လုပ္ရင္းနဲ႔သိသြားမွာပါ..
အဓိကက အဲဒီလို ပံုမွန္ကလစ္ ညဏ္ရွိရွိနဲ႔သာလုပ္သြားမယ္ဆို တစ္ႏွစ္ ႏွစ္ႏွစ္အတြင္းမွာ တစ္ရက္ကို ၀င္ေငြ ေလးငါးေသာင္းေလာက္ရွိတဲ့ သူတစ္ေယာက္ ၿဖစ္လာမွာပါ အိုေတ...
ဟုတ္ကဲ့ ပံုမွန္မကလစ္ေတာ့ဘာၿဖစ္လဲ....မကလစ္ေတာ့ပိုက္ဆံအရေနာက္က်တာေပါ့ဗ်ာ...ဒါပါပဲ
ကဲ စာရွည္တယ္ဗ်ာ...ေအာက္မွာ ပံုေလးေတြနဲ႔ သြားရမယ့္ေနရာေလးေတြေပးထားတယ္ မန္ဘာ၀င္ၿပီး View ads ေလးကိုႏွိပ္ ေၾကာ္ၿငာေလးေတြကို ၾကည့္ရင္း ပိုက္ပိုက္ေတြ စုလိုက္ရေအာင္ဗ်ာ
ေအာက္ေဖာ္ၿပပါ ဆိုက္ေတြမွာ လုပ္ရင္းကိုင္ရင္း မသိတာ မရွင္းတာရွိသူမ်ား helperhelper3@gmail.com ကိုလာေရာက္ေမးၿမန္းနိုင္ပါတယ္ဗ်ာ....က်န္တဲ့ဆိုက္ေတြကိုေတာ့ အေနာ္လဲ မကလစ္ဖူးေတာ့ မသိပါေၾကာင္း
အားလံဳး၀င္ေငြကိုယ္ဆီ ရၾကပါေစဗ်ာ....

Saturday, June 8, 2013


ဘာသာစကား ၃၂ မ်ဳိးကိုဘာသာျပန္ေပးႏိုင္မယ့္ COMET Talking Translator ျပည္တြင္းသို႔ေရာက္ရွိလာၿပီ


ဘာသာစကား ၃၂ မ်ဳိးကို အျပန္အလွန္
ဘာသာျပန္ေပးႏိုင္ေသာ COMET အမွတ္
တံဆိပ္ Talking Translator ျပည္တြင္း
သို႔ေရာက္ရွိလာပါၿပီ။ ၄င္း Translator သည္


 ျမန္မာ၊ မေလးရွား၊ တ႐ုတ္၊ စပိန္၊ ကိုရီးယား၊ ဂ်ပန္၊ ႐ုရွား၊ အိႏိၵယ၊ ထိုင္း အပါအ၀င္ ဘာသာစကား ၃၂ မ်ဳိးကို အျပန္အလွန္ ဘာသာျပန္ေပးႏိုင္မွာ ျဖစ္ပါတယ္။

 ဘာသာစကား အမ်ားဆံုး ဘာသာျပန္ေပးႏုိင္တဲ့ ပထမဆံုး Mobile Electronic ပစၥည္း မ်ဳိးဆက္သစ္ တစ္ခု ျဖစ္ပါတယ္။ ဘာသာျပန္ေပးႏုိင္မယ့္အျပင္ Dictionary အျဖစ္လည္း အသံုးျပဳႏိုင္ၿပီး ဘာသာစကားမ်ားကို ေလ့လာ သင္ယူႏိုင္မွာျဖစ္ပါတယ္။

ဧည့္လမ္းညႊန္မ်ား၊ ႏိုင္ငံတကာႏွင့္ အဆက္အသြယ္ျပဳ လုပ္ကိုင္ေနရသည့္ သေဘာၤသားမ်ား၊ ႏိုင္ငံျခား ပညာသင္ ေက်ာင္းသား၊ ေက်ာင္းသူမ်ား၊ ႏိုင္ငံျခားသို႔ အလုပ္သြားေရာက္ လုပ္ကိုင္သူမ်ား၊ ဘာသာစကား ကို ေလ့လာေနသူမ်ားအတြက္ အေထာက္အကူေပးမယ့္ စက္ကေလးပါ။

အဆိုပါ COMET Talking Translator ေလးကိုေတာ့ KMD မွ ျမန္မာျပည္တရား၀င္ ကိုယ္စားလွယ္အျဖစ္ တင္သြင္း ျဖန္႔ျဖဴးေနတာျဖစ္ၿပီး ေစ်းႏႈန္းကေတာ့ က်ပ္ ၈၄,၀၀၀ (က်ပ္ရွစ္ေသာင္း ေလးေထာင္) ျဖစ္ပါတယ္။

 ဆက္သြယ္၀ယ္ယူခ်င္တယ္ ဆိုရင္ေတာ့ ၀၁-၃၈၅-၀၇၇ ႏွင့္ ၀၁-၃၇၈-၄၃၁ ကို ဆက္သြယ္ႏိုင္ပါတယ္။

 Myanmar ICT


Friday, May 31, 2013

Code သံုးၿပီး animation လုပ္ရေအာင္ 3



ဒီတစ္ခါမွာေတာ့.. animation box ေလးေတြလုပ္ၾကရေအာင္...။ ပံုဆြဲစရာမလုိပါဘူး..။ code နဲ႔ပဲေရးသြားမွာပါ..။ ပထမဆံုးေအာက္က.. code ေတြကို.. copy ကူးလိုက္ပါ..။

<html>
<head>
<style>
body {margin:0px ; padding: 0px}
canvas{display:block}


</style>
</head>
<body>
<canvas id="c"></canvas>
<script>
window.onload = function()
{
    // lets get the HTML canvas element so we draw on it
    var canvas = document.getElementById("c");
    var ctx = canvas.getContext("2d")
   
    var W = window.innerWidth,    // get the width of our window
            H = window.innerHeight;// get the height
           
            // set our canvas to our size of Width and height
            canvas.width = W;
            canvas.height = H;
           
            /*=========== Box class ===========*/
            function Box(_x,_y)
            {
                // the X/Y position
                this.x = _x;
                this.y = _y;
               
                // lets give it velocity X and Y
                this.xVel = 10 + Math.random()*20;
                this.yVel = 1;
               
                // the box width and height
                this.width = 20
                this.height = 20;
               
                // random colors for our box
                this.r = Math.round(Math.random()*255);
                this.g = Math.round(Math.random()*255);
                this.b = Math.round(Math.random()*255);
               
                this.rgba = "rgba("+this.r+","+this.g+","+this.b+",1)";
               
                // lets make draw method for our box
                this.draw = function()
                {
                    ctx.strokeStyle = this.rgba;
                    ctx.strokeRect(this.x,this.y,this.width,this.height);
                   
                    this.update();
                }
               
                // function that handle our logics for our box
                this.update = function()
                {
                    // lets check if the ball get out of our screen and when
                    // it does that, make it bounce
                    // check the left window border
                    if(this.x < 0) {
                        this.x = 0;            // set its position to 0
                        this.xVel *= -1; // make it bounce
                    }
                   
                    // check the right border
                    if(this.x > W - this.width)
                    {
                            this.x = W - this.width;            // set its position to 0
                            this.xVel *= -1; // make it bounce
                    }
                   
                    // check the top border
                    if(this.y < 0) {
                        this.y = 0;            // this is what happen when u copy/paste
                        this.yVel *= -1; // make it bounce
                    }
                   
                    // the reason why we did this if function so the boxes dont
                    // try to add y by its velocity when its reach bottom
                    // cause it will cause it to spazz
                    // now we add gravity
                    if(this.y < H - this.height)
                        this.yVel += .25;
                   
                    // check the bottom border
                    if(this.y > H - this.height)
                    {
                            // when it bounce off the bottom decrease the ball speed
                            this.xVel *= .5
                            this.yVel *= .5
                           
                            this.y = H - this.height;            // set its position to 0
                            this.yVel *= -1; // make it bounce
                    }

                    // move add speed to our x/y
                    this.x += this.xVel;
                    this.y += this.yVel;
                }
            }
           
            // lets make array of boxes
            var boxes = [];
           
            // Function to draw stuff on our screen :)
            function draw()
            {
                // Background
                ctx.globalCompositeOperation = "source-over";
                ctx.fillStyle = "rgba(0,0,0,0.5)"
                ctx.fillRect(0,0,W,H);
               
                ctx.globalCompositeOperation = "lighter"
               
                // loop through the boxes and draw them
                for(i=0; i < boxes.length; i++)
                    boxes[i].draw();
               
                update();
            }
           
            // Function for our logic
            function update()
            {
                // loop through the boxes and draw them
                for(i=0; i < boxes.length; i++)
                    boxes[i].update();
            }
           
            // add box every minute we specify
            setInterval(function(){
                boxes.push( new Box(0,0))
            },1000);
           
            // set interval so we can draw then update our drawing
            // every 30 milisecond
            setInterval(draw,30);
}
</script>
</body>
</html>

notepad ထဲမွာ.. code ေတြကုိ.ထည့္လိုက္ပါမယ္..။File > save ဆုိၿပီး.. box.html လို႔နာမည္ေပးၿပီး.. desktop မွာ သိမ္းလိုက္ပါ..။ desktop ေပၚက.. box.html ကုိ double click ႏွိပ္ၿပီးဖြင့္ၾကည့္လိုက္ပါ..။
box ေလးေတြ..က်လာတာကုိ..ေတြ႔ရပါလိမ့္မယ္...။ ဘာ ပံုမွမပါပါဘူး.. code နဲ႔ပဲေရးသြားတာပါ.. 

Simple Game Creation 2



Game ေသးေသးေလးတစ္ခုေရးရေအာင္ေနာ္..။ အဓိကကေတာ့.. movement ကုိ..ဘယ္လိုလုပ္လဲ...သိေစ ခ်င္တာပါ..။ ဒီတစ္ခါေတာ့..ရွင္းၿပပါ့မယ္..။ နည္းနည္းနားလည္လာလုိ႔ပါ.. :) ပထမဆံုး.. Folder တစ္ ခုေဆာက္ ပ့ါမယ္..။ ၾကိဳက္တဲ့ေနရာမွာ ေဆာက္လုိက္ပါ..။
Folder ကုိ.. Game လုိ႔ေပးလိုက္ပါ..။
Game Folder ထဲမွာ.. images ဆုိတဲ့ folder တစ္ခုထပ္ေဆာက္ပါ.။ ၿပီးရင္.. Game Folder ေအာက္မွာပဲ. js ဆိုတဲ့ folder တစ္ခုထပ္ေဆာက္လုိက္ပါမယ္..။ ေအာက္က coding ေလးကုိ. copy ကူးလိုက္ပါ..။


<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Simple Canvas Game</title>
    </head>
    <body>
        <script src="js/game.js"></script>
    </body>
</html>

notepad မွာ..ထည့္ၿပီး..Game Folder ေအာက္မွာ.. index.html နဲ႔ Save လုိက္ပါ..။




1. Create the canvas

// Create the canvas
var canvas = document.createElement("canvas");
var ctx = canvas.getContext("2d");
canvas.width = 512;
canvas.height = 480;
document.body.appendChild(canvas);

Canvas ဆိုတာ.. Game ကုိ..ဘယ္ေလာက္ size နဲ႔ ေပၚေစခ်င္တာလညး္ဆိုၿပီး.. ေနရာေလး..သတ္မွတ္လိုက္တာပါ..။
2d နဲ႔ပဲေရးမွာမုိ႔လို႔.. canvas.getContext("2d"); ဆိုၿပီးထည့္ထားတာပါ..။
width နဲ႔ height ကုိသတ္မွတ္ေပးပါမယ္..။

2. Include images

// Background image
var bgReady = false;
var bgImage = new Image();
bgImage.onload = function () {
    bgReady = true;
};
bgImage.src = "images/background.png";

အခု.. ေနာက္ခံ background ထည့္ပါမယ္..။
https://github.com/lostdecade/simple_canvas_game/blob/master/images/background.png မွာ. background ေတြ႔ပါလိမ့္မယ္..။
background ေပၚမွာ.. right click ႏွိပ္ၿပီး.. Save Image As ကုိ.ႏွိပ္လိုက္ပါ..။
ပံုကုိ.. Game Folder ေအာက္က images folder ထဲမွာ.backgroundဆုိတဲ့နာမည္နဲ႔...ထည့္လုိက္ပါ..။ bgImage.src = "images/background.png"; က.. background image ကုိ..ထည့္တဲ့ပံုစံပါ..။

3. Game objects

// Game objects
var hero = {
    speed: 256, // movement in pixels per second
    x: 0,
    y: 0
};
var monster = {
    x: 0,
    y: 0
};
var monstersCaught = 0;

Game ထဲမွာပါတဲ့..အေကာင္ေတြရဲ႔ေနရာကုိ.သတ္မွတ္တာပါ..။
https://github.com/lostdecade/simple_canvas_game/blob/master/images/hero.png မွာ..  Hero ပံုကို.. Save လုပ္လိုက္ပါ..။
Game Folder ေအာက္က...images Folder ထဲမွာ. Save ပါမယ္..။
https://github.com/lostdecade/simple_canvas_game/blob/master/images/monster.png မွာ. monster ပံုကုိ.. Save လုပ္လိုက္ပါ။
Game Folder ေအာက္က...images Folder ထဲမွာ. Save ပါမယ္..။
speed: 256 က..အၿမန္ႏွဳန္းကုိ..သတ္မွတ္တာပါ..။ hero မွာပဲပါပါတယ္.။ game play လိုက္ရင္.. monster က.မေရႊ႔ဘူးေလ..။
hero ပဲ..ေရႊ႔ရမွာပါ..။ ဒါေၾကာင့္.. monster ကုိ.အၿမန္ႏွဳန္းမသတ္ေပးထားပါဘူး..။
x: 0,y: 0 ဆိုတာ. postion သတ္မွတ္တာပါ..။ အေကာင္ေလးေတြရဲ႔ position က.. တစ္ခါနဲ႔တစ္ခါ..မတူလို႔.. 0 ေပးထားတာပါ..။
var monstersCaught = 0; က.. monster ကုိ..ထိမိတဲ့အၾကိမ္အေရအတြက္ပါ..။ စစၿခင္းဆိုေတာ့. 0 ေပးထားတာပါ..။

 4. Keyboard Controls

// Handle keyboard controls
var keysDown = {};

addEventListener("keydown", function (e) {
    keysDown[e.keyCode] = true;
}, false);

addEventListener("keyup", function (e) {
    delete keysDown[e.keyCode];
}, false);

ကစားတဲ့သူက..ေရြ႔လိုက္တဲ့ arrow key ေတြကုိ.. AddEventListener နဲ႔ဖမ္းပါတယ္..။
တကယ္လို႔.. down arrow key ကုိ..ႏွိပ္လိုက္မယ္ဆိုရင္.. keysDown ကုိ.. true ေပးလိုက္ပါတယ္..။
down arrow key ကုိ.. ႏွိပ္ေနရင္းနဲ႔.. up arrow key ကုိ..ေၿပာင္းႏွိပ္ခဲ့မယ္ဆိုရင္..Down ကုိ.. delete လုပ္တဲ့အေနနဲ႔.. delete keysDown[e.keyCode]; ဆိုၿပီး..ဖ်က္လိုက္ပါတယ္..။

5. Reset the game

// Reset the game when the player catches a monster
var reset = function () {
    hero.x = canvas.width / 2;
    hero.y = canvas.height / 2;

    // Throw the monster somewhere on the screen randomly
    monster.x = 32 + (Math.random() * (canvas.width - 64));
    monster.y = 32 + (Math.random() * (canvas.height - 64));
};

game ကို...အစကေန..ၿပန္ကစားတာပါ..။
အစကေန..ၿပန္ကစားမယ္ဆိုရင္.. hero နဲ႔.. monster ကုိ..ေနရာၿပန္သတ္မွတ္ေပးမွာပါ..။
hero ကုိ..ေနရာသတ္မွတ္ဖို႔... canvas ရဲ႔.. width ကုိ..တည္ 2နဲ႔စား..။ canvas ရဲ႔.. height ကုိ..တည္ 2နဲ႔စား..။ ရတဲ့.အေၿဖအရ.. x ၀င္ရိုးနဲ႔.. y ၀င္ရိုးသတ္မွတ္ပါတယ္..။
monster ကုိေတာ့.. canvas ရဲ႔.. width ထဲက. 64 ႏွဳတ္.. random ေခါက္ၿပီး.. 32 ေပါင္းပါတယ္...။ height လည္း..တူတူပါပဲ..။
coding အားလံုး..ကူးၿပီးလို႔.. game ကစားၿပီး.. refresh လုပ္ၾကည့္ပါ...။
hero ရဲ႔ေနရာက..မေၿပာင္းပါဘူး..။
monster ကေတာ့... refresh တစ္ခါလုပ္တုိင္း..တစ္ခါေၿပာင္းသြားပါတယ္.. ။

6. Update Game Objects

// Update game objects
var update = function (modifier) {
    if (38 in keysDown) { // Player holding up
        hero.y -= hero.speed * modifier;
    }
    if (40 in keysDown) { // Player holding down
        hero.y += hero.speed * modifier;
    }
    if (37 in keysDown) { // Player holding left
        hero.x -= hero.speed * modifier;
    }
    if (39 in keysDown) { // Player holding right
        hero.x += hero.speed * modifier;
    }
ကစားတ့ဲသူက.. hero နဲ႔.. monster ကုိ.. ေပးထားတဲ့.. position ကေန..စိတ္ၾကိဳက္ေရြ႔လိုက္တဲ့.တန္ဖိုးကုိ..တြက္ခ်က္ေပးတာပါ..။

7. Touching

// Are they touching?
    if (
        hero.x <= (monster.x + 32)
        && monster.x <= (hero.x + 32)
        && hero.y <= (monster.y + 32)
        && monster.y <= (hero.y + 32)
    ) {
        ++monstersCaught;
        reset();
    }
};

hero နဲ႔.. monster နဲ႔... ထိမိသြားတယ္..ဆိုရင္.. monsterCaunght ကုိ..  1 တိုးပါမယ္...။
game ကုိ..အစကေနၿပန္စပါတယ္..။
အဲ့ဒါေၾကာင့္.. အေပၚက reset the game function ကုိ..လွမ္းေခၚလိုက္ပါတယ္...။

8. Rendering

// Draw everything
var render = function () {
    if (bgReady) {
        ctx.drawImage(bgImage, 0, 0);
    }

    if (heroReady) {
        ctx.drawImage(heroImage, hero.x, hero.y);
    }

    if (monsterReady) {
        ctx.drawImage(monsterImage, monster.x, monster.y);
    }

    // Score
    ctx.fillStyle = "rgb(250, 250, 250)";
    ctx.font = "24px Helvetica";
    ctx.textAlign = "left";
    ctx.textBaseline = "top";
    ctx.fillText("Goblins caught: " + monstersCaught, 32, 32);
};

rendering က.. အေပၚဆံုးက.. canvas နဲ႔. background image နဲ႔..သက္ဆုိင္ပါတယ္..။
Image ေတြကို..ဒီတိုင္းထည့္လုိ႔မရပါဘူး... ctx.drawImage(bgImage, 0, 0); ဆိုၿပီး.ထည့္ရပါတယ္..။
hero နဲ႔.. monster လည္း..ဒီအတိုင္းပါပဲ..။ သူတို႔လည္း..ပံုေတြပဲေလ..။
position က x ၀င္ရိုးနဲ႔... y ၀င္ရိုးအတိုင္းသြားမွာမုိ႔လို႔.. hero.x , hero.y , monster.x , monster.y ဆိုၿပီး..သတ္မွတ္ထားတာပါ..။
ctx.fillStyle = "rgb(250, 250, 250)"; ဆိုေတာ့... Goblins caught:  စာသားက.. အၿဖဴေရာင္နဲ႔.ေပၚေနတာပါ..။
font ကုိ. " Helvetica " သံုးထားပါတယ္..။
align က. left ထားၿပီး. basealign ကုိ. top ထားထားလို႔.. Goblins caught:  က ..အေပၚ..ဘယ္ဘက္မွာ..ေပၚေနတာပါ..။
ctx.fillText("Goblins caught: " + monstersCaught, 32, 32); ကေတာ့.. monster နဲ႔..ထိမိတဲ့..အၾကိမ္အေရအတြက္ကုိ..ၿပန္ၿပေပးထာတာပါ..။
Are they touching က. monsterCaught ကုိ..ၿပန္ေခၚၿပီး...သံုးထားတာပါ.။

9. Game Looping

// The main game loop
var main = function () {
    var now = Date.now();
    var delta = now - then;

    update(delta / 1000);
    render();

    then = now;
};
game ကုိ..အၾကိမ္အေရ..ဘယ္ေလာက္နဲ႔..ေဆာ့မယ္ဆိုတာ..အတိအက်မရွိလို႔.. Looping ပတ္ၿပီးသံုးတာပါ..။
update(delta / 1000); render(); က..ဘယ္ game မဆို..ပံုေသပါပဲ..။ Formula လာေပါ့.. :)

10. Start Game

// Let's play this game!
reset();
var then = Date.now();
setInterval(main, 1); // Execute as fast as possible

Game ကုိ..အစကေနကစားေတာ့မယ္ဆိုရင္...အရင္.ေဆာ့ၿပီးသား..အေဟာင္းေတြ..က်န္ခဲ့မွာစိုးလို႔.. reset(); ဆိုတဲ့.. function ကုိ..အရင္လွမ္းေခၚလိုက္တာပါ..။
ၿပီးရင္.. game ကုိ.. looping ပတ္ၿပီးေတာ့.. အေပၚက..အဆင့္ေတြကုိ..တစ္ဆင့္ခ်င္းလွမ္းေခၚၿပီး..အလုပ္လုပ္ပါတယ္..။

Notepad ထဲမွာ..ေရးထည့္ရမယ့္..ပံုစံက..ဒီလိုမ်ိဳးေလးပါ..။

// Create the canvas
var canvas = document.createElement("canvas");
var ctx = canvas.getContext("2d");
canvas.width = 512;
canvas.height = 480;
document.body.appendChild(canvas);

// Background image
var bgReady = false;
var bgImage = new Image();
bgImage.onload = function ()
 {
    bgReady = true;
};
bgImage.src = "images/background.png";

// Game objects
var hero = {
    speed: 256, // movement in pixels per second
    x: 0,
    y: 0
};
var monster = {
    x: 0,
    y: 0
};
var monstersCaught = 0;

// Handle keyboard controls
var keysDown = {};

addEventListener("keydown", function (e) {
    keysDown[e.keyCode] = true;
}, false);

addEventListener("keyup", function (e) {
    delete keysDown[e.keyCode];
}, false);

// Reset the game when the player catches a monster
var reset = function () {
    hero.x = canvas.width / 2;
    hero.y = canvas.height / 2;

    // Throw the monster somewhere on the screen randomly
    monster.x = 32 + (Math.random() * (canvas.width - 64));
    monster.y = 32 + (Math.random() * (canvas.height - 64));
};

// Update game objects
var update = function (modifier) {
    if (38 in keysDown) { // Player holding up
        hero.y -= hero.speed * modifier;
    }
    if (40 in keysDown) { // Player holding down
        hero.y += hero.speed * modifier;
    }
    if (37 in keysDown) { // Player holding left
        hero.x -= hero.speed * modifier;
    }
    if (39 in keysDown) { // Player holding right
        hero.x += hero.speed * modifier;
    }

    // Are they touching?
    if (
        hero.x <= (monster.x + 32)
        && monster.x <= (hero.x + 32)
        && hero.y <= (monster.y + 32)
        && monster.y <= (hero.y + 32)
    ) {
        ++monstersCaught;
        reset();
    }
};

// Draw everything
var render = function () {
    if (bgReady) {
        ctx.drawImage(bgImage, 0, 0);
    }

    if (heroReady) {
        ctx.drawImage(heroImage, hero.x, hero.y);
    }

    if (monsterReady) {
        ctx.drawImage(monsterImage, monster.x, monster.y);
    }

    // Score
    ctx.fillStyle = "rgb(250, 250, 250)";
    ctx.font = "24px Helvetica";
    ctx.textAlign = "left";
    ctx.textBaseline = "top";
    ctx.fillText("Goblins caught: " + monstersCaught, 32, 32);
};

// The main game loop
var main = function () {
    var now = Date.now();
    var delta = now - then;

    update(delta / 1000);
    render();

    then = now;
};

// Let's play this game!
reset();
var then = Date.now();
setInterval(main, 1); // Execute as fast as possible

အဲ့ဒါေတြအားလံုးကုိ.. copy ကူးၿပီး.. Game Folder ေအာက္က.. js Folder ထဲမွာ.. game.js ဆိုၿပီး.. Save လုပ္ပါမယ္.။

အားလံုးၿပီးသြားရင္.. Game Folder ထဲက.. index.html ကုိ.. double click ဖြင့္ၿပီး.. ကစားႏိုင္ပါၿပီ

ဒီေလာက္ဆိုရင္ေတာ့... game တစ္ခုရဲ႔..အေၿခံသေဘာတရားကို...နားလည္မယ္လို႔..ထင္ပါတယ္..။ online မွာလည္း..ရွာၾကည့္ၾကပါ..။ html ကိုသံုးၿပီး..ေရးထားတဲ့.. game ေတြအမ်ားၾကီးပါပဲ..။ super mario လုိမ်ိဳး.. game ကုိ..ကုိယ္တိုင္ထြင္ၾကည့္ၾကေတာ့ေပ့ါေနာ္.. ^_^

ပါဖိုင္ေတြ ခြဲနည္း ၊င္းနည္း




အရင္ဆံုး .part1.rar, .part2.rar စတဲ့ အပိုင္းခြဲနည္းကိုေဆြးေႏြးပါမယ္..
step{ 1 } desktop ေပၚမွာ folder တစ္ခုထုတ္လိုက္ပါ.
step{ 2 } အဲဒီ folder ကိုဖြင့္ျပီး  မိမိခြဲမည့္ name.exe program ကိုထည့္လိုက္ပါ။
step{ 3 } name.exe program ေပၚ မွာ Right Click \ Add to Archive... ကို click လိုက္ပါ။


step{ 4 } Archive name and parameters box ေပၚလာရင္ေအာက္ကက်ေနာ္ဝိုင္းေပးထားတဲ့ေနရာမွာ မိမိ ခြဲခ်င္တဲ့ .exe ရဲ ့ဆိုဒ္အလိုက္ တန္ဖိုးထည့္ေပးရပါမယ္. ( ဥပမာ...အခု က်ေနာ္က Firefox Setup 9.0.1.exe ကို ခြဲျပမွာဆိုေတာ့ သူ ့ဆိုဒ္က 14.5 MB ရွိတဲ့အတြက္  5 MB ဆိုျပီး တန္ဖိုးေရးေပးပါမယ္.) ေအာက္ပံု -
 

step{ 5 } အခုဆိုရင္ မိမိခြဲခ်င္တဲ့ Firefox Setup 9.0.1.exe ကို  .part1.rar, .part2.rar ,.part3.rar, .part4.rar ဆိုျပီး  .rar ဖိုင္ အျဖစ္ခြဲထားလိုက္ျပီးျဖစ္ပါတယ္. ေအာက္ပံု -


အခုထပ္ျပီးေဆြးေႏြးမွာက အထက္မွာက်ေနာ္ခြဲေပးခဲ့ျပီးျဖစ္တဲ့ .part1.rar, .part2.rar စတဲ့ ဖိုင္ေတြကို မည္သည့္ေနရာကဘဲ ရသည္ျဖစ္ေစ မူလ Setup.exe software file ကိုရရွိေအာင္ျပဳလုပ္တဲ့ နည္းျဖစ္ပါတယ္. ( ဥပမာ. အေပၚက က်ေနာ္ ခြဲထားခဲ့တဲ့ .rar ဖိုင္ ေတြကို မူလ Firefox Setup 9.0.1.exe အတိုင္း ျပန္ရေအာင္ ေပါင္းေပးပါမယ္ ).

step{ 1 } မိမိတို ့မွာရွိေနတဲ့ အပိုင္းအပိုင္းျဖစ္ေနတဲ့ .rar ဖိုင္ေတြကို folder တစ္ခုထဲမွာထားလိုက္ပါ.ျပီး ရင္ ေအာက္ကပံုေလးအတိုင္း name.part1.rar ေပၚမွာ Right Click \ Extract here ကို Click လိုက္ပါ။

step{ 2 } အခုဆိုရင္ မိမိတို ့ရဲ ့အပိုင္းပိုင္းျဖစ္ေနတဲ့ .part1.rar, .part2.rar စတဲ့ ဖိုင္ေတြကို ျပန္လည္ေပါင္းစည္းခဲ့ျပီးျဖစ္ပါတယ္. ေအာက္ပံု -

 
ေက်းဇူးတင္ပါတယ္..
Related Posts Plugin for WordPress, Blogger...