DevOps C++ နှင့် "kitchen wars" သို့မဟုတ် ထမင်းစားနေစဉ် ဂိမ်းများကို စတင်ရေးသားပုံ

“ငါဘာမှမသိဘူးဆိုတာ ငါသိတယ်” ဆိုကရေးတီး

ဘယ်သူ့အတွက်- developer အားလုံးကို ဂရုမစိုက်ဘဲ ၎င်းတို့၏ဂိမ်းများကို ကစားလိုသော IT သူများအတွက်။

ဘာအကြောင်းပါလဲ: သင် ရုတ်တရက် လိုအပ်ပါက C/C++ တွင် ဂိမ်းများ စတင်ရေးသားနည်း အကြောင်း။

ဒါကို ဘာကြောင့် ဖတ်သင့်သလဲ အပလီကေးရှင်းဖွံ့ဖြိုးတိုးတက်မှုသည် ကျွန်ုပ်၏ကျွမ်းကျင်မှုနယ်ပယ်မဟုတ်သော်လည်း အပတ်တိုင်း ကုဒ်လုပ်ရန် ကြိုးစားပါသည်။ ဂိမ်းတွေကို ကြိုက်လို့။

မင်္ဂလာပါ ငါ့နာမည် Is Andrey Grankinကျွန်ုပ်သည် Luxoft တွင် DevOps ဖြစ်သည်။ အပလီကေးရှင်း ဖွံ့ဖြိုးတိုးတက်မှုသည် ကျွန်ုပ်၏ အထူးကျွမ်းကျင်မှု မဟုတ်သော်လည်း အပတ်တိုင်း ကုဒ်ရေးရန် ကြိုးစားပါသည်။ ဂိမ်းတွေကို ကြိုက်လို့။

ကွန်ပျူတာဂိမ်းလုပ်ငန်းသည် ယနေ့ခေတ် ရုပ်ရှင်လုပ်ငန်းထက်ပင် ကြီးမားသည်ဟု ကောလာဟလများ ထွက်ပေါ်နေသည်။ ဂိမ်းများကို ခေတ်မီစံနှုန်းများ၊ ရှုပ်ထွေးပြီး အခြေခံ ဖွံ့ဖြိုးတိုးတက်မှုနည်းလမ်းများဖြင့် ကွန်ပျူတာများ ပေါ်ထွန်းလာချိန်မှ စ၍ ရေးသားခဲ့သည်။ အချိန်ကြာလာသည်နှင့်အမျှ ပရိုဂရမ်ရေးဆွဲထားသည့် ဂရပ်ဖစ်၊ ရူပဗေဒနှင့် အသံပါရှိသော ဂိမ်းအင်ဂျင်များ ပေါ်လာတော့သည်။ ၎င်းတို့သည် သင့်အား ဂိမ်းကိုယ်တိုင်ဖန်တီးရန် အာရုံစိုက်နိုင်ပြီး ၎င်း၏အခြေခံအုတ်မြစ်ကို စိတ်ပူစရာမလိုပေ။ သို့သော် ၎င်းတို့နှင့်အတူ၊ အင်ဂျင်များနှင့်အတူ၊ developer များသည် “မျက်စိကန်းသွား” ပြီး ဆုတ်ယုတ်သွားကြသည်။ ဂိမ်းများကိုယ်တိုင်ထုတ်လုပ်ခြင်းကို conveyor belt ပေါ်တွင်တင်ထားသည်။ ထုတ်ကုန်များ၏ အရေအတွက်သည် ၎င်း၏ အရည်အသွေးထက် သာလွန်စပြုလာသည်။

တစ်ချိန်တည်းမှာပင်၊ အခြားသူများ၏ဂိမ်းများကိုကစားသည့်အခါ၊ အခြားသူများရရှိသည့်နေရာများ၊ ဇာတ်ကွက်များ၊ ဇာတ်ကောင်များနှင့် ဂိမ်းစက်ပိုင်းဆိုင်ရာများဖြင့် ကျွန်ုပ်တို့ကို အစဉ်မပြတ်ကန့်သတ်ထားသည်။ ဒါနဲ့ပဲ သဘောပေါက်သွားတယ်...

... ငါ့အတွက်သာ ငါ့ကိုယ်ပိုင်ကမ္ဘာကို ဖန်တီးဖို့ အချိန်ရောက်လာပြီ။ ငါသည် ခမည်းတော်၊ သားတော်၊ သန့်ရှင်းသောဝိညာဉ်တော်ဖြစ် သောကမ္ဘာများဖြစ်သည်။

ပြီးတော့ မင်းရဲ့ကိုယ်ပိုင်ဂိမ်းအင်ဂျင်ကို ရေးပြီး ဆော့ကစားခြင်းဖြင့် မင်းရဲ့ဖိနပ်ကို ချွတ်နိုင်၊ ပြတင်းပေါက်တွေကို သုတ်ပစ်ပြီး မင်းရဲ့အခန်းကို အဆင့်မြှင့်တင်နိုင်ပြီး ပိုအတွေ့အကြုံရှိပြီး ပြီးပြည့်စုံတဲ့ ပရိုဂရမ်မာတစ်ယောက်ဖြစ်လာနိုင်မယ်လို့ ငါရိုးသားစွာယုံကြည်ပါတယ်။

ဒီဆောင်းပါးမှာ C/C++ မှာ ဂိမ်းအသေးစားလေးတွေကို ဘယ်လိုရေးခဲ့သလဲ၊ ဖွံ့ဖြိုးတိုးတက်မှု လုပ်ငန်းစဉ်က ဘယ်လိုလဲ၊ အလုပ်များတဲ့ ပတ်ဝန်းကျင်မှာ ဝါသနာအတွက် အချိန်ရှာတဲ့နေရာမှာ ပြောပြဖို့ ကြိုးစားပါမယ်။ ၎င်းသည် ပုဂ္ဂလဒိဋ္ဌိဖြစ်ပြီး တစ်ဦးချင်းစတင်ခြင်း၏ လုပ်ငန်းစဉ်ကို ဖော်ပြသည်။ မောဟနှင့် ယုံကြည်ခြင်းအကြောင်း၊ ငါ၏ကိုယ်ရေးကိုယ်တာရုပ်ပုံအကြောင်း၊ တစ်နည်းဆိုရသော် "အုပ်ချုပ်ရေးသည် မင်းရဲ့ကိုယ်ပိုင်ဦးနှောက်အတွက် တာဝန်မရှိပါဘူး။"

အလေ့အကျင့်

“အလေ့အကျင့်မရှိသောအသိပညာသည် အသုံးမဝင်၊ အသိပညာမရှိသောအလေ့အကျင့်သည် အန္တရာယ်ရှိသည်” ကွန်ဖြူးရှပ်

ငါ့မှတ်စုစာအုပ်က ငါ့ဘဝပဲ။


ထို့ကြောင့် လက်တွေ့တွင် ကျွန်ုပ်အတွက် အရာအားလုံးသည် notepad ဖြင့် စတင်သည်ဟု ကျွန်ုပ်ပြောနိုင်သည်။ အဲဒီမှာ ကျွန်မရဲ့ နေ့စဉ်အလုပ်တွေကို ချရေးရုံတင်မကဘဲ၊ ပရိုဂရမ်တွေ၊ ဇယားကွက်တွေကို ဒီဇိုင်းဆွဲပြီး သင်္ချာဆိုင်ရာ ပြဿနာတွေကို ဖြေရှင်းပေးတယ်။ Notepad ကို အမြဲသုံး၍ ခဲတံဖြင့်သာရေးပါ။ သန့်ရှင်းတယ်၊ အဆင်ပြေတယ်၊ ​​စိတ်ချရတယ်၊ ဘာမှလည်း မရှိဘူး။

DevOps C++ နှင့် "kitchen wars" သို့မဟုတ် ထမင်းစားနေစဉ် ဂိမ်းများကို စတင်ရေးသားပုံ
ကျွန်တော့်ရဲ့ မှတ်စုစာအုပ် (အပြည့်ပါ)။ ဒါက သူနဲ့တူတယ်။ ၎င်းတွင် နေ့စဉ်အလုပ်များ၊ စိတ်ကူးများ၊ ပုံများ၊ ပုံများ၊ ပုံများ၊ ဖြေရှင်းချက်များ၊ အနက်ရောင်စာရင်းရေးသွင်းမှု၊ ကုဒ်စသည်ဖြင့် ပါဝင်သည်

ဤအဆင့်တွင်၊ ကျွန်ုပ်သည် ပရောဂျက်သုံးခုကို ပြီးမြောက်အောင် စီမံနိုင်သည် (၎င်းသည် မည်သည့်ထုတ်ကုန်ကိုမဆို အဆုံးမသတ်နိုင်သောကြောင့် "ပြီးပြည့်စုံခြင်း" ကို ကျွန်ုပ်နားလည်သဘောပေါက်ပါသည်။

  • စီမံကိန်း ၂ - ၎င်းသည် Unity ဂိမ်းအင်ဂျင်ကို အသုံးပြု၍ C# တွင် ရေးသားထားသော 3D ဗိသုကာပညာရှင် သရုပ်ပြမြင်ကွင်းဖြစ်သည်။ macOS နှင့် Windows ပလပ်ဖောင်းများအတွက်။
  • ဂိမ်း 1: Windows အတွက် Simple Snake ("မြွေ" ဟု လူတိုင်းသိကြသည်) ကွန်ဆိုးလ်ဂိမ်း။ C မှာ ရေးထားတယ်။
  • ဂိမ်း 2: ကွန်ဆိုးလ်ဂိမ်း Crazy Tanks (“Tanks” ဟု လူတိုင်းသိကြသည်)၊ C++ (အတန်းများကိုအသုံးပြုသည်) နှင့် Windows အတွက်လည်း ရေးသားထားသည်။

Project 0. Architect Demo

DevOps C++ နှင့် "kitchen wars" သို့မဟုတ် ထမင်းစားနေစဉ် ဂိမ်းများကို စတင်ရေးသားပုံ
3D Scene Architect သရုပ်ပြ

ပထမပရောဂျက်ကို C/C++ တွင်မဟုတ်ဘဲ Unity ဂိမ်းအင်ဂျင်ကို အသုံးပြု၍ C# တွင် အကောင်အထည်ဖော်ခဲ့သည်။ ဒီအင်ဂျင်က ဟာ့ဒ်ဝဲလ်အတွက် တောင်းဆိုသလောက် မဟုတ်ဘူး။ Unreal Engine ကိုနှင့် တပ်ဆင်အသုံးပြုရ ပိုမိုလွယ်ကူပုံရသည်။ တခြားအင်ဂျင်တွေကို မစဉ်းစားမိဘူး။

Unity တွင် ကျွန်ုပ်၏ ရည်မှန်းချက်မှာ ဂိမ်းတစ်ခုကို ဖန်တီးရန်မဟုတ်ပါ။ ဇာတ်ကောင်အချို့နဲ့ 3D မြင်ကွင်းတစ်ခုကို ဖန်တီးချင်ခဲ့တယ်။ သူ (သို့) သူမ (ကျွန်တော် ချစ်ရတဲ့ ကောင်မလေးကို စံနမူနာယူခဲ့တယ် =) က သူ့ပတ်ဝန်းကျင်က ကမ္ဘာနဲ့ လှုပ်ရှားပြီး အပြန်အလှန် ဆက်ဆံရတယ်။ စည်းလုံးညီညွတ်ရေးဆိုတာဘာလဲ၊ ဖွံ့ဖြိုးတိုးတက်ရေးလုပ်ငန်းစဉ်က ဘာလဲဆိုတာနဲ့ တစ်ခုခုကို ဖန်တီးဖို့ ဘယ်လောက်အားစိုက်ထုတ်ရမယ်ဆိုတာကို နားလည်ဖို့သာ အရေးကြီးတယ်။ ဤသည်မှာ ဗိသုကာပညာရှင် ဒီမိုပရောဂျက်ကို မွေးဖွားလာပုံဖြစ်သည် (မည်သည့်နေရာတွင်မှ တီထွင်လုနီးပါးဖြစ်ခဲ့သည်)။ ပရိုဂရမ်ရေးဆွဲခြင်း၊ မော်ဒယ်လုပ်ခြင်း၊ ကာတွန်းပုံဆွဲခြင်း၊ အသွင်ပြင်ခြင်းတို့ကို နေ့စဉ်လုပ်ဆောင်ရန် နှစ်လခန့် အချိန်ယူခဲ့ရသည်။

3D မော်ဒယ်များ ဖန်တီးခြင်းအတွက် YouTube တွင် ကျူတိုရီရယ် ဗီဒီယိုများဖြင့် စတင်ခဲ့သည်။ Blender. Blender သည် တပ်ဆင်ရန်မလိုအပ်သော 3D မော်ဒယ်လ် (နှင့် အခြားအရာများ) အတွက် အလွန်ကောင်းမွန်သော အခမဲ့ကိရိယာတစ်ခုဖြစ်သည်။ ဒီမှာ အံ့အားသင့်စရာတစ်ခုက ကျွန်တော့်ကို စောင့်ကြိုနေပါတယ်... မော်ဒယ်၊ ကာတွန်း၊ စာသားရေးဆွဲခြင်းတွေဟာ စာအုပ်တွေရေးနိုင်တဲ့ ကြီးမားတဲ့ သီးခြားအကြောင်းအရာတွေ ဖြစ်လာပါတယ်။ အထူးသဖြင့် ဇာတ်ကောင်များအတွက် ဤသည်မှာ မှန်ပါသည်။ လက်ချောင်းများ၊ သွားများ၊ မျက်လုံးများနှင့် အခြားကိုယ်အင်္ဂါအစိတ်အပိုင်းများကို ပုံစံထုတ်ရန်အတွက် ခန္ဓာဗေဒဆိုင်ရာ အသိပညာ လိုအပ်မည်ဖြစ်ပါသည်။ မျက်နှာကြွက်သားတွေ ဘယ်လိုတည်ဆောက်ထားလဲ။ လူတွေ ဘယ်လို လှုပ်ရှားကြလဲ။ လက်၊ ခြေထောက်၊ လက်ချောင်း၊ လက်ချောင်းတစ်ချောင်းစီတွင် အရိုးများကို "ထည့်သွင်း" ခဲ့ရပါသည်။

ကာတွန်းရုပ်ပုံသွင်ပြင်ကို သဘာဝအတိုင်းဖြစ်စေရန် ညှပ်ရိုးများနှင့် ထပ်လောင်းလီဗာအရိုးများကို ပုံစံတူလုပ်ပါ။ ထိုသင်ခန်းစာများပြီးနောက်၊ ကာတွန်းရုပ်ရှင်ဖန်တီးသူများသည် ဗီဒီယို စက္ကန့် 30 ကိုဖန်တီးရန် မည်မျှအလုပ်လုပ်သည်ကို သင်သဘောပေါက်ပါသည်။ သို့သော် 3D ရုပ်ရှင်များသည် နာရီပေါင်းများစွာ ကြာရှည်သည်။ ထို့နောက် ကျွန်ုပ်တို့သည် ရုပ်ရှင်ရုံများမှ ထွက်ကာ “ဒါက မိုက်မဲတဲ့ ကာတွန်း/ရုပ်ရှင်ပါ။ သူတို့ ပိုကောင်းအောင် လုပ်နိုင်ခဲ့တယ်..." လူမိုက်!

နောက်တစ်ခုက ဒီပရောဂျက်မှာ ပရိုဂရမ်ရေးခြင်းနဲ့ ပတ်သတ်ပြီး။ ထွက်လာသလိုပဲ၊ ငါ့အတွက် စိတ်ဝင်စားစရာအကောင်းဆုံးက သင်္ချာအပိုင်းပါ။ အကယ်၍ သင်သည် မြင်ကွင်းကို လုပ်ဆောင်ပါက (ပရောဂျက်ဖော်ပြချက်ရှိ သိုလှောင်ခန်းသို့ လင့်ခ်ချိတ်ပါ)၊ ကင်မရာသည် စက်လုံးတစ်ခုအတွင်း မိန်းကလေးဇာတ်ကောင်ကို လှည့်ပတ်နေသည်ကို သတိပြုမိမည်ဖြစ်သည်။ ကင်မရာ၏ လှည့်ပတ်မှုကို အစီအစဉ်ဆွဲရန်၊ စက်ဝိုင်း (2D) ပေါ်ရှိ အနေအထားအမှတ်၏ သြဒီနိတ်များကို ဦးစွာ တွက်ချက်ပြီးမှ စက်လုံး (3D) ပေါ်တွင် တွက်ချက်ရမည်ဖြစ်ပါသည်။ ရယ်စရာကောင်းတာက ကျောင်းမှာ သင်္ချာကို မုန်းတီးပြီး C-minus နဲ့ သိခဲ့တာ။ တစ်စိတ်တစ်ပိုင်းအားဖြင့်၊ ကျောင်းတွင် ဤသင်္ချာကို ဘဝတွင် မည်သို့အသုံးချကြောင်းကို ၎င်းတို့အား ရိုးရိုးရှင်းရှင်း မရှင်းပြသောကြောင့် ဖြစ်နိုင်သည်။ ဒါပေမယ့် မင်းရဲ့ပန်းတိုင်၊ မင်းအိပ်မက်ကို စွဲလမ်းနေတဲ့အခါ မင်းရဲ့စိတ်တွေ ကြည်လင်လာပြီး ပွင့်လန်းလာလိမ့်မယ်။ ပြီးတော့ စိတ်လှုပ်ရှားစရာကောင်းတဲ့ စွန့်စားမှုတစ်ခုအနေနဲ့ ခက်ခဲတဲ့အလုပ်တွေကို သင်စတင်နားလည်လာမှာပါ။ ပြီးတော့ မင်းထင်တာက "အင်း၊ မင်း*အကြိုက်ဆုံး* သင်္ချာပညာရှင်က ဒီဖော်မြူလာတွေကို ဘယ်မှာသုံးလို့ရတယ်ဆိုတာ ပုံမှန်ပြောပြလို့မရဘူး။"

DevOps C++ နှင့် "kitchen wars" သို့မဟုတ် ထမင်းစားနေစဉ် ဂိမ်းများကို စတင်ရေးသားပုံ
စက်ဝိုင်းတစ်ခုနှင့် စက်လုံးပေါ်ရှိ အမှတ်တစ်ခု၏ သြဒီနိတ်များကို တွက်ချက်ရန်အတွက် ဖော်မြူလာများ တွက်ချက်ခြင်း (ကျွန်ုပ်၏မှတ်စုစာအုပ်မှ)

ဂိမ်း 1. ရိုးရိုးမြွေ

  • ပလက်ဖောင်း Windows (Windows 7၊ 10 တွင် စမ်းသပ်ထားသည်)
  • Язык: C pure နဲ့ရေးထားမယ်ထင်တယ်။
  • ဂိမ်းအင်ဂျင်- Windows ကွန်ဆိုးလ်
  • လှုံ့ဆော်မှု- javidx9
  • သိုလှောင်မှု- GitHub

DevOps C++ နှင့် "kitchen wars" သို့မဟုတ် ထမင်းစားနေစဉ် ဂိမ်းများကို စတင်ရေးသားပုံ
ရိုးရှင်းသောမြွေဂိမ်း

3D မြင်ကွင်းသည် ဂိမ်းတစ်ခုမဟုတ်ပါ။ ထို့အပြင်၊ 3D အရာဝတ္ထုများ (အထူးသဖြင့် ဇာတ်ကောင်များ) ကို ပုံစံထုတ်ခြင်းနှင့် လှုပ်ရှားသက်ဝင်ခြင်းသည် အချိန်ကုန်ပြီး ခက်ခဲသည်။ Unity နဲ့ ကစားပြီးနောက်၊ အခြေခံကနေ ဆက်လုပ်ဖို့ ဒါမှမဟုတ် ဆက်လုပ်ဖို့ လိုအပ်တယ်ဆိုတာကို နားလည်လာခဲ့တယ်။ ရိုးရှင်းပြီး မြန်ဆန်သော်လည်း တစ်ချိန်တည်းမှာပင် ကမ္ဘာလုံးဆိုင်ရာ ဂိမ်းများ၏ ဖွဲ့စည်းပုံကို နားလည်ရန်။

ရိုးရှင်းပြီး မြန်ဆန်တာက ဘာလဲ။ မှန်ပါတယ်၊ console နဲ့ 2D ပါ။ ပို၍တိကျသည်မှာ ကွန်ဆိုးလ်နှင့် သင်္ကေတများပင် ဖြစ်သည်။ တစ်ဖန်အင်တာနက်ပေါ်တွင် လှုံ့ဆော်မှုတစ်ခုကို ရှာဖွေခဲ့သည် (ယေဘုယျအားဖြင့်၊ အင်တာနက်သည် XNUMX ရာစု၏ တော်လှန်ရေးနှင့် အန္တရာယ်အရှိဆုံး တီထွင်မှုဟု ကျွန်တော်ထင်သည်)။ ကွန်ဆိုးလ် Tetris ကို ဖန်တီးတဲ့ ပရိုဂရမ်မာတစ်ယောက်ရဲ့ ဗီဒီယိုကို တူးဖော်မိပါတယ်။ ပြီးတော့ သူ့ကစားပုံသဏ္ဍာန်နဲ့ “မြွေ” လုပ်ဖို့ ဆုံးဖြတ်လိုက်တယ်။ ဗီဒီယိုကနေ အခြေခံအချက်နှစ်ချက်ဖြစ်တဲ့ - ဂိမ်းစက်ဝိုင်း (အခြေခံလုပ်ဆောင်ချက်/အပိုင်းသုံးပိုင်းပါ) နဲ့ ကြားခံအတွက် အထွက်ကို လေ့လာခဲ့ပါတယ်။

ဂိမ်းစက်ဝိုင်းသည် ဤကဲ့သို့သောပုံပေါက်နိုင်သည်-

int main()
   {
      Setup();
      // a game loop
      while (!quit)
      {
          Input();
          Logic();
          Draw();
          Sleep(gameSpeed);  // game timing
      }
      return 0;
   }

ကုဒ်သည် main() function တစ်ခုလုံးကို တစ်ပြိုင်နက် ဖော်ပြသည်။ သင့်လျော်သောမှတ်ချက်ပြီးနောက် ဂိမ်းစက်ဝန်းသည် စတင်သည်။ loop တွင် အခြေခံ function သုံးမျိုးရှိသည်- Input(), Logic(), Draw()။ ပထမဦးစွာ ထည့်သွင်းဒေတာထည့်သွင်းခြင်း (အဓိကအားဖြင့် ကီးစထရိများကို ထိန်းချုပ်ခြင်း)၊ ထို့နောက် ထည့်သွင်းထားသော အချက်အလက် လော့ဂျစ်ကို လုပ်ဆောင်ပြီးနောက် မျက်နှာပြင်သို့ ထုတ်ပေးပါ - ဆွဲပါ။ ပြီးတော့ ဘောင်တိုင်းမှာ။ ကာတွန်းကို ဖန်တီးပုံက ဒီလိုပါ။ ကာတွန်းထဲမှာလိုပါပဲ။ ပုံမှန်အားဖြင့်၊ ထည့်သွင်းထားသောဒေတာကို လုပ်ဆောင်ခြင်းသည် အချိန်အများဆုံးဖြစ်ပြီး၊ ကျွန်ုပ်သိသလောက်၊ ဂိမ်း၏ဘောင်နှုန်းကို ဆုံးဖြတ်သည်။ ဒါပေမယ့် ဒီနေရာမှာ Logic() function က အရမ်းမြန်ပါတယ်။ ထို့ကြောင့်၊ သင်သည် ဤအမြန်နှုန်းကို ဆုံးဖြတ်ပေးသည့် gameSpeed ​​ပါရာမီတာဖြင့် Sleep() လုပ်ဆောင်ချက်ကို အသုံးပြု၍ ဖရိမ်နှုန်းကို ထိန်းချုပ်ရမည်ဖြစ်သည်။

DevOps C++ နှင့် "kitchen wars" သို့မဟုတ် ထမင်းစားနေစဉ် ဂိမ်းများကို စတင်ရေးသားပုံ
ဂိမ်းစက်ဝန်း။ notepad တွင် "မြွေ" ပရိုဂရမ်ပြုလုပ်ခြင်း။

အကယ်၍ သင်သည် ဇာတ်ကောင်အခြေခံ ကွန်ဆိုးလ်ဂိမ်းကို တီထွင်နေပါက၊ ပုံမှန် 'cout' stream output ကို အသုံးပြု၍ ဒေတာများကို မျက်နှာပြင်သို့ ထုတ်ပေးနိုင်မည် မဟုတ်ပါ - ၎င်းသည် အလွန်နှေးကွေးပါသည်။ ထို့ကြောင့်၊ အထွက်အား စခရင်ကြားခံသို့ ပို့ရပါမည်။ ၎င်းသည် ပိုမိုမြန်ဆန်ပြီး ဂိမ်းသည် ချို့ယွင်းချက်မရှိဘဲ လည်ပတ်နိုင်မည်ဖြစ်သည်။ ရိုးရိုးသားသားပြောရရင်၊ ဖန်သားပြင်ကြားခံဆိုတာ ဘာလဲ၊ ဘယ်လိုအလုပ်လုပ်တယ်ဆိုတာကို ငါနားမလည်ဘူး။ ဒါပေမယ့် ဒီနေရာမှာ နမူနာကုဒ်တစ်ခုကို ပေးမှာဖြစ်ပြီး မှတ်ချက်တွေမှာ တစ်စုံတစ်ယောက်က အခြေအနေကို ရှင်းပြနိုင်ပါတယ်။

ဖန်သားပြင်ကြားခံတစ်ခု ရယူခြင်း (စကားပြောဆိုရန်)။

// create screen buffer for drawings
   HANDLE hConsole = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0,
 							   NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
   DWORD dwBytesWritten = 0;
   SetConsoleActiveScreenBuffer(hConsole);

အချို့သော string scoreLine (ရမှတ်ဖော်ပြသည့်လိုင်း) ကို တိုက်ရိုက်ပြသသည်-

// draw the score
   WriteConsoleOutputCharacter(hConsole, scoreLine, GAME_WIDTH, {2,3}, &dwBytesWritten);

သီအိုရီအရ၊ ဒီဂိမ်းမှာ ရှုပ်ထွေးတာ မရှိပါဘူး၊ ဒါဟာ ကောင်းမွန်တဲ့ entry-level ဥပမာတစ်ခုလို့ ကျွန်တော်ထင်ပါတယ်။ ကုဒ်ကို ဖိုင်တစ်ခုတွင် ရေးသားထားပြီး လုပ်ဆောင်ချက်များစွာဖြင့် ဖော်မတ်ထားသည်။ အတန်းမရှိ၊ အမွေလည်းမရှိ။ GitHub ရှိ သိုလှောင်ခန်းသို့ သွားခြင်းဖြင့် သင်သည် ဂိမ်း၏အရင်းအမြစ်ကုဒ်တွင် အရာအားလုံးကို သင်မြင်နိုင်သည်။

ဂိမ်း 2. Crazy Tanks

DevOps C++ နှင့် "kitchen wars" သို့မဟုတ် ထမင်းစားနေစဉ် ဂိမ်းများကို စတင်ရေးသားပုံ
ဂိမ်း Crazy Tanks

ကွန်ဆိုးလ်တွင် ဇာတ်ကောင်များကို ပုံနှိပ်ခြင်းသည် သင်ဂိမ်းအဖြစ်သို့ ပြောင်းလဲနိုင်သည့် အရိုးရှင်းဆုံးအရာ ဖြစ်ကောင်းဖြစ်နိုင်သည်။ သို့သော် ပြဿနာတစ်ခုပေါ်လာသည်- သင်္ကေတများသည် အမြင့်နှင့် အနံများ ကွဲပြားသည် (အမြင့်သည် အနံထက်ကြီးသည်)။ ဤနည်းအားဖြင့်၊ အရာအားလုံးသည် အချိုးအစားမညီဘဲ ဖြစ်နေမည်ဖြစ်ပြီး အောက်သို့ ရွေ့ခြင်းသည် ဘယ် သို့မဟုတ် ညာသို့ရွှေ့ခြင်းထက် ပိုမိုမြန်ဆန်စွာ ပေါ်လာမည်ဖြစ်သည်။ ဤအကျိုးသက်ရောက်မှုသည် Snake (ဂိမ်း 1) တွင် အလွန်သိသာသည်။ "Tanks" (ဂိမ်း 2) တွင် ကွဲပြားသောအရောင်များဖြင့် ဖန်သားပြင် pixels များကို ပန်းချီရေးဆွဲခြင်းဖြင့် အထွက်ကို စီစဥ်ထားသောကြောင့် ဤအားနည်းချက်မရှိပါ။ ကျွန်တော်က သရုပ်ဖေါ်ရေးတယ်လို့ ပြောလို့ရပါတယ်။ ပိုစိတ်ဝင်စားစရာကောင်းပေမယ့် ဒါက နည်းနည်းပိုရှုပ်ထွေးပါတယ်။

ဤဂိမ်းအတွက်၊ မျက်နှာပြင်ပေါ်တွင် pixels ပြသရန်အတွက် ကျွန်ုပ်၏စနစ်အား ဖော်ပြရန် လုံလောက်မည်ဖြစ်သည်။ ဒါကို ဂိမ်းရဲ့ အဓိက အစိတ်အပိုင်းလို့ ကျွန်တော် ယူဆပါတယ်။ ပြီးတော့ သင်ကိုယ်တိုင်က တခြားအရာအားလုံးကို လိုက်လုပ်နိုင်ပါတယ်။

ထို့ကြောင့်၊ ဖန်သားပြင်ပေါ်တွင် သင်မြင်ရသည့်အရာသည် ရောင်စုံစတုဂံများ ရွေ့လျားနေသည့် အစုအဝေးတစ်ခုမျှသာဖြစ်သည်။

DevOps C++ နှင့် "kitchen wars" သို့မဟုတ် ထမင်းစားနေစဉ် ဂိမ်းများကို စတင်ရေးသားပုံ
စတုဂံအစုံ

ထောင့်မှန်စတုဂံတစ်ခုစီကို ဂဏန်းများဖြင့်ဖြည့်ထားသော matrix ဖြင့် ကိုယ်စားပြုသည်။ စကားမစပ်၊ ကျွန်ုပ်သည် စိတ်ဝင်စားစရာကောင်းသော ကွဲပြားချက်တစ်ခုကို မီးမောင်းထိုးပြနိုင်သည် - ဂိမ်းရှိ matrices အားလုံးကို one-dimensional array အဖြစ် ပရိုဂရမ်ပြုလုပ်ထားသည်။ နှစ်ဘက်မြင်မဟုတ်ဘဲ တစ်ဖက်မြင်။ One-dimensional arrays များသည် အလုပ်လုပ်ရန် ပိုမိုလွယ်ကူပြီး ပိုမိုမြန်ဆန်ပါသည်။

DevOps C++ နှင့် "kitchen wars" သို့မဟုတ် ထမင်းစားနေစဉ် ဂိမ်းများကို စတင်ရေးသားပုံ
ဂိမ်း tank matrix ဥပမာ

DevOps C++ နှင့် "kitchen wars" သို့မဟုတ် ထမင်းစားနေစဉ် ဂိမ်းများကို စတင်ရေးသားပုံ
ဂိမ်း tank matrix ကို တစ်ဖက်ဖက်မြင် ခင်းကျင်းတစ်ခုအဖြစ် ကိုယ်စားပြုခြင်း။

DevOps C++ နှင့် "kitchen wars" သို့မဟုတ် ထမင်းစားနေစဉ် ဂိမ်းများကို စတင်ရေးသားပုံ
တစ်ဖက်မြင် ခင်းကျင်းတစ်ခုအဖြစ် matrix ကို ကိုယ်စားပြုခြင်း၏ ပိုမြင်သာသော ဥပမာ

သို့သော် array ၏ဒြပ်စင်များသို့ဝင်ရောက်ခွင့်သည် တစ်ဖက်မြင် array မဟုတ်သော်လည်း နှစ်ဖက်မြင်တစ်ခုကဲ့သို့ double loop တွင်ဖြစ်ပေါ်ပါသည်။ ကျွန်ုပ်တို့သည် မက်ထရစ်ကိန်းများဖြင့် လုပ်ဆောင်နေသေးသောကြောင့် ၎င်းကို လုပ်ဆောင်သည်။

DevOps C++ နှင့် "kitchen wars" သို့မဟုတ် ထမင်းစားနေစဉ် ဂိမ်းများကို စတင်ရေးသားပုံ
နှစ်ထပ်ကွင်းအတွင်း တစ်ဖက်မြင် ခင်းကျင်းတစ်ခုကို ဖြတ်သွားခြင်း။ Y - အတန်းအမှတ်အသား၊ X - ကော်လံသတ်မှတ်စနစ်

ကျေးဇူးပြု၍ သတိပြုပါ- ပုံမှန် matrix identifiers i, j အစား၊ x နှင့် y ကို သုံးပါသည်။ ဒီနည်းက မျက်လုံးကို ပိုသဘောကျပြီး ဦးနှောက်ကို ပိုနားလည်နိုင်စေတယ် ထင်ပါတယ်။ ထို့အပြင်၊ ထိုသို့သော အမှတ်အသားသည် နှစ်ဘက်မြင်ရုပ်ပုံတစ်ပုံ၏ သြဒီနိတ်ဝင်ရိုးများပေါ်တွင် အသုံးပြုသည့် matrices များကို အဆင်ပြေစွာ ပရောဂျက်လုပ်ရန် ဖြစ်နိုင်စေသည်။

ယခု pixels၊ အရောင်နှင့် screen output အကြောင်း။ StretchDIBits လုပ်ဆောင်ချက်ကို အထွက်အတွက် အသုံးပြုသည် (Header: windows.h; Library: gdi32.lib)။ အခြားအရာများကြားတွင်၊ ဤလုပ်ဆောင်ချက်သည် အောက်ပါတို့ကို လက်ခံရရှိသည်- ပုံအားပြသသည့်ကိရိယာ (ကျွန်ုပ်ကိစ္စတွင်၊ ၎င်းမှာ Windows ကွန်ဆိုးလ်)၊ ရုပ်ပုံပြသမှု၏ အစသြဒီနိတ်များ၊ ၎င်း၏ အကျယ်/အမြင့်၊ နှင့် ပုံတွင် သူ့ဘာသာသူ bytes ၏ array တစ်ခုဖြင့်ကိုယ်စားပြုသော bitmap ပုံစံ။ ဘိုက်အခင်းအဖြစ် ဘစ်မြေပုံ။

လုပ်ဆောင်ချက်တွင် StretchDIBits() လုပ်ဆောင်ချက်

// screen output for game field
   StretchDIBits(
               deviceContext,
               OFFSET_LEFT, OFFSET_TOP,
               PMATRIX_WIDTH, PMATRIX_HEIGHT,
               0, 0,
               PMATRIX_WIDTH, PMATRIX_HEIGHT,
               m_p_bitmapMemory, &bitmapInfo,
               DIB_RGB_COLORS,
               SRCCOPY
               );

VirtualAlloc() လုပ်ဆောင်ချက်ကို အသုံးပြု၍ ဤဘစ်မြေပုံအတွက် Memory ကို ကြိုတင်ခွဲဝေပေးပါသည်။ ဆိုလိုသည်မှာ၊ ထို့နောက်စခရင်ပေါ်တွင်ပြသမည့် pixels အားလုံးနှင့်ပတ်သက်သောအချက်အလက်များကိုသိမ်းဆည်းရန်အတွက်လိုအပ်သောဘိုက်အရေအတွက်ကိုလက်ဝယ်ထားသည်။

m_p_bitmapMemory bitmap ကိုဖန်တီးနေသည်-

// create bitmap
   int bitmapMemorySize = (PMATRIX_WIDTH * PMATRIX_HEIGHT) * BYTES_PER_PIXEL;
   void* m_p_bitmapMemory = VirtualAlloc(0, bitmapMemorySize, MEM_COMMIT, PAGE_READWRITE);

အကြမ်းဖျင်းပြောရလျှင် bitmap တွင် pixels အစုအဝေးတစ်ခုပါရှိသည်။ array ရှိ လေးဘိုက်တိုင်းသည် RGB pixel တစ်ခုဖြစ်သည်။ အနီအရောင်တန်ဖိုးအတွက် တစ်ဘိုက်၊ အစိမ်းရောင်အရောင်တန်ဖိုး (G)၊ အပြာရောင်တန်ဖိုး (B) တစ်ဘိုက်။ ထို့အပြင် အင်တင်းလုပ်ရန် တစ်ဘိုက်ကျန်သေးသည်။ ဤအရောင်သုံးမျိုး - အနီ/စိမ်း/အပြာ (RGB) - ရလာသော pixel အရောင်ကို ဖန်တီးရန်အတွက် ကွဲပြားသောအချိုးအစားများဖြင့် တစ်ခုနှင့်တစ်ခု ရောစပ်ထားသည်။

ယခု တစ်ဖန်၊ ထောင့်မှန်စတုဂံတစ်ခုစီ သို့မဟုတ် ဂိမ်းအရာဝတ္ထုတစ်ခုစီကို ဂဏန်းမက်ထရစ်ဖြင့် ကိုယ်စားပြုသည်။ ဤဂိမ်းအရာဝတ္ထုအားလုံးကို စုစည်းမှုတစ်ခုတွင် ထည့်သွင်းထားသည်။ ထို့နောက် ၎င်းတို့ကို ကစားကွင်းပေါ်တွင် ထားရှိကာ ကြီးမားသော ကိန်းဂဏာန်းမက်ထရစ်တစ်ခုကို ပုံဖော်ထားသည်။ ကျွန်ုပ်သည် matrix ရှိ နံပါတ်တစ်ခုစီကို သီးခြားအရောင်တစ်ခုနှင့် ဆက်စပ်ထားသည်။ ဥပမာအားဖြင့်၊ နံပါတ် 8 သည် အပြာရောင်၊ နံပါတ် 9 မှ အဝါရောင်၊ နံပါတ် 10 မှ မီးခိုးရောင် အစရှိသည်တို့နှင့် သက်ဆိုင်ပါသည်။ ထို့ကြောင့်၊ ကျွန်ုပ်တို့တွင် နံပါတ်တစ်ခုစီသည် အရောင်တစ်ခုဖြစ်သည့် ကစားကွင်း၏ matrix တစ်ခုရှိသည်ဟု ကျွန်ုပ်တို့ပြောနိုင်သည်။

ထို့ကြောင့်၊ ကျွန်ုပ်တို့တွင် တစ်ဖက်တွင် ကစားကွင်းတစ်ခုလုံး၏ ကိန်းဂဏာန်းမက်ထရစ်တစ်ခုနှင့် အခြားတစ်ဖက်တွင် ပုံကိုပြသရန်အတွက် bitmap တစ်ခုရှိသည်။ ယခုအချိန်အထိ၊ bitmap သည် "ဗလာ" ဖြစ်သည် - ၎င်းတွင်အလိုရှိသောအရောင်၏ pixels များအကြောင်းအချက်အလက်များမပါဝင်သေးပါ။ ဆိုလိုသည်မှာ ကစားကွက်၏ ကိန်းဂဏာန်းမက်ထရစ်ကို အခြေခံ၍ pixel တစ်ခုစီ၏ bitmap ကို ဖြည့်သွင်းရန် နောက်ဆုံးအဆင့်မှာ ဖြစ်လိမ့်မည်။ ဤကဲ့သို့ အသွင်ပြောင်းခြင်း၏ ရှင်းလင်းသော ဥပမာကို အောက်ပါပုံတွင် ဖော်ပြထားသည်။

DevOps C++ နှင့် "kitchen wars" သို့မဟုတ် ထမင်းစားနေစဉ် ဂိမ်းများကို စတင်ရေးသားပုံ
ကစားကွင်း၏ ဒစ်ဂျစ်တယ်မက်ထရစ်ကို အခြေခံ၍ bitmap (Pixel matrix) ကိုဖြည့်ခြင်း၏ဥပမာတစ်ခု (အရောင်ညွှန်းကိန်းများသည် ဂိမ်းရှိညွှန်းကိန်းများနှင့်မတူညီပါ)

ဂိမ်းထဲက ကုဒ်အစစ်တစ်ပိုင်းကိုလည်း တင်ပြပေးပါမယ်။ ကွင်းဆက်တစ်ခုစီတွင် ပြောင်းလဲနိုင်သော အရောင်အညွှန်းကိန်းကို ကစားကွင်း၏ ဂဏန်းမက်ထရစ် (mainDigitalMatrix) မှ တန်ဖိုး (အရောင်အညွှန်း) သတ်မှတ်ပေးသည်။ ထို့နောက် အညွှန်းကိန်းပေါ်အခြေခံ၍ အရောင်ပြောင်းနိုင်သောအရောင်ကို သူ့ဘာသာသူသတ်မှတ်သည်။ ထို့နောက် ရရှိလာသောအရောင်ကို အနီ၊ အစိမ်းနှင့် အပြာ (RGB) အချိုးအဖြစ် ပိုင်းခြားထားသည်။ pixelPadding နှင့်အတူ၊ ဤအချက်အလက်ကို pixel ထဲသို့ ထပ်ခါတလဲလဲ ရေးသားပြီး bitmap တွင် အရောင်ပုံတစ်ပုံအဖြစ် ပုံဖော်ထားသည်။

ကုဒ်သည် နားလည်ရခက်နိုင်သည့် pointers နှင့် bitwise လုပ်ဆောင်ချက်များကို အသုံးပြုသည်။ ဒါကြောင့် ဒီလိုဖွဲ့စည်းပုံတွေ ဘယ်လိုအလုပ်လုပ်တယ်ဆိုတာကို တစ်နေရာရာမှာ ဖတ်ရှုဖို့ အကြံပေးချင်ပါတယ်။

ကစားကွင်း၏ ကိန်းဂဏာန်းမက်ထရစ်ကို အခြေခံ၍ ဘစ်မြေပုံကို ဖြည့်စွက်ခြင်း-

// set pixel map variables
   int colorIndex;
   COLORREF color;
   int pitch;
   uint8_t* p_row;
 
   // arrange pixels for game field
   pitch = PMATRIX_WIDTH * BYTES_PER_PIXEL;     // row size in bytes
   p_row = (uint8_t*)m_p_bitmapMemory;       //cast to uint8 for valid pointer arithmetic
   							(to add by 1 byte (8 bits) at a time)   
   for (int y = 0; y < PMATRIX_HEIGHT; ++y)
   {
       uint32_t* p_pixel = (uint32_t*)p_row;
       for (int x = 0; x < PMATRIX_WIDTH; ++x)
       {
           colorIndex = mainDigitalMatrix[y * PMATRIX_WIDTH + x];
           color = Utils::GetColor(colorIndex);
           uint8_t blue = GetBValue(color);
           uint8_t green = GetGValue(color);
           uint8_t red = GetRValue(color);
           uint8_t pixelPadding = 0;
 
           *p_pixel = ((pixelPadding << 24) | (red << 16) | (green << 8) | blue);
           ++p_pixel;
       }
       p_row += pitch;
   }

အထက်တွင်ဖော်ပြထားသည့်နည်းလမ်းအရ Crazy Tanks ဂိမ်းတွင် ပုံတစ်ပုံ (ဘောင်) ကို Draw() လုပ်ဆောင်ချက်ရှိ စခရင်ပေါ်တွင် ပြသထားသည်။ Input() လုပ်ဆောင်ချက်တွင် သော့ခတ်ခြင်းများကို စာရင်းသွင်းပြီး Logic() လုပ်ဆောင်ချက်တွင် ၎င်းတို့၏ နောက်ဆက်တွဲလုပ်ဆောင်မှုများကို ပုံအသစ်တစ်ခု (ဘောင်) ဖွဲ့ထားပါသည်။ မှန်ပါသည်၊ ဂိမ်းအရာဝတ္ထုများသည် ကစားကွင်းတွင် မတူညီသောအနေအထားရှိပြီးသားဖြစ်နိုင်ပြီး၊ ထို့ကြောင့် မတူညီသောနေရာတစ်ခုတွင် ရေးဆွဲထားသည်။ ကာတွန်း (လှုပ်ရှားမှု) ဖြစ်ပျက်ပုံ။

သီအိုရီအရ (ဘာမှမမေ့သေးရင်) ပထမဂိမ်း ("မြွေ") မှ ဂိမ်းဝိုင်းကို နားလည်ခြင်းနှင့် ဒုတိယဂိမ်းမှ စခရင်ပေါ်ရှိ pixels များပြသသည့်စနစ် ("Tans") သည် သင်ရေးရန် လိုအပ်သည့်အရာအားလုံးဖြစ်သည်။ Windows အောက်ရှိ သင်၏ 2D ဂိမ်းများ။ အသံမဲ့။ 😉 ကျန်​တဲ့အပိုင်း​တွေက​တော့ အမိုက်​စား​တွေချည်းပါပဲ။

ဟုတ်ပါတယ်၊ Tanks ဂိမ်းက "Snake" ထက် အများကြီး ပိုရှုပ်ထွေးပါတယ်။ ငါ C++ ဘာသာစကားကို သုံးထားပြီးပြီ၊ ဆိုလိုသည်မှာ၊ အတန်းများနှင့် မတူညီသော ဂိမ်းအရာဝတ္ထုများကို ဖော်ပြခဲ့သည်။ ကျွန်ုပ်သည် ကျွန်ုပ်၏ကိုယ်ပိုင်စုစည်းမှုကို ဖန်တီးခဲ့သည် - ကုဒ်ကို headers/Box.h တွင် ကြည့်ရှုနိုင်ပါသည်။ စကားမစပ်၊ စုဆောင်းမှုတွင် မှတ်ဉာဏ်ယိုစိမ့်မှု ဖြစ်နိုင်ခြေများသည်။ အညွှန်းများကို သုံးသည်။ မှတ်ဉာဏ်ဖြင့် လုပ်ဆောင်ခဲ့သည်။ စာအုပ်က ကျွန်တော့်ကို အများကြီး အထောက်အကူ ပြုတယ်လို့ ပြောရမယ်။ ဂိမ်းပရိုဂရမ်မှတဆင့် C++ ကိုစတင်ခြင်း။. C++ စတင်လေ့လာသူများအတွက် ကောင်းမွန်သော စတင်မှုဖြစ်သည်။ သေးငယ်သည်၊ စိတ်ဝင်စားစရာကောင်းပြီး စနစ်တကျဖွဲ့စည်းထားသည်။

ဒီဂိမ်းကို ဖန်တီးဖို့ ခြောက်လလောက် အချိန်ယူရတယ်။ အလုပ်မှာ နေ့လယ်စာနဲ့ အဆာပြေချိန်တွေမှာ အဓိကရေးတယ်။ သူသည် ရုံးမီးဖိုချောင်တွင်ထိုင်ကာ အစာကိုနင်းကာ ကုဒ်ရေးသည်။ ဒါမှမဟုတ် အိမ်မှာ ညစာစားပါ။ ဒါကြောင့် ဒီ "မီးဖိုချောင်စစ်ပွဲ" နဲ့ အဆုံးသတ်ခဲ့တယ်။ အမြဲလိုလို၊ ကျွန်ုပ်သည် မှတ်စုစာအုပ်ကို တက်ကြွစွာ အသုံးပြုခဲ့ပြီး အယူအဆဆိုင်ရာ အရာများအားလုံးသည် ၎င်းတွင် မွေးဖွားလာခဲ့သည်။

လက်တွေ့အပိုင်းကို ပြီးမြောက်ရန်၊ ကျွန်ုပ်၏ မှတ်စုစာအုပ်ကို စကင်န်ဖတ်ပါမည်။ အတိအကျရေးထားတယ်၊ ဆွဲတယ်၊ ရေတွက်တယ်၊ ဒီဇိုင်းထုတ်တယ်ဆိုတာ ပြဖို့...

DevOps C++ နှင့် "kitchen wars" သို့မဟုတ် ထမင်းစားနေစဉ် ဂိမ်းများကို စတင်ရေးသားပုံ
တင့်ကားပုံများ ဒီဇိုင်းဆွဲခြင်း။ ဖန်သားပြင်ပေါ်တွင် တိုင်ကီတစ်ခုစီသည် မည်မျှ pixels မည်မျှ သိမ်းပိုက်သင့်သည်ကို ဆုံးဖြတ်ခြင်း။

DevOps C++ နှင့် "kitchen wars" သို့မဟုတ် ထမင်းစားနေစဉ် ဂိမ်းများကို စတင်ရေးသားပုံ
၎င်း၏ဝင်ရိုးတစ်ဝိုက်တွင် တိုင်ကီလှည့်ခြင်းအတွက် algorithm နှင့် ဖော်မြူလာများကို တွက်ချက်ခြင်း။

DevOps C++ နှင့် "kitchen wars" သို့မဟုတ် ထမင်းစားနေစဉ် ဂိမ်းများကို စတင်ရေးသားပုံ
ကျွန်ုပ်၏ စုစည်းမှု အစီအစဉ် ( Memory ယိုစိမ့်မှု ၊ ဖြစ်နိုင်ချေ အများဆုံး )။ စုစည်းမှုကို Linked List အမျိုးအစားအလိုက် ဖန်တီးထားသည်။

DevOps C++ နှင့် "kitchen wars" သို့မဟုတ် ထမင်းစားနေစဉ် ဂိမ်းများကို စတင်ရေးသားပုံ
၎င်းတို့သည် ဂိမ်းတွင် ဉာဏ်ရည်တုကို ချိတ်ဆက်ရန် အချည်းနှီးသော ကြိုးပမ်းမှုများဖြစ်သည်။

သဘောတရား

"မိုင်တစ်ထောင်ခရီးကို ပထမခြေလှမ်းနဲ့စတယ်" (ရှေးတရုတ်ပညာ)

လက်တွေ့မှ သီအိုရီသို့ ကူးပြောင်းကြပါစို့။ ကိုယ့်ဝါသနာအတွက် အချိန်ကို ဘယ်လိုရှာမလဲ။

  1. သင်အမှန်တကယ်လိုချင်တာကို ဆုံးဖြတ်ပါ (ဖြစ်ချင်တော့ ဒါက အခက်ဆုံးအပိုင်း)။
  2. ဦးစားပေးသတ်မှတ်ပါ။
  3. ပိုမိုမြင့်မားသောဦးစားပေးမှုများအတွက် "အပို" အရာအားလုံးကိုစတေးပါ။
  4. ပန်းတိုင်ဆီသို့ နေ့စဉ် လျှောက်လှမ်းပါ။
  5. ဝါသနာတစ်ခုအတွက် အားလပ်ချိန် နှစ်နာရီ သို့မဟုတ် သုံးနာရီကို မမျှော်လင့်ပါနှင့်။

တစ်ဖက်တွင် သင်သည် သင်လိုချင်သောအရာကို ဆုံးဖြတ်ပြီး ဦးစားပေးရန် လိုအပ်သည်။ အခြားတစ်ဖက်တွင်၊ အချို့သော လုပ်ငန်းများ/ပရောဂျက်များကို စွန့်လွှတ်နိုင်သည် ။ တစ်နည်းအားဖြင့် သင်သည် "အပို" အရာအားလုံးကို စွန့်လွှတ်ရပေမည်။ ဘဝမှာ အများဆုံး အဓိက လုပ်ဆောင်ချက် သုံးခုလောက် လုပ်ရမယ်လို့ တစ်နေရာရာမှာ ကြားဖူးတယ်။ ထို့နောက် သင်သည် ၎င်းတို့ကို အမြင့်ဆုံးအရည်အသွေးဖြင့် လုပ်ဆောင်နိုင်မည်ဖြစ်သည်။ ထို့အပြင် နောက်ထပ်ပရောဂျက်များ/လမ်းညွှန်ချက်များသည် သာလွန်နေတော့မည်ဖြစ်သည်။ သို့သော် ဤအရာအားလုံးသည် ပုဂ္ဂလဒိဋ္ဌိနှင့် တစ်ဦးချင်း ဖြစ်နိုင်သည်။

ရွှေစည်းမျဉ်းတစ်ခုရှိပါတယ်- 0% နေ့ဘယ်တော့မှမရှိပါ အင်ဒီဆော့ဖ်ဝဲရေးသားသူ၏ ဆောင်းပါးတစ်ပုဒ်တွင် ၎င်းအကြောင်းကို လေ့လာခဲ့သည်။ အကယ်၍ သင်သည် ပရောဂျက်တစ်ခုတွင် လုပ်ဆောင်နေပါက ၎င်းကို နေ့တိုင်းလုပ်ပါ။ ပြီးတော့ မင်းဘယ်လောက်လုပ်လဲ အရေးမကြီးဘူး။ စကားလုံးတစ်လုံး (သို့) ကုဒ်တစ်ကြောင်းရေးပါ၊ သင်ခန်းစာဗီဒီယိုကိုကြည့်ပါ သို့မဟုတ် ဘုတ်တစ်ခုထဲသို့ သံချောင်းတစ်ချောင်းရိုက်ပါ - တစ်ခုခုလုပ်ပါ။ အခက်ခဲဆုံးအရာက စတင်ရန်ဖြစ်သည်။ စတင်ပြီးသည်နှင့် သင်အလိုရှိသည်ထက် အနည်းငယ်ပို၍ လုပ်ဆောင်နိုင်မည်ဖြစ်သည်။ ဤနည်းဖြင့် သင်သည် သင်၏ပန်းတိုင်ဆီသို့ အဆက်မပြတ် ရွေ့လျားမည်ဖြစ်ပြီး၊ ကျွန်ုပ်ကို ယုံကြည်ပါ၊ အလွန်လျင်မြန်ပါသည်။ အရာအားလုံး၏ အဓိကအတားအဆီးမှာ အချိန်ဆွဲခြင်းပင်ဖြစ်သည်။

ထို့အပြင် 5၊ 10၊ 15 မိနစ်၏အခမဲ့ "လွှစာ" ကို လျှော့မတွက်ဘဲ လျစ်လျူရှုထားရန် အရေးကြီးပြီး တစ်နာရီ သို့မဟုတ် နှစ်နာရီကြာသော "သစ်တုံးကြီးများ" ကို စောင့်ပါ။ မင်း တန်းစီရပ်နေတာလား။ သင့်ပရောဂျက်အတွက် တစ်ခုခုကို စဉ်းစားပါ။ စက်လှေကားစီးမလား တစ်ခုခုကို notepad မှာ ချရေးပါ။ မင်း ဘတ်စ်ကားနဲ့ ခရီးသွားနေတာလား။ ကောင်းပြီ၊ ဆောင်းပါးအချို့ကိုဖတ်ပါ။ အခွင့်အရေးတိုင်းကို အသုံးချပါ။ YouTube တွင် ကြောင်များနှင့် ခွေးများကို ကြည့်ရှုခြင်းကို ရပ်လိုက်ပါ။ သင့်ဦးနှောက်ကို မညစ်ညမ်းစေနှင့်။

ပြီးတော့ နောက်ဆုံးတစ်ချက်။ ဤဆောင်းပါးကိုဖတ်ပြီးနောက် သင်သည် ဂိမ်းအင်ဂျင်များမသုံးဘဲ ဂိမ်းများကိုဖန်တီးရန်စိတ်ကူးကို နှစ်သက်ပါက Casey Muratori အမည်ကို သတိရပါ။ ဒီကောင်ရှိတယ်။ က်ဘ်ဆိုက်. "ကြည့်ရှုခြင်း -> ယခင်အပိုင်းများ" ကဏ္ဍတွင် ပရော်ဖက်ရှင်နယ်ဂိမ်းကို အစမှအဆုံး ဖန်တီးခြင်းနှင့်ပတ်သက်၍ အံ့သြဖွယ်ကောင်းသော အခမဲ့ဗီဒီယိုသင်ခန်းစာများကို သင်တွေ့လိမ့်မည်။ Window အတွက် Intro to C သင်ခန်းစာငါးခုတွင် သင်တက္ကသိုလ်၏ငါးနှစ်ကြာလေ့လာမှုထက် သင်ပိုမိုသင်ယူနိုင်လိမ့်မည် (ဤအကြောင်းကို ဗီဒီယိုအောက်တွင် တစ်စုံတစ်ယောက်က ရေးထားသည်)။

သင့်ကိုယ်ပိုင်ဂိမ်းအင်ဂျင်ကို တီထွင်ခြင်းဖြင့် သင်သည် လက်ရှိအင်ဂျင်များကို ပိုမိုကောင်းမွန်စွာ နားလည်နိုင်လိမ့်မည်ဖြစ်ကြောင်း Casey က ရှင်းပြသည်။ လူတိုင်းအလိုအလျောက်လုပ်ရန်ကြိုးစားနေသည့်ဘောင်လောကတွင်၊ သင်အသုံးပြုမည့်အစား ဖန်တီးရန်သင်ယူပါ။ ကွန်ပြူတာရဲ့ သဘောသဘာဝကို သင်နားလည်ပါတယ်။ ထို့အပြင် သင်သည် ပိုမိုထက်မြက်ပြီး ရင့်ကျက်သော ပရိုဂရမ်မာတစ်ဦးလည်း ဖြစ်လာမည်ဖြစ်သည်။

မင်းရွေးချယ်တဲ့လမ်းမှာ ကံကောင်းပါစေ။ ပြီးတော့ ကမ္ဘာကြီးကို ပိုပရော်ဖက်ရှင်နယ်ဖြစ်အောင် လုပ်ကြရအောင်။

Author: Grankin Andrey၊ DevOps



source: www.habr.com