ãç§ã¯èªåãäœãç¥ããªãããšãç¥ã£ãŠããããœã¯ã©ãã¹
誰ã®ããïŒ ãã¹ãŠã®éçºè ã«åŸãåããèªåãã¡ã®ã²ãŒã ããã¬ã€ããã IT æ åœè åãã§ãã
äœã«ã€ããŠïŒ å¿ èŠã«å¿ã㊠C/C++ ã§ã²ãŒã ãæžãå§ããæ¹æ³!
ãããèªãã¹ãçç±: ã¢ããªéçºã¯ç§ã®ä»äºã®å°éåéã§ã¯ãããŸããããæ¯é±ã³ãŒãã£ã³ã°ããããã«åªããŠããŸãã ã²ãŒã ã倧奜ããªã®ã§ïŒ
ããã«ã¡ã¯ãç§ã®ååã¯
ã³ã³ãã¥ãŒã¿ãŒ ã²ãŒã æ¥çã¯å·šå€§ã§ãä»æ¥ã§ã¯æ ç»æ¥çãããããã«åãããŠããŸãã ã²ãŒã ã¯ãã³ã³ãã¥ãŒã¿ãŒã®éçºãå§ãŸã£ãé ãããçŸä»£ââã®åºæºããèŠããšãè€éã§åºæ¬çãªéçºææ³ã䜿çšããŠäœæãããŠããŸããã æéãçµã€ã«ã€ããŠããã§ã«ããã°ã©ã ãããã°ã©ãã£ãã¯ã¹ãç©çåŠããµãŠã³ããåããã²ãŒã ãšã³ãžã³ãç»å Žãå§ããŸããã ããã«ãããã²ãŒã ã®åºç€ã«ã€ããŠæ°ã«ããããšãªããã²ãŒã èªäœã®éçºã«éäžã§ããããã«ãªããŸãã ããããããããšãšã³ãžã³ãšãšãã«ãéçºè
ã¯ãç²ç®ã«ãªãããå£åããŠãããŸãã ã²ãŒã ã®å¶äœãã®ãã®ãã³ã³ãã¢äžã«çœ®ãããŸãã ãããŠãçç£éãå質ãããåªå
ããå§ããŸãã
åæã«ãä»ã®äººã®ã²ãŒã ããã¬ã€ãããšããç§ãã¡ã¯ä»ã®äººãèãåºããå Žæãããããããã£ã©ã¯ã¿ãŒãã²ãŒã ã¡ã«ãã¯ã¹ã«ãã£ãŠåžžã«å¶éãããŸãã ããã§æ°ã¥ããã®ã§ããâŠ
âŠç§ã ãã察象ãšããŠãããªãèªèº«ã®äžçãåµé ããæãæ¥ãŸããã ç§ãç¶ã§ãããåã§ãããèéã§ããäžçã§ãïŒ
ãããŠç§ã¯ãç¬èªã®ã²ãŒã ãšã³ãžã³ãšãã®äžã§ã²ãŒã ãäœæããããšã§ãç®ãéããçªãæããè»å®€å ã®ç©ºæ°ãæ±²ã¿äžããããšãã§ããããã«ãªããããçµéšè±å¯ã§äžå¯æ¬ ãªããã°ã©ããŒã«ãªãããšå¿ããä¿¡ããŠããŸãã
ãã®èšäºã§ã¯ãç§ãã©ã®ããã«ã㊠C / C ++ ã§å°ããªã²ãŒã ãæžãå§ããã®ããéçºããã»ã¹ãšã¯äœãªã®ãããããŠå¿ããç°å¢ã®äžã§ã©ãã§è¶£å³ã®ããã®æéãèŠã€ããŠããã®ãã«ã€ããŠèª¬æããããšæããŸãã ããã¯äž»èŠ³çã§ãããå人ã®ã¹ã¿ãŒãã®ããã»ã¹ã説æããŠããŸãã ç¡ç¥ãšä¿¡ä»°ãçŸåšã®äžçã«ã€ããŠã®ç§ã®å人çãªã€ã¡ãŒãžã«ã€ããŠã®è³æã§ãã ã€ãŸãããè¡æ¿ã¯ããªãå人ã®è³ã¿ãã«ã¯è²¬ä»»ãæã¡ãŸããïŒããšããããšã§ãã
ç·Žç¿
ãå®è·µã®ãªãç¥èã¯ç¡çã§ãããç¥èã®ãªãå®è·µã¯å±éºã§ãããã åå
ç§ã®ããŒãã¯ç§ã®äººçã§ãïŒ
ã€ãŸããå®éã«ã¯ãç§ã«ãšã£ãŠãã¹ãŠã¯ããŒãããå§ãŸããšèšããŸãã ããã§ã¯æ¯æ¥ã®ã¿ã¹ã¯ãæžãçããã ãã§ãªããçµµãæããããããã°ã©ã ãäœæãããããããŒãã£ãŒããèšèšããããæ°åŠçãªåé¡ãå«ãåé¡ã解決ãããããããšãã§ããŸãã å¿
ãã¡ã¢åž³ã䜿çšããéçã®ã¿ã§æžããŸãã ç§ã®æèŠã§ã¯ãæž
æœã§å¿«é©ã§ä¿¡é Œæ§ããããŸãã
ç§ã®ïŒãã§ã«èšå
¥ãããïŒããŒãã èŠãç®ã¯ãããªæãã§ãã æ¥åžžã®ã¿ã¹ã¯ãã¢ã€ãã¢ãå³é¢ããã€ã¢ã°ã©ã ããœãªã¥ãŒã·ã§ã³ãé»ç°¿èšãã³ãŒããªã©ãå«ãŸããŠããŸãã
ãã®æ®µéã§ãç§ã¯ãªããšã XNUMX ã€ã®ãããžã§ã¯ããå®äºããããšãã§ããŸãã (ããã¯ãç§ã®ç解ã§ã¯ãæçµæ§ãã§ãããã©ã®è£œåãæ¯èŒçç¡éã«éçºã§ããããã§ã)ã
- ãããžã§ã¯ã0ïŒ ããã¯ãUnity ã²ãŒã ãšã³ãžã³ã䜿çšã㊠C# ã§äœæããã Architect ã㢠3D ã·ãŒã³ã§ãã macOS ããã³ Windows ãã©ãããã©ãŒã çšã
- ã²ãŒã 1ïŒ Windows çšã®ã³ã³ãœãŒã« ã²ãŒã Simple Snake (誰ãããã¹ããŒã¯ããšããŠç¥ã£ãŠããŸã)ã Cã§æžãããŠããŸãã
- ã²ãŒã 2ïŒ ã³ã³ãœãŒã« ã²ãŒã Crazy Tanks (çããã«ã¯ãTanksããšããŠç¥ãããŠããŸã) ã¯ããã§ã« C++ (ã¯ã©ã¹ã䜿çš) ã§æžãããŠãããWindows äžã§ãäœæãããŠããŸãã
ãããžã§ã¯ã 0 ã¢ãŒããã¯ãã®ãã¢
- ãã©ãããã©ãŒã ïŒ Windows (Windows 7ã10)ãMac OS (OS X El Capitan v. 10.11.6)
- èšèªïŒ C#
- ã²ãŒã ãšã³ãžã³:
Unity - ã€ã³ã¹ãã¬ãŒã·ã§ã³ïŒ
ããªã³ã»ã©ã€ã« - ãªããžããª:
GitHubã®
3D ã·ãŒã³ ã¢ãŒããã¯ãã®ãã¢
æåã®ãããžã§ã¯ã㯠C/C++ ã§ã¯ãªããUnity ã²ãŒã ãšã³ãžã³ã䜿çšãã C# ã§å®è£
ãããŸããã ãã®ãšã³ãžã³ã¯ããŒããŠã§ã¢ã«å¯ŸããèŠæ±ãããã»ã©é«ããããŸããã§ããã
ç§ã«ãšã£ãŠ Unity ã§ã®ç®æšã¯ãããçš®ã®ã²ãŒã ãéçºããããšã§ã¯ãããŸããã§ããã ããçš®ã®ãã£ã©ã¯ã¿ãŒãå«ã 3D ã·ãŒã³ãäœæãããã£ãã®ã§ãã 圌ããããã¯ããã圌女 (ç§ãæããã女ã®åãã¢ãã«ã«ãã =) ã¯ç§»åããå€ã®äžçãšäº€æµããªããã°ãªããŸããã§ããã Unity ãšã¯äœããéçºããã»ã¹ãšã¯äœããäœããäœæããã®ã«ã©ããããã®åŽåããããããç解ããããšã ããéèŠã§ããã ããã㊠Architect Demo ãããžã§ã¯ããèªçããŸãã (ååã¯ã»ãšãã©ã§ãããããæãã€ãããã®ã§ã)ã ããã°ã©ãã³ã°ãã¢ããªã³ã°ãã¢ãã¡ãŒã·ã§ã³ããã¯ã¹ãã£ãªã³ã°ãæ¯æ¥è¡ãã«ã¯ããããã XNUMX ãæããããŸããã
ç§ã¯ YouTube 㧠3D ã¢ãã«ã®äœææ¹æ³ã«é¢ãããã¥ãŒããªã¢ã« ãããªããå§ããŸããã
ã¢ãã¡ãŒã·ã§ã³ãèªç¶ã«èŠããããã«ãé骚ãšè¿œå ã®ããŒã³ ã¬ããŒãã¢ãã«åããŸãã ãã®ãããªã¬ãã¹ã³ãçµãããšãã¢ãã¡ãŒã·ã§ã³æ ç»ã®ã¯ãªãšã€ã¿ãŒãããã£ã 30 ç§ã®ãããªãäœæããã ãã§ããã©ãã»ã©å€§å€ãªä»äºãããŠããããããããŸãã ãããã3D æ ç»ã¯äœæéãç¶ããŸãã ãããŠãç§ãã¡ã¯åå ŽããåºãŠããŠæ¬¡ã®ããã«èšããŸããããããã ããªã挫ç»/æ ç»ã ïŒ åœŒãã¯ãã£ãšããŸãã§ãããããããªãâŠãæãè ïŒ
ãããŠããã®ãããžã§ã¯ãã®ããã°ã©ãã³ã°ã«ã€ããŠãã 2 ã€ã çµå±ã®ãšãããç§ã«ãšã£ãŠæãèå³æ·±ãéšåã¯æ°åŠçãªéšåã§ããã ã·ãŒã³ (ãããžã§ã¯ãã®èª¬æã«ãããªããžããªãžã®ãªã³ã¯) ãå®è¡ãããšãã«ã¡ã©ãçäœã®å¥³ã®åã®ãã£ã©ã¯ã¿ãŒã®åšããå転ããããšãããããŸãã ãã®ãããªã«ã¡ã©ã®å転ãããã°ã©ã ããã«ã¯ããŸãå (3D) äžã®äœçœ®ç¹ã®åº§æšãèšç®ãã次ã«ç (XNUMXD) äžã®äœçœ®ç¹ã®åº§æšãèšç®ããå¿ èŠããããŸããã é¢çœãããšã«ãç§ã¯åŠæ ¡ã®æ°åŠãå«ãã§ããã€ãã¹ã§æ°åŠãç¥ã£ãŠããŸããã ãããããéšåçã«ã¯ãåŠæ ¡ã§ã¯ããã®æ°åŠã人çã§ã©ã®ããã«å¿çšãããã®ããåã«èª¬æããŠããªãããã§ãã ããããèªåã®ç®æšã倢ã«å€¢äžã«ãªããšãå¿ã¯ã¯ãªã¢ã«ãªããæããã«ãªããŸãã ãããŠãè€éãªã¿ã¹ã¯ããšããµã€ãã£ã³ã°ãªåéºãšããŠèªèãå§ããŸãã ãããŠãããªãã¯ããèããŸããããªãã*æãã*æ°åŠè ã¯ããããã®å ¬åŒãã©ãããå°ãåºããã®ããéåžžã¯æããŠãããªãã£ãã®ã ããã?ã
åãšçäžã®ç¹ã®åº§æšãèšç®ããå
¬åŒã®èšç® (ç§ã®ããŒããã)
ã²ãŒã 1
- ãã©ãããã©ãŒã ïŒ Windows (Windows 7ã10ã§ãã¹ãæžã¿)
- èšèªïŒ çŽç²ãªCã§æžãããŠãããšæããŸã
- ã²ãŒã ãšã³ãžã³: Windowsã³ã³ãœãŒã«
- ã€ã³ã¹ãã¬ãŒã·ã§ã³ïŒ
ãžã£ãããx9 - ãªããžããª:
GitHubã®
ã·ã³ãã«ãªã¹ããŒã¯ã²ãŒã
3D ã·ãŒã³ã¯ã²ãŒã ã§ã¯ãããŸããã ããã«ã3D ãªããžã§ã¯ã (ç¹ã«ãã£ã©ã¯ã¿ãŒ) ã®ã¢ããªã³ã°ãšã¢ãã¡ãŒã·ã§ã³åã¯æéãããããå°é£ã§ãã Unity ãããã£ãŠã¿ãçµæãåºç€ããç¶ç¶ããšãããå§ããªããã°ãªããªãããšã«æ°ã¥ããŸããã ã²ãŒã ã®æ§é ãã®ãã®ãç解ããããã®ãã·ã³ãã«ãã€é«éã§ãããªããåæã«ã°ããŒãã«ãªãã®ã
ã§ã¯ãç°¡åãã€è¿ éã«ã§ãããã®ã¯äœã§ãããã? ãããã³ã³ãœãŒã«ãš2Dã§ãã ããæ£ç¢ºã«ã¯ãã³ã³ãœãŒã«ãšã·ã³ãã«ãå«ãŸããŸãã åã³ãç§ã¯ã€ã³ã¿ãŒãããã§ã€ã³ã¹ãã¬ãŒã·ã§ã³ãæ¢ãå§ããŸããïŒäžè¬çã«ãç§ã¯ã€ã³ã¿ãŒãããã XNUMX äžçŽã§æãé©åœçã§å±éºãªçºæã ãšèããŠããŸãïŒã ã³ã³ãœãŒã«çãããªã¹ãäœæããããããã°ã©ããŒã®ãããªãæãåºããŸããã ãããŠãèªåã®ã²ãŒã ã«äŒŒããŠã圌ã¯ãèããåãåãããšã«ããŸããã ãã®ãããªãããã²ãŒã ã«ãŒã (XNUMX ã€ã®åºæ¬çãªæ©èœ/éšå) ãšãããã¡ãŒãžã®åºåãšãã XNUMX ã€ã®åºæ¬çãªããšã«ã€ããŠåŠã³ãŸããã
ã²ãŒã ã«ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
int main()
{
Setup();
// a game loop
while (!quit)
{
Input();
Logic();
Draw();
Sleep(gameSpeed); // game timing
}
return 0;
}
ãã®ã³ãŒãã¯ã main() é¢æ°å šäœãäžåºŠã«ç€ºããŸãã ãããŠã察å¿ããã³ã¡ã³ãã®åŸã«ã²ãŒã ãµã€ã¯ã«ãå§ãŸããŸãã ã«ãŒãã«ã¯ãInput()ãLogic()ãDraw() ãšãã XNUMX ã€ã®åºæ¬é¢æ°ããããŸãã ãŸããããŒã¿ã®å ¥åïŒäž»ã«ããŒã¹ãããŒã¯ã®å¶åŸ¡ïŒã次ã«å ¥åãããããŒã¿ãããžãã¯ã§åŠçããç»é¢ã«è¡šç€ºãã - æç»ããŸãã ãããŠã©ã®ãã¬ãŒã ãããã§ãã ã¢ãã¡ãŒã·ã§ã³ã¯ãã®ããã«ããŠäœãããŸãã ãŸãã§æŒ«ç»ã®ããã ã éåžžãå ¥åããŒã¿ã®åŠçã«æãæéãããããç§ã®ç¥ãéãããããã²ãŒã ã®ãã¬ãŒã ã¬ãŒãã決å®ããŸãã ãã ããããã§ã® Logic() é¢æ°ã¯éåžžã«é«éã§ãã ãããã£ãŠããã¬ãŒã ã¬ãŒãã¯ããã®ã¬ãŒãã決å®ãã gameSpeed ãã©ã¡ãŒã¿ã䜿çšã㊠Sleep() é¢æ°ã«ãã£ãŠå¶åŸ¡ããå¿ èŠããããŸãã
ã²ãŒã ãµã€ã¯ã«ã ã¡ã¢åž³ã§ã®ã¹ããŒã¯ããã°ã©ãã³ã°
ã·ã³ããªã㯠ã³ã³ãœãŒã« ã²ãŒã ãéçºããŠããå Žåãéåžžã®ã¹ããªãŒã åºå 'cout' ã䜿çšããŠç»é¢ã«ããŒã¿ã衚瀺ããããšã¯æ©èœãããéåžžã«æéãããããŸãã ãããã£ãŠãåºåã¯ã¹ã¯ãªãŒã³ãããã¡å ã§å®è¡ããå¿ èŠããããŸãã éåžžã«é«éã«ãªããã²ãŒã ã¯äžå ·åãªãåäœããŸãã æ£çŽã«èšããšãã¹ã¯ãªãŒã³ãããã¡ãšã¯äœãªã®ããã©ã®ããã«æ©èœããã®ãããããããŸããã ãã ããããã§ã³ãŒãäŸã瀺ããŸããããããã³ã¡ã³ãå ã®èª°ããç¶æ³ãæ確ã«ããããšãã§ããã§ãããã
ç»é¢ãããã¡ã®ååŸ (ããèšã£ãŠããããããããŸãã):
// create screen buffer for drawings
HANDLE hConsole = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0,
NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
DWORD dwBytesWritten = 0;
SetConsoleActiveScreenBuffer(hConsole);
ç¹å®ã®è¡ã¹ã³ã¢ã©ã€ã³ïŒã¹ã³ã¢ã衚瀺ããè¡ïŒã®ç»é¢ã«çŽæ¥åºåããŸãã
// draw the score
WriteConsoleOutputCharacter(hConsole, scoreLine, GAME_WIDTH, {2,3}, &dwBytesWritten);
çè«çã«ã¯ããã®ã²ãŒã ã«ã¯è€éãªããšã¯äœããªããå ¥éã¬ãã«ã®ã²ãŒã ã®è¯ãäŸã®ããã«æããŸãã ã³ãŒã㯠XNUMX ã€ã®ãã¡ã€ã«ã«èšè¿°ãããè€æ°ã®é¢æ°ã«é 眮ãããŸãã ã¯ã©ã¹ãç¶æ¿ããããŸããã GitHub ã®ãªããžããªã«ã¢ã¯ã»ã¹ãããšãã²ãŒã ã®ãœãŒã¹ ã³ãŒãããã¹ãŠç¢ºèªã§ããŸãã
ã²ãŒã 2 ã¯ã¬ã€ãžãŒã¿ã³ã¯ã¹
- ãã©ãããã©ãŒã ïŒ Windows (Windows 7ã10ã§ãã¹ãæžã¿)
- èšèªïŒ C + +
- ã²ãŒã ãšã³ãžã³: Windowsã³ã³ãœãŒã«
- ã€ã³ã¹ãã¬ãŒã·ã§ã³ïŒ кМОга
ã²ãŒã ããã°ã©ãã³ã°ã«ããC ++ã®éå§ - ãªããžããª:
GitHubã®
ã¯ã¬ã€ãžãŒã¿ã³ã¯ã¹ã²ãŒã
ã³ã³ãœãŒã«ã«æåãåºåããããšã¯ãããããã²ãŒã ã«å€ããããšãã§ããæãåçŽãªããšã§ãã ãããããã®åŸãåé¡ã 1 ã€çºçããŸããããã¯ãæåã®é«ããšå¹ ãç°ãªã (é«ããå¹ ããã倧ãã) ãšããããšã§ãã ãããã£ãŠããã¹ãŠãäžåè¡¡ã«èŠããäžãŸãã¯äžã«ç§»åããæ¹ããå·ŠãŸãã¯å³ã«ç§»åãããããã¯ããã«éãèŠããããã«ãªããŸãã ãã®å¹æã¯ãã¹ããŒã¯ãïŒã²ãŒã 2ïŒã§éåžžã«é¡èã§ãã ãã¿ã³ã¯ãïŒã²ãŒã XNUMXïŒã§ã¯ãç»é¢ã®ãã¯ã»ã«ãç°ãªãè²ã§ãã€ã³ãããããšã§åºåãæŽçãããŠããããããã®ãããªæ¬ ç¹ã¯ãããŸããã ç§ãã¬ã³ãã©ãæžãããšèšã£ãŠããããããããŸããã 確ãã«ãããã¯ãã§ã«å°ãè€éã§ãããã¯ããã«èå³æ·±ããã®ã§ãã
ãã®ã²ãŒã ã§ã¯ãç»é¢äžã«ãã¯ã»ã«ã衚瀺ããããã®ã·ã¹ãã ã説æããã ãã§ååã§ãã ããããã®ã²ãŒã ã®ã¡ã€ã³éšåã ãšæããŸãã ãã®ä»ããã¹ãŠèªåã§æãã€ãããšãã§ããŸãã
ãããã£ãŠãç»é¢äžã«è¡šç€ºãããã®ã¯ãåãè²ä»ãã®é·æ¹åœ¢ã®ã»ããã«ãããŸããã
é·æ¹åœ¢ã»ãã
ååè§åœ¢ã¯ãæ°åãå ¥ã£ãè¡åã§è¡šãããŸãã ãšããã§ãèå³æ·±ããã¥ã¢ã³ã¹ã XNUMX ã€åŒ·èª¿ããŠãããŸããã²ãŒã å ã®ãã¹ãŠã®è¡å㯠XNUMX 次å é åãšããŠããã°ã©ã ãããŠããŸãã äºæ¬¡å ãããªããŠäžæ¬¡å ïŒ XNUMX 次å é åã®æ¹ãã¯ããã«ç°¡åãã€é«éã«æäœã§ããŸãã
ã²ãŒã ã¿ã³ã¯ãããªãã¯ã¹ã®äŸ
ã²ãŒã ã¿ã³ã¯ã®è¡åã XNUMX 次å
é
åã§è¡šçŸãã
XNUMX 次å
é
åã«ããè¡åè¡šçŸã®ããããããããäŸ
ãã ããé åã®èŠçŽ ãžã®ã¢ã¯ã»ã¹ã¯ãXNUMX 次å é åã§ã¯ãªã XNUMX 次å é åã§ãããã®ããã«ãäºéã«ãŒãã§è¡ãããŸãã ãããè¡ãããã®ã¯ããŸã è¡åãåŠçããŠããããã§ãã
äºéã«ãŒã㧠XNUMX 次å
é
åãèµ°æ»ããŸãã Y ã¯è¡ IDãX ã¯å ID
éåžžã®è¡åèå¥å iãj ã®ä»£ããã«ãèå¥å x ãš y ã䜿çšããããšã«æ³šæããŠãã ããã ãããã£ãŠãããã¯ç®ã«ã¯ããå¿å°ãããè³ã«ã¯ããæ確ã§ããããã«ç§ã«ã¯æããŸãã ããã«ããã®ãããªè¡šèšæ³ã«ããã䜿çšãããè¡åã XNUMX 次å ç»åã®åº§æšè»žã«æ圱ããããšãç°¡åã«å¯èœã«ãªããŸãã
次ã«ããã¯ã»ã«ãè²ããã£ã¹ãã¬ã€ã«ã€ããŠèª¬æããŸãã åºåã«ã¯ãStretchDIBits é¢æ° (ããããŒ: windows.hãã©ã€ãã©ãª: gdi32.lib) ã䜿çšãããŸãã ãšãããã次ã®ãã®ããã®é¢æ°ã«æž¡ãããŸã: ç»åã衚瀺ãããããã€ã¹ (ç§ã®å Žåããã㯠Windows ã³ã³ãœãŒã«)ãç»åã®è¡šç€ºéå§ã®åº§æšããã®å¹ /é«ããç»åããèªäœã¯ãããããã (ãããããã) ã®åœ¢åŒã§ããããã€ãã®é åã§è¡šãããŸãã ãã€ãã®é åãšããŠã®ãããããã!
åäœãã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() é¢æ°ã䜿çšããŠãã®ããããããã«äºåã«å²ãåœãŠãããŸãã ã€ãŸãããã¹ãŠã®ãã¯ã»ã«ã«é¢ããæ å ±ãä¿åããããã«å¿ èŠãªãã€ãæ°ãäºçŽãããŠããããã®æ å ±ãç»é¢ã«è¡šç€ºãããŸãã
m_p_bitmapMemory ããããããã®äœæ:
// create bitmap
int bitmapMemorySize = (PMATRIX_WIDTH * PMATRIX_HEIGHT) * BYTES_PER_PIXEL;
void* m_p_bitmapMemory = VirtualAlloc(0, bitmapMemorySize, MEM_COMMIT, PAGE_READWRITE);
倧ãŸãã«èšãã°ãããããããã¯äžé£ã®ãã¯ã»ã«ã§æ§æãããŸãã é åå ã® XNUMX ãã€ãããšã RGB ãã¯ã»ã«ã§ãã èµ€ã®å€ããšã« XNUMX ãã€ããç·ã®å€ããšã« XNUMX ãã€ã (G)ãéã®è²ããšã« XNUMX ãã€ã (B)ã ããã«ãã€ã³ãã³ãããšã« XNUMX ãã€ãããããŸãã ããã XNUMX ã€ã®è² - èµ€/ç·/é (RGB) - ãç°ãªãå²åã§äºãã«æ··åããããã®çµæãšããŠãã¯ã»ã«ã®è²ãåŸãããŸãã
ããã§ããããããã®åè§åœ¢ãã€ãŸãã²ãŒã ãªããžã§ã¯ãã¯æ°å€è¡åã§è¡šãããŸãã ãããã®ã²ãŒã ãªããžã§ã¯ãã¯ãã¹ãŠã³ã¬ã¯ã·ã§ã³ã«é 眮ãããŸãã ãããŠãããã¯ç«¶æå Žã«é 眮ããã8 ã€ã®å€§ããªæ°å€ãããªãã¯ã¹ã圢æããŸãã ãããªãã¯ã¹ã®åæ°å€ãç¹å®ã®è²ã«ãããã³ã°ããŸããã ããšãã°ãæ°åã® 9 ã¯éãæ°åã® 10 ã¯é»è²ãæ°åã® XNUMX ã¯æ¿ãç°è²ãªã©ã§ãã ãããã£ãŠãåæ°åãäœããã®è²ã§ãã競æå Žã®ãããªãã¯ã¹ããããšèšããŸãã
ãããã£ãŠãäžæ¹ã§ã¯ç«¶æå Žå šäœã®æ°å€è¡åããããããäžæ¹ã§ã¯ç»åã衚瀺ããããã®ããããããããããŸãã ãããŸã§ã®ãšãããããããããã¯ã空ãã§ããç®çã®è²ã®ãã¯ã»ã«ã«é¢ããæ å ±ããŸã ãããŸããã ããã¯ãæåŸã®ã¹ãããã§ã競æãã£ãŒã«ãã®æ°å€è¡åã«åºã¥ããŠåãã¯ã»ã«ã«é¢ããæ å ±ãããããããã«å ¥åããããšãæå³ããŸãã ãã®ãããªå€æã®å®äŸã以äžã®å³ã«ç€ºããŸãã
競æå Žã®æ°å€ãããªãã¯ã¹ (ããžã¿ã« ãããªãã¯ã¹) ã«åºã¥ãæ
å ±ã§ãããããã (ãã¯ã»ã« ãããªãã¯ã¹) ãåããäŸ (ã«ã©ãŒ ã€ã³ããã¯ã¹ã¯ã²ãŒã å
ã®ã€ã³ããã¯ã¹ãšäžèŽããŸãã)
ã²ãŒã ã®å®éã®ã³ãŒãã玹ä»ããŸãã ã«ãŒãã®åå埩ã«ãããå€æ° colorIndex ã«ã¯ã競æå Žã®æ°å€è¡å (mainDigitalMatrix) ããã®å€ (ã«ã©ãŒ ã€ã³ããã¯ã¹) ãå²ãåœãŠãããŸãã 次ã«ãã€ã³ããã¯ã¹ã«åºã¥ããŠè²èªäœã color å€æ°ã«æžã蟌ãŸããŸãã ããã«ãåŸãããè²ã¯èµ€ãç·ãéã®æ¯ç (RGB) ã«åå²ãããŸãã ãããŠãã€ã³ãã³ã (pixelPadding) ãšãšãã«ããã®æ å ±ããã¯ã»ã«ã«äœåºŠãæžã蟌ãŸããããããããå ã«ã«ã©ãŒ ã€ã¡ãŒãžã圢æãããŸãã
ã³ãŒãã§ã¯ãã€ã³ã¿ãŒãšãããåäœã®æŒç®ã䜿çšãããŠãããããç解ããã®ãé£ããå ŽåããããŸãã ãããã£ãŠããã®ãããªæ§é ãã©ã®ããã«æ©èœããããã©ããã§å¥éèªãããšããå§ãããŸãã
競æå Žã®æ°å€è¡åã«åºã¥ããæ å ±ãããããããã«å ¥åããŸãã
// 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 ã²ãŒã å 㧠XNUMX ã€ã®ç»å (ãã¬ãŒã ) ã圢æãããDraw() é¢æ°ã§ç»é¢ã«è¡šç€ºãããŸãã Input() é¢æ°ã§ããŒã¹ãããŒã¯ãç»é²ãããã®åŸ Logic() é¢æ°ã§åŠçãããšãæ°ãããã¯ã㣠(ãã¬ãŒã ) ã圢æãããŸãã 確ãã«ãã²ãŒã ãªããžã§ã¯ãã¯ç«¶æãã£ãŒã«ãäžã§ãã§ã«å¥ã®äœçœ®ã«ããå¯èœæ§ããããããã«å¿ããŠå¥ã®å Žæã«æç»ãããŸãã ãããã¢ãã¡ãŒã·ã§ã³ïŒåãïŒã®ä»çµã¿ã§ãã
çè«çã«ã¯ (äœãå¿ããŠããªããã°)ãæåã®ã²ãŒã (ãã¹ããŒã¯ã) ã®ã²ãŒã ã«ãŒããš 2 çªç®ã®ã²ãŒã (ãã¿ã³ã¯ã) ã®ç»é¢äžã«ãã¯ã»ã«ã衚瀺ããã·ã¹ãã ãç解ããã ãã§ãä»»æã®ã²ãŒã ãäœæããããšãã§ããŸãã Windows çš XNUMXD ã²ãŒã ã®ã ç¡é³ïŒ ð æ®ãã®éšåã¯åãªã空æ³ã§ãã
ãã¡ããããTanksããšããã²ãŒã ã¯ãSnakeããããã¯ããã«è€éã«èšèšãããŠããŸãã ç§ã¯ãã§ã« C++ èšèªã䜿çšããŠããŸãããã€ãŸããããŸããŸãªã²ãŒã ãªããžã§ã¯ããã¯ã©ã¹ã§èšè¿°ããŸããã ç§ã¯ç¬èªã®ã³ã¬ã¯ã·ã§ã³ãäœæããŸãããã³ãŒã㯠headers/Box.h ã«ãããŸãã ã¡ãªã¿ã«ããã®ã³ã¬ã¯ã·ã§ã³ã«ã¯ã¡ã¢ãª ãªãŒã¯ãçºçããŠããå¯èœæ§ãé«ããªããŸãã 䜿çšããããã€ã³ã¿ãŒã èšæ¶ã䜿ã£ãŠäœæ¥ããŸããã ãã®æ¬ã¯ç§ã«ãšã£ãŠãšãŠã圹ã«ç«ã£ããšèšããããåŸãŸããã ã²ãŒã ããã°ã©ãã³ã°ã«ããC ++ã®éå§ã ããã¯ãC++ ã®åå¿è ã«ãšã£ãŠæé©ãªã¹ã¿ãŒãã§ãã å°ãããŠé¢çœããããçµç¹ãããŠããŸãã
ãã®ã²ãŒã ã®éçºã«ã¯çŽXNUMXãæããããŸããã äž»ã«è·å Žã®ã©ã³ããããã€ã®æéã«æžããŠããŸããã 圌ã¯ãªãã£ã¹ã®ãããã³ã«åº§ããé£ã¹ç©ãèžã¿é³Žãããã³ãŒããæžããŸããã ãŸãã¯å®¶ã§å€é£ãé£ã¹ãŸãã ããã§ããã®ãããªããããã³æŠäºããèµ·ãããŸããã ãã€ãã®ããã«ããŒããç©æ¥µçã«äœ¿ããŸãããããã¹ãŠã®ã³ã³ã»ããã¥ã¢ã«ãªãã®ã¯ããŒãããçãŸããŸããã
å®è·µçãªéšåã®æåŸã«ãããŒããã¹ãã£ã³ããŠããã€ãåãåºããŸãã ç§ãæ£ç¢ºã«äœãæžãçããçµµãæããæ°ãããã¶ã€ã³ããŠãããã瀺ãããã«âŠ
æŠè»ãã€ã¡ãŒãžãããã¶ã€ã³ã ãããŠãåæŠè»ãç»é¢äžã§äœãã¯ã»ã«ãå ããã¹ããã®å®çŸ©
ã¿ã³ã¯ã®è»žãäžå¿ãšããå転ã®ã¢ã«ãŽãªãºã ãšå
¬åŒã®èšç®
ç§ã®ã³ã¬ã¯ã·ã§ã³ã®å³ (ããããã¡ã¢ãªãªãŒã¯ã®ãããã®)ã ã³ã¬ã¯ã·ã§ã³ã¯ãªã³ã¯ããããªã¹ããšããŠäœæãããŸã
ãããŠããããã¯äººå·¥ç¥èœãã²ãŒã ã«çµã¿èŸŒãç¡é§ãªè©Šã¿ã§ã
ТеПÑОÑ
ãåéã®éãæåã®äžæ©ãããïŒå€ä»£äžåœã®ç¥æµïŒ
å®è·µããçè«ãžç§»ããŸãããïŒ è¶£å³ã®æéãã©ããã£ãŠèŠã€ããŸããïŒ
- æ¬åœã«æ¬²ãããã®ã決ããŠãã ããïŒæ®å¿µãªããããããæãé£ããã®ã§ãïŒã
- åªå é äœãèšå®ããŸãã
- ããé«ãåªå é äœã®ããã«ããã¹ãŠã®ãäœåãªãã®ããç ç²ã«ããŸãã
- æ¯æ¥ç®æšã«åãã£ãŠé²ã¿ãŸãããã
- 趣å³ã®ããã®èªç±æéã XNUMX ïœ XNUMX æéãããšã¯æåŸ ããªãã§ãã ããã
äžæ¹ã§ãäœã欲ããã®ãã決ããŠåªå é äœãä»ããå¿ èŠããããŸãã äžæ¹ã§ããããã®åªå äºé ãåªå ããŠãäžéšã®ã±ãŒã¹ããããžã§ã¯ããæŸæ£ããããšãå¯èœã§ãã èšãæããã°ããäœåãªããã®ã¯ãã¹ãŠç ç²ã«ããªããã°ãªããªããšããããšã§ãã 人çã®äž»èŠãªæŽ»åã¯æ倧 XNUMX ã€ã§ããã¹ãã ãšã©ããã§èããããšããããŸãã ããããã°ãæåã®æ¹æ³ã§ãããã«å¯ŸåŠã§ããããã«ãªããŸãã ãããŠãè¿œå ã®ãããžã§ã¯ããæ瀺ã«ãããé³è ãªè² è·ããããå§ããã§ãããã ããããããã¯ãããããã¹ãŠäž»èŠ³çã§å人çãªãã®ã§ãã
ç¹å®ã®é»éåŸããããŸããããã¯ã0% ã®æ¥ã決ããŠèšããªãããšã§ãã ã€ã³ãã£ãŒãºéçºè ã®èšäºã§ç¥ããŸããã ãããžã§ã¯ãã«åãçµãã§ããå Žåã¯ãæ¯æ¥ããã«ã€ããŠäœããããŸãããã ãããŠãã©ãã ã皌ãã ãã¯é¢ä¿ãããŸããã XNUMX ã€ã®åèªãŸã㯠XNUMX è¡ã®ã³ãŒããæžãããã¥ãŒããªã¢ã« ãããªã XNUMX ã€èŠãããŸãã¯ããŒãã«éãæã¡èŸŒããªã©ãäœããå®è¡ããã ãã§ãã æãé£ããã®ã¯å§ããããšã§ãã äžåºŠå§ãããšãããããããªããæãã§ãã以äžã®ããšãããã§ãããã ãããã£ãŠãããªãã¯åžžã«ç®æšã«åãã£ãŠããããŠä¿¡ããŠãã ãããéåžžã«æ©ãåé²ããã§ãããã çµå±ã®ãšããããã¹ãŠã®ããšã«å¯Ÿããäž»ãªãã¬ãŒãã¯å 延ã°ãã§ãã
ãããŠã5ã10ã15åã®æéã®ç¡æã®ãããããããéå°è©äŸ¡ãããç¡èŠãããããªãã§ãXNUMXãXNUMXæéç¶ãããã€ãã®å€§ããªã䞞倪ããåŸ ã€ã¹ãã§ããããšãèŠããŠããããšãéèŠã§ãã åã«äžŠãã§ããŸããïŒ ããªãã®ãããžã§ã¯ãã®ããã«äœããèããŠãã ããã ãšã¹ã«ã¬ãŒã¿ãŒãäžããŸããïŒ ããŒãã«äœããæžãçããŸãã ãã¹ã®äžã§é£äºããŸããïŒ ããŠãäœãèšäºãèªãã§ãã ããã ããããæ©äŒãå©çšããŠãã ããã YouTube ã§ç¬ãç«ãèŠãã®ã¯ãããŸãããã é ãæ··ä¹±ãããªãã§ãã ããïŒ
ãããŠæåŸã ãã®èšäºãèªãã§ãã²ãŒã ãšã³ãžã³ã䜿çšããã«ã²ãŒã ãäœæãããšããã¢ã€ãã¢ãæ°ã«å
¥ã£ãå Žåã¯ãCasey Muratori ã®ååãæãåºããŠãã ããã ãã®ç·ã¯æã£ãŠããŸã
Casey æ°ã¯ãŸããç¬èªã®ã²ãŒã ãšã³ãžã³ãéçºããããšã§ãæ¢åã®ãšã³ãžã³ãããæ·±ãç解ã§ããããã«ãªããšèª¬æããŸãã 誰ããèªååãè©Šã¿ãŠãããã¬ãŒã ã¯ãŒã¯ã®äžçã§ã¯ã䜿çšããæ¹æ³ã§ã¯ãªããäœæããæ¹æ³ãåŠã¶ããšã«ãªããŸãã ã³ã³ãã¥ãŒã¿ãŒã®æ¬è³ªãç解ããŸãã ãããŠãããªãã¯ããç¥çã§æçããããã°ã©ããŒãã€ãŸãããã«ãªãããšãã§ããŸãã
éžãã éã§é 匵ã£ãŠãã ããïŒ ãããŠäžçããããããã§ãã·ã§ãã«ã«ããŸãããã
èè
ïŒ ã°ã©ã³ãã³ã»ã¢ã³ãã¬ã€ ãDevOps
åºæïŒ habr.com