"ืื ื ืืืืข ืฉืื ื ืื ืืืืข ืืืื" ืกืืงืจืืก
ืืื: ืืื ืฉื IT ืฉืืืจืงืื ืขื ืื ืืืคืชืืื ืืจืืฆืื ืืฉืืง ืืืฉืืงืื ืฉืืื!
ืืืื ืื: ืืื ืืืชืืื ืืืชืื ืืฉืืงืื ื-C/C++ ืื ืืชื ืฆืจืื ืืช ืื!
ืืื ืืืื ืืงืจืื ืืช ืื: ืคืืชืื ืืคืืืงืฆืืืช ืื ืื ืืืืืืืืช ืฉืื ืืขืืืื, ืืื ืื ื ืืฉืชืื ืืงืื ืื ืฉืืืข. ืื ืื ื ืืืื ืืฉืืงืื!
ืฉืืื ืฉืื ืืื
ืชืขืฉืืืช ืืฉืืงื ืืืืฉื ืืื ืขื ืงืืช, ืืคืืื ืืืชืจ ืฉืืืขืืช ืืืื ืืืฉืจ ืชืขืฉืืืช ืืงืืื ืืข. ืืฉืืงืื ื ืืชืื ืืื ืชืืืืช ืืคืืชืื ืฉื ืืืืฉืืื, ืชืื ืฉืืืืฉ, ืืกืื ืืจืืื ืืืืจื ืืื, ืืฉืืืืช ืคืืชืื ืืืจืืืืช ืืืกืืกืืืช. ืขื ืืืื, ืื ืืขื ืืฉืืง ืืืื ืืืืคืืข ืขื ืืจืคืืงื, ืคืืืืงื ืืกืืื ื ืืชืืื ืชืื ืืืจ. ืื ืืืคืฉืจืื ืื ืืืชืืงื ืืคืืชืื ืืืฉืืง ืขืฆืื ืืื ืืืชืขืกืง ืืืกืืก ืฉืื. ืืื ืืื ืืืชื, ืขื ืืื ืืขืื, ืืืคืชืืื "ืืชืขืืืจืื" ืืืชืืืื. ืขืฆื ืืืฆืืจ ืืืฉืืงืื ืืืขืื ืขื ืืืกืืข. ืืืืืช ืืืืฆืืจ ืืชืืืื ืืืืืจ ืขื ืืืืืชื.
ืืื ืขื ืืืช, ืืืฉืจ ืืฉืืงืื ืืืฉืืงืื ืฉื ืืืจืื, ืื ื ืืืืืืื ืื ืืืื ืขื ืืื ืืืงืืืื, ืขืืืื, ืืืืืืช, ืืื ืืงืช ืืฉืืง ืฉืื ืฉืื ืืืจืื ืืืืขื ืืืืื. ืื ืืื ืชื ืฉ...
... ืืืืข ืืืื ืืืฆืืจ ืืช ืืขืืืืืช ืฉืื, ืืคืืคืื ืจืง ืื. ืขืืืืืช ืฉืืื ืื ื ืืื, ืืืื, ืืจืื ืืงืืืฉ!
ืืื ื ืืืืื ืืืืช ืืืชืืื ืฉืขื ืืื ืืชืืืช ืื ืืข ืืฉืืง ืืฉืื ืืืฉืืง ืขืืื, ืชืืื ืืคืงืื ืืช ืืขืื ืืื, ืื ืื ืืช ืืืืื ืืช ืืืฉืืื ืืช ืืชื ืฉืื, ืืืืคืื ืืืชืื ืช ืื ืืกื ืืืื ืืืจืื ืืืชืจ.
ืืืืืจ ืื ืื ืกื ืืกืคืจ ืืื ืืื ืืชืืืชื ืืืชืื ืืฉืืงืื ืงืื ืื ื-C/C++, ืืื ืชืืืื ืืคืืชืื ืืืืื ืื ื ืืืฆื ืืื ืืชืืืื ืืกืืืื ืขืืืกื. ืื ืกืืืืืงืืืื ืืืชืืจ ืืช ืืชืืืื ืฉื ืืชืืื ืืืฉืืช. ืืืืจ ืขื ืืืจืืช ืืืืื ื, ืขื ืชืืื ืช ืืขืืื ืืืืฉืืช ืฉืื ืืจืืข. ืืืืืื ืืืจืืช, "ืืืืฉื ืืื ื ืืืจืื ืขื ืืืื ืืืืฉื ืฉืื!".
ืขืืกืืง
"ืืืข ืืื ืชืจืืื ืืื ืืกืจ ืชืืขืืช, ืชืจืืื ืืื ืืืข ืืื ืืกืืื." ืงืื ืคืืฆืืืก
ืืืืืจืช ืฉืื ืืื ืืืืื ืฉืื!
ืื, ืืคืืขื, ืื ื ืืืื ืืืืจ ืฉืืื ืืฉืืืื ืืชืืื ืืืืืจืช. ืื ื ืจืืฉื ืฉื ืื ืจืง ืืช ืืืฉืืืืช ืืืืืืืืืืช ืฉืื, ืืื ืื ืืฆืืืจ, ืืชืื ืช, ืืขืฆื ืชืจืฉืืื ืืจืืื ืืคืืชืจ ืืขืืืช, ืืืื ืืชืืืืืช. ืืฉืชืืฉ ืชืืื ืืคื ืงืก ืืืชืื ืจืง ืืขืืคืจืื. ืื ื ืงื, ื ืื ืืืืื, IMHO.
ืืืืืจืช ืฉืื (ืฉืืืื ืืืจ). ืื ืื ื ืจืื. ืืื ืืืื ืืฉืืืืช ืืืืืืืืืช, ืจืขืืื ืืช, ืฉืจืืืืื, ืืืืืจืืืช, ืคืชืจืื ืืช, ืื ืืืช ืืฉืืื ืืช ืฉืืืจื, ืงืื ืืื'.
ืืฉืื ืื ืืฆืืืชื ืืืฉืืื ืฉืืืฉื ืคืจืืืงืืื (ืื ืืคื ืืืื ื ืฉืื ืฉื "ืกืืคืืืช", ืื ืื ืืืฆืจ ื ืืชื ืืคืชื ืืืกืืช ืืื ืกืืฃ).
- ืคืจืืืืงื 0: ืืืื ืกืฆื ืช ืชืืช-ืืื ืฉื ืืืจืืื ืืืืื ืฉื ืืชืื ื-C# ืืืืฆืขืืช ืื ืืข ืืืฉืืง Unity. ืขืืืจ ืคืืืคืืจืืืช macOS ื-Windows.
- ืืฉืืง 1: ืืฉืืง ืงืื ืกืืื Simple Snake (ืืืืืข ืืืืื ืืชืืจ "Snake") ืขืืืจ Windows. ืืชืื ื-C.
- ืืฉืืง 2: ืืฉืืง ืงืื ืกืืื Crazy Tanks (ืืืืืข ืืืืื ืืชืืจ "Tanks"), ืืืจ ื ืืชื ื-C++ (ืืืืฆืขืืช ืืืืงืืช) ืืื ืชืืช Windows.
ืคืจืืืงื 0 ืืืืืช ืืืจืืื
- ืคืืืคืืจืื: Windows (Windows 7, 10), Mac OS (OS X El Capitan v. 10.11.6)
- ืฉืคื: C#
- ืื ืืข ืืฉืืง:
ืืืืืช - ืึทืฉืืจึธืึธื:
ืืืจืื ืืืื - ืืืืจ:
GitHub
ืืืืืช ืืืจืืื ืกืฆืื ื ืชืืช ืืืืืืช
ืืคืจืืืงื ืืจืืฉืื ืืืฉื ืื ื-C/C++, ืืื ื-C# ืืืืฆืขืืช ืื ืืข ืืืฉืืง Unity. ืืื ืืข ืืื ืื ืืื ืชืืืขื ื ืืืืืจื ืืื
ืืืืจื ื-Unity ืืืืื ืชื ืื ืืืืชื ืืคืชื ืืืื ืืฉืืง. ืจืฆืืชื ืืืฆืืจ ืกืฆื ื ืชืืช ืืืืืืช ืขื ืืืืืฉืื ืืืคื. ืืื, ืื ืืืชืจ ื ืืื ืืื (ืืืื ืชื ืืช ืืืืืจื ืฉืืืืชื ืืืืื ืื =) ืืื ืฆืจืื ืืืื ืืืืฆืืจ ืืื ืืจืืงืฆืื ืขื ืืขืืื ืืืืฆืื. ืืื ืืฉืื ืจืง ืืืืื ืืื Unity, ืืื ืชืืืื ืืคืืชืื, ืืืื ืืืืฅ ื ืืจืฉ ืืื ืืืฆืืจ ืืฉืื. ืื ื ืืื ืคืจืืืงื Architect Demo (ืืฉื ืืืืฆื ืืืขื ืืืฉืืืืืช). ืชืื ืืช, ืืืืื ืืช, ืื ืืืฆืื, ืืงืกืืืจืื ื ืืงืื ืื ืื ืจืื ืืืืฉืืื ืฉื ืขืืืื ืืืืืืืืช.
ืืชืืืชื ืืกืจืืื ื ืืืจืื ืืืืืืื ืขื ืืื ืืืฆืืจ ืืืืืื ืชืืช ืืืืืืื ื
ืืื ืืช ืขืฆื ืืืจืื, ืื ืืคื ืขืฆื ื ืืกืคืื, ืื ืฉืืื ืืืฆืื ืชืืจืื ืืืขืืช. ืืืจื ืฉืืขืืจืื ืืืื, ืืชื ืืืื ืืืื ืขืืืื ืขื ืงืืช ืขืืฉืื ืืืฆืจื ืกืจืื ืื ืืืฆืื, ืจืง ืืื ืืืฆืืจ 30 ืฉื ืืืช ืฉื ืืืืื. ืืื ืกืจืื ืชืืช ืืืื ื ืืฉืืื ืฉืขืืช! ืืื ืื ืื ื ืืืฆืืื ืืืืืืืืช ืืืืืจืื ืืฉืื ืืื: "ืื, ืกืจื ืืฆืืืจ/ืกืจื ืืืืจืื! ืื ืืื ืืืืืื ืืขืฉืืช ืืืชืจ ืืื..." ืืืคืฉืื!
ืืขืื ืืฉืื ืขื ืชืื ืืช ืืคืจืืืงื ืืื. ืืคื ืฉืืชืืจืจ, ืืืืง ืืืขื ืืื ืืืืชืจ ืขืืืจื ืืื ืืืืง ืืืชืืื. ืื ืชืจืืฆื ืืช ืืกืฆื ื (ืงืืฉืืจ ืืืืืจ ืืชืืืืจ ืืคืจืืืงื), ืชืืืื ื ืฉืืืฆืืื ืืกืชืืืืช ืกืืื ืืืืช ืืืืื ืืืืืจ. ืืื ืืชืื ืช ืกืืืื ืืฆืืื ืืื, ืืืืชื ืฆืจืื ืืืฉื ืชืืืื ืืช ืืงืืืืจืืื ืืืช ืฉื ื ืงืืืช ืืืืงืื ืขื ืืืขืื (2D), ืืืืืจ ืืื ืขื ืืืืืจ (3D). ืืืืจ ืืืฆืืืง ืืื ืฉืฉื ืืชื ืืชืืืืงื ืืืืช ืืกืคืจ ืืืืขืชื ืืืชื ืืืื ืืก. ืืืงืืช, ืื ืจืื, ืื ืืืืช ืืกืคืจ ืคืฉืื ืื ืืกืืืจืื ืื ืืื ืืขืืืื ืืืืฉืืช ืืืชืืืืงื ืืื ืืืืื. ืืื ืืฉืืชื ืืืืกืกืืื ืืืืจื ืฉืื, ืืืืื, ืื ืืืื ืืชื ืงื, ืืชืืื! ืืืชื ืืชืืื ืืชืคืืก ืืฉืืืืช ืืืจืืืืช ืืืจืคืชืงื ืืจืืฉืช. ืืื ืืชื ืืืฉื: "ืืืื, ืืื ืืืชืืืืงืื *ืืืื* ืื ืืืื ืืื ืืืขืช ืืื ื ืืชื ืืืืฉืขื ืืช ืื ืืกืืืืช ืืืื?".
ืืืฉืื ื ืืกืืืืช ืืืืฉืื ืืงืืืืจืืื ืืืช ืฉื ื ืงืืื ืขื ืืขืื ืืขื ืืืืจ (ืืืืืืจืช ืฉืื)
ืืฉืืง 1
- ืคืืืคืืจืื: Windows (ื ืืกื ื-Windows 7, 10)
- ืฉืคื: ืื ื ืืืฉื ืฉืื ื ืืชื ื-C ืืืืจ
- ืื ืืข ืืฉืืง: ืงืื ืกืืืช ืืืื ืืืก
- ืึทืฉืืจึธืึธื:
javidx9 - ืืืืจ:
GitHub
ืืฉืืง ื ืืฉ ืคืฉืื
ืกืฆืื ืช ืืชืืช ืืืื ืืื ืื ืืฉืืง. ืื ืืกืฃ, ืืืืืื ืืื ืคืฉื ืฉื ืืืืืืงืืื ืชืืช ืืืืืืื (ืืืืืื ืืืืืืช) ืืื ืืจืื ืืงืฉื. ืืืจื ืฉืฉืืืงืชื ืขื Unity, ืืื ืชื ืฉืื ื ืืืื ืืืืฉืื, ืื ืืืชืจ ื ืืื ืืืชืืื, ืืืืกืืก. ืืฉืื ืคืฉืื ืืืืืจ, ืืื ืื ืืื ืืช ืืืืืื, ืืื ืืืืื ืืช ืขืฆื ืืืื ื ืฉื ืืฉืืงืื.
ืืื ืืฉ ืื ื ืคืฉืื ืืืืืจ? ืื ื ืืื, ืงืื ืกืืื ืืื ืืืื. ืืืชืจ ืืืืง, ืืคืืื ืืงืื ืกืืื ืืืกืืืื. ืฉืื, ืืชืืืชื ืืืคืฉ ืืฉืจืื ืืืื ืืจื ื (ืืืืคื ืืืื, ืื ื ืจืืื ืืืื ืืจื ื ืืช ืืืืฆืื ืืืืคืื ืืช ืืืืกืืื ืช ืืืืชืจ ืฉื ืืืื ื-2). ืืคืจืชื ืกืจืืื ืฉื ืืชืื ืช ืืื ืฉืืฆืจ ืงืื ืกืืืช ืืืจืืก. ืืืืืืช ืืฉืืงื, ืืื ืืืืื ืืืจืืช ืืช ื"ื ืืฉ". ืืืกืจืืื ืืืืชื ืขื ืฉื ื ืืืจืื ืืกืืกืืื - ืืืืืช ืืืฉืืง (ืขื ืฉืืืฉ ืคืื ืงืฆืืืช / ืืืงืื ืืกืืกืืื) ืืืคืื ืืืืืจ.
ืืืืืช ืืืฉืืง ืขืฉืืื ืืืืจืืืช ืืขืจื ืื:
int main()
{
Setup();
// a game loop
while (!quit)
{
Input();
Logic();
Draw();
Sleep(gameSpeed); // game timing
}
return 0;
}
ืืงืื ืืฆืื ืืช ืื ืืคืื ืงืฆืื main() ืืืช ืืืช. ืืืืืืจ ืืืฉืืง ืืชืืื ืืืืจ ืืืขืจื ืืืชืืืื. ืืฉ ืฉืืืฉ ืคืื ืงืฆืืืช ืืกืืกืืืช ืืืืืื: Input(), Logic(), Draw(). ืจืืฉืืช, ืงืื ื ืชืื ืื ืงืื (ืืขืืงืจ ืฉืืืื ืขื ืืงืฉืืช), ืืืืจ ืืื ืขืืืื ืื ืชืื ืื ืฉืืืื ื Logic, ืืืืืจ ืืื ืืฆืืช ืขื ืืืกื - Draw. ืืื ืื ืคืจืืื. ืื ืืืฆืื ื ืืฆืจืช ืืืจื ืื. ืื ืืื ืงืจืืงืืืจืืช. ืืืจื ืืื ืขืืืื ื ืชืื ื ืืงืื ืืืงื ืืื ืืจืื ืืื, ืืืืืื ืืืืขืชื, ืืื ืงืืืข ืืช ืงืฆื ืืคืจืืืืื ืฉื ืืืฉืืง. ืืื ืืื ืืคืื ืงืฆืื Logic() ืืืืจื ืืืื. ืืื, ืงืฆื ืืคืจืืืืื ืืืื ืืืืืช ื ืฉืื ืขื ืืื ืืคืื ืงืฆืื Sleep() ืขื ืคืจืืืจ gameSpeed, ืฉืงืืืข ืงืฆื ืื.
ืืืืืจ ืืฉืืง. ืชืื ืืช ื ืืฉ ืืคื ืงืก ืจืฉืืืืช
ืื ืืชื ืืคืชื ืืฉืืง ืงืื ืกืืื ืกืืื, ืื ืืฆืืช ื ืชืื ืื ืขื ืืืกื ืืืืฆืขืืช ืคืื ืืืจื ืืจืืื 'cout' ืื ืืขืืื - ืื ืืืื ืืืื. ืืื, ืืคืื ืืืื ืืืชืืฆืข ืืืืืจ ืืืกื. ืื ืื ืืจืื ืืืชืจ ืืืจ ืืืืฉืืง ืืขืืื ืืื ืชืงืืืช. ืืืขื ืืืืช, ืื ื ืื ืืืฉ ืืืื ืื ืื ืืืืจ ืืกื ืืืื ืืื ืขืืื. ืืื ืืชื ืืื ืืืืื ืืงืื, ืืืืื ืืืฉืื ืืชืืืืืช ืืืื ืืืืืืจ ืืช ืืืฆื.
ืืฉืืช ืืืืจ ืืืกื (ืื ืืืจืฉื ืื ืืืืจ ืืืช):
// create screen buffer for drawings
HANDLE hConsole = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0,
NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
DWORD dwBytesWritten = 0;
SetConsoleActiveScreenBuffer(hConsole);
ืคืื ืืฉืืจ ืืืกื ืฉื ืฉืืจื ืืกืืืืช scoreLine (ืืฉืืจื ืืืฆืืช ืฆืืื ืื):
// draw the score
WriteConsoleOutputCharacter(hConsole, scoreLine, GAME_WIDTH, {2,3}, &dwBytesWritten);
ืืชืืืืจืื, ืืื ืฉืื ืืืจ ืืกืืื ืืืฉืืง ืืื, ืื ื ืจืื ืื ืืืืื ืืืื ืืืฉืืง ืืชืืืชื. ืืงืื ืืชืื ืืงืืืฅ ืืื ืืืกืืืจ ืืืกืคืจ ืคืื ืงืฆืืืช. ืืื ืฉืืขืืจืื, ืืื ืืจืืฉื. ืืชื ืืขืฆืื ืืืื ืืจืืืช ืืื ืืงืื ืืืงืืจ ืฉื ืืืฉืืง ืขื ืืื ืืขืืจ ืืืืืจ ื- GitHub.
ืืฉืืง 2 Crazy Tanks
- ืคืืืคืืจืื: Windows (ื ืืกื ื-Windows 7, 10)
- ืฉืคื: C + +
- ืื ืืข ืืฉืืง: ืงืื ืกืืืช ืืืื ืืืก
- ืึทืฉืืจึธืึธื: ะบะฝะธะณะฐ
ืืชืืืช C++ ืืจื ืชืื ืืช ืืฉืืงืื - ืืืืจ:
GitHub
ืืฉืืง ืื ืงืื ืืืืจืคืื
ืืืคืกืช ืืืืืืช ืืงืื ืกืืื ืืื ืื ืจืื ืืืืจ ืืคืฉืื ืืืืชืจ ืฉืชืืืื ืืืคืื ืืืฉืืง. ืืื ืื ืืืคืืขื ืืขืื ืืืช: ืืืืืืืช ืืฉ ืืืืื ืืจืืื ืฉืื ืื (ืืืืื ืืืื ืืืจืืื). ืืคืืื, ืืื ืืืจืื ืื ืคืจืืคืืจืฆืืื ืื, ืืชื ืืขื ืืืื ืื ืืืขืื ืชืืจืื ืืจืื ืืืชืจ ืืืืจื ืืืฉืจ ืชื ืืขื ืฉืืืื ืื ืืืื ื. ืืคืงื ืื ืืืื ืืืื ื"ื ืืฉ" (ืืฉืืง 1). ื"ืื ืงืื" (ืืฉืืง 2) ืืื ืืืกืจืื ืืื, ืฉืื ืืคืื ืฉื ืืืืจืื ืขื ืืื ืฆืืืขืช ืคืืงืกืืื ืฉื ืืืกื ืืฆืืขืื ืฉืื ืื. ืืคืฉืจ ืืืืจ ืฉืืชืืชื ืขืืืื. ื ืืื, ืื ืืืจ ืงืฆืช ืืืชืจ ืืกืืื, ืื ืื ืืจืื ืืืชืจ ืืขื ืืื.
ืืืฉืืง ืืื, ืื ืืกืคืืง ืืชืืจ ืืช ืืืขืจืืช ืฉืื ืืืฆืืช ืคืืงืกืืื ืขื ืืืกื. ืื ื ืืืฉื ืฉืื ืืืืง ืืขืืงืจื ืฉื ืืืฉืืง. ืืื ืืฉืืจ ืืชื ืืืื ืืืืฆืื ืืขืฆืื.
ืื ืื ืฉืืชื ืจืืื ืขื ืืืกื ืืื ืจืง ืงืืืฆื ืฉื ืืืื ืื ืฆืืขืื ืืื ื ืขืื.
ืกื ืืืื
ืื ืืืื ืืืืฆื ืขื ืืื ืืืจืืฆื โโืืืื ืืืกืคืจืื. ืืื, ืื ื ืืืื ืืืืืืฉ ื ืืืื ืก ืืื ืืขื ืืื โ ืื ืืืืจืืฆืืช ืืืฉืืง ืืชืืื ืชืืช ืืืขืจื ืื ืืืืื. ืื ืื ืืืืื, ืืื ืื ืืืืื! ืืขืจืืื ืื ืืืืืืื ืืจืื ืืืชืจ ืงืืื ืืืืืจืื ืืขืืื ืืืชื.
ืืืืื ืืืืจืืฆืช ืื ืง ืืฉืืง
ืืืืฆื ืืช ืืืืจืืฆื โโืฉื ืื ืง ืืฉืืง ืขื ืืขืจื ืื-ืืืื
ืืืืื ืืืชืจ ืืืืืฉื ืฉื ืืืฆืื ืืืจืืฆื โโืขื ืืื ืืขืจื ืื ืืืืื
ืืื ืืืืฉื ืืืืื ืืื ืฉื ืืืขืจื ืืชืจืืฉืช ืืืืืื ืืคืืื, ืืืืื ืื ืืืืืจ ืืืขืจื ืื ืืืืื, ืืื ืืืขืจื ืื ืืืืื. ืื ื ืขืฉื ืื ืื ืื ื ืขืืืื ืขืืืืื ืขื ืืืจืืฆืืช.
ืืขืืจ ืฉื ืืขืจื ืื ืืืืื ืืืืืื ืืคืืื. Y ืืื ืืืื ืืฉืืจื, X ืืื ืืืื ืืขืืืื
ืฉืืื ืื ืฉืืืงืื ืืืื ืืืืจืืฆื โโืืจืืืืื i, j, ืื ื ืืฉืชืืฉ ืืืืืื x ื-y. ืื, ื ืจืื ืื, ื ืขืื ืืืชืจ ืืขืื ืืืจืืจ ืืืชืจ ืืืื. ืื ืืกืฃ, ืกืืืื ืืื ืืืคืฉืจ ืืืงืจืื ืืฆืืจื ื ืืื ืืช ืืืืจืืฆืืช ืืืฉืืฉืืช ืขื ืฆืืจื ืืงืืืืจืืื ืืืช ืฉื ืชืืื ื ืื-ืืืืืช.
ืขืืฉืื ืืืื ืคืืงืกืืื, ืฆืืข ืืชืฆืืื. ืืคืื ืงืฆืื StretchDIBits (Header: windows.h; Library: gdi32.lib) ืืฉืืฉืช ืืคืื. ืืื ืืืชืจ ืืืขืืจืื ืืคืื ืงืฆืื ืื: ืืืืฉืืจ ืื ืืืฆืืช ืืชืืื ื (ืืืงืจื ืฉืื ืืืืืจ ืืงืื ืกืืืช Windows), ืืงืืืืจืืื ืืืช ืฉื ืชืืืืช ืืฆืืช ืืชืืื ื, ืืจืืื/ืืืืื ืืืชืืื ื. ืขืฆืื ืืฆืืจื ืฉื ืืคืช ืกืืืืืช (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() . ืืืืืจ, ืืกืคืจ ืืืชืื ืื ืืจืฉ ืฉืืืจ ืืืืกืื ืืืืข ืขื ืื ืืคืืงืกืืื, ืฉืืืฆื ืืืืจ ืืื ืขื ืืืกื.
ืืฆืืจืช ืืคืช ืกืืืืืช ืฉื 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);
ืืืืคื ืืก, ืืคืช ืกืืืืืช ืืืจืืืช ืืงืืืฆื ืฉื ืคืืงืกืืื. ืื ืืจืืขื ืืชืื ืืืขืจื ืืื ืคืืงืกื RGB. ืืืช ืืื ืืื ืขืจื ืืืื, ืืืช ืืื ืืื ืขืจื ืืจืืง (G), ืืืืื ืืื ืืื ืฆืืข ืืืื (B). ืื ืืกืฃ, ืืฉ ืืืื ืืื ืืื ืื ืืกื. ืฉืืืฉืช ืืฆืืขืื ืืืื - ืืืื / ืืจืืง / ืืืื (RGB) - ืืขืืจืืืื ืื ืืื ืืคืจืืคืืจืฆืืืช ืฉืื ืืช - ืืืชืงืื ืฆืืข ืืคืืงืกืืื ืืืชืงืื.
ืืขืช, ืฉืื, ืื ืืืื, ืื ืืืืืืงื ืืฉืืง, ืืืืฆื ืขื ืืื ืืืจืืฆืช ืืกืคืจืื. ืื ืืคืฆื ืืืฉืืง ืืืื ืืืืงืืื ืืืืกืฃ. ืืื ืื ืืื ืืื ืขื ืืืจืฉ ืืืฉืืงืื, ืืืืฆืจืื ืืืจืืฆื โโืืกืคืจืืช ืืืช ืืืืื. ืืืคืืชื ืื ืืกืคืจ ืืืืจืืฆื โโืืฆืืข ืกืคืฆืืคื. ืืืืืื, ืืืกืคืจ 8 ืืื ืืืื, ืืืกืคืจ 9 ืืื ืฆืืื, ืืืกืคืจ 10 ืืื ืืคืืจ ืืื, ืืื ืืืื. ืืคืืื, ืื ื ืืืืืื ืืืืจ ืฉืืฉ ืื ื ืืืจืืฆื โโืฉื ืฉืื ืืืฉืืง, ืืืฉืจ ืื ืืกืคืจ ืืื ืกืื ืฉื ืฆืืข.
ืื, ืืฉ ืื ื ืืืจืืฆื โโืืกืคืจืืช ืฉื ืื ืฉืื ืืืฉืืง ืืฆื ืืื ืืืคืช ืกืืืืืช ืืืฆืืช ืืชืืื ื ืืฆื ืฉื ื. ืขื ืื, ืืคืช ืืกืืืืืช "ืจืืงื" - ืขืืืื ืืื ืื ืืืืข ืขื ืืคืืงืกืืื ืฉื ืืฆืืข ืืจืฆืื. ืืืฉืืขืืช ืืื ืฉืืฉืื ืืืืจืื ืืืื ืืืืื ืืคืช ืืกืืืืืช ืืืืืข ืขื ืื ืคืืงืกื ืืืชืืกืก ืขื ืืืืจืืฆื โโืืืกืคืจืืช ืฉื ืฉืื ืืืฉืืง. ืืืืื ืืืืืฉื ืฉื ืืจื ืกืคืืจืืฆืื ืืื ืืื ืืชืืื ื ืืืื.
ืืืืื ืืืืืื ืืคืช ืกืืืืืช (Pixel Matrix) ืืืืืข ืืืืืกืก ืขื ืืืืจืืฆื โโืืืกืคืจืืช (Digital Matrix) ืฉื ืืืจืฉ ืืืฉืืงืื (ืืืื ืืฆืืข ืืื ื ืชืืืืื ืืช ืืืืืื ืืืฉืืง)
ืืฆืื ืื ืืชืืืช ืงืื ืืืืชื ืืืืฉืืง. ืืืฉืชื ื colorIndex ืืื ืืืืจืฆืื ืฉื ืืืืืื ืืืงืฆื ืขืจื (ืืื ืืงืก ืฆืืข) ืืืืืจืืฆื โโืืืกืคืจืืช ืฉื ืฉืื ืืืฉืืง (mainDigitalMatrix). ืืื ืืฆืืข ืขืฆืื ื ืืชื ืืืฉืชื ื ืืฆืืข ืืืชืืกืก ืขื ืืืื ืืงืก. ืืชืจ ืขื ืื, ืืฆืืข ืืืชืงืื ืืืืืง ืืืืก ืฉื ืืืื, ืืจืืง ืืืืื (RGB). ืืืื ืขื ื-indent (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 ืืืืฆืืช ืขื ืืืกื ืืคืื ืงืฆืื Draw() . ืืืืจ ืจืืฉืื ืืงืฉืืช ืืคืื ืงืฆืื Input() ืืขืืืืื ืืืืจ ืืื ืืคืื ืงืฆืื Logic() ื ืืฆืจืช ืชืืื ื (ืืกืืจืช) ืืืฉื. ื ืืื, ืืืื ืืืืืช ืฉืืืืืืงืืื ืืืฉืืง ืืืจ ื ืืฆืืื ืืืืงืื ืฉืื ื ืืืืจืฉ ืืืฉืืงืื, ืืืืชืื ืืื ืื ืืฆืืืจืื ืืืงืื ืืืจ. ืื ืืชืจืืฉืช ืื ืืืฆืื (ืชื ืืขื).
ืืชืืืืจืื (ืื ืื ืฉืืืช ืืืื), ืืื ืช ืืืืืช ืืืฉืืง ืืืืฉืืง ืืจืืฉืื ("ื ืืฉ") ืืืช ืืืขืจืืช ืืืฆืืช ืคืืงืกืืื ืขื ืืืกื ืืืืฉืืง ืืฉื ื ("ืื ืงืื") ืืื ืื ืื ืฉืืชื ืฆืจืื ืืื ืืืชืื ืื ืฉื ืืฉืืงื ืืื-ืืื ืฉืื ืขืืืจ Windows. ืืื ืงืื! ๐ ืฉืืจ ืืืืงืื ืื ืจืง ืืขืืฃ.
ืืืืื, ืืืฉืืง "Tanks" ืืขืืฆื ืืจืื ืืืชืจ ืืกืืื ื"ืื ืืฉ". ืืืจ ืืฉืชืืฉืชื ืืฉืคืช C++, ืืืืืจ ืชืืืจืชื ืืืืืืงืื ืืฉืืง ืฉืื ืื ืขื ืืืืงืืช. ืืฆืจืชื ืืืกืฃ ืืฉืื - ื ืืชื ืืจืืืช ืืช ืืงืื ื-headers/Box.h. ืืื, ืืืืกืฃ ืืฉ ืื ืจืื ืืืืคืช ืืืืจืื. ืืฆืืืขืื ืืฉืืืฉืื. ืขืื ืขื ืืืืจืื. ืื ื ืืืื ืืืืจ ืฉืืกืคืจ ืขืืจ ืื ืืืื. ืืชืืืช C++ ืืจื ืชืื ืืช ืืฉืืงืื. ืืืื ืืชืืื ืืฆืืื ืช ืืืชืืืืื ื-C++. ืืื ืงืื, ืืขื ืืื ืืืืืจืื ืืืื.
ืืงื ืืขืจื ืฉืืฉื ืืืืฉืื ืืคืชื ืืช ืืืฉืืง ืืื. ืืชืืชื ืืขืืงืจ ืืืื ืืจืืืช ืฆืืจืืื ืืืืืคืื ืืขืืืื. ืืื ืืฉื ืืืืื ืืืฉืจืื, ืืจืก ืขื ืืืื ืืืชื ืงืื. ืื ืืืืช ืืืจืืืช ืขืจื. ืื ืงืืืืชื ืืืื "ืืืืืืช ืืืื". ืืื ืชืืื, ืืฉืชืืฉืชื ืืืืคื ืคืขืื ืืืืืจืช, ืืื ืืืืจืื ืืจืขืืื ืืื ื ืืืื ืื.
ืืกืืฃ ืืืืง ืืืขืฉื ืืฉืืืฃ ืืื ืกืจืืงืืช ืืืืืืจืช ืฉืื. ืืืจืืืช ืื ืืืืืง ืืชืืชื, ืฆืืืจืชื, ืกืคืจืชื, ืขืืฆืืชื...
ืขืืฆืื ืชืืื ืช ืื ืง. ืืืืืืจื ืฉื ืืื ืคืืงืกืืื ืื ืืืื ืฆืจืื ืืชืคืืก ืขื ืืืกื
ืืืฉืื ืืืืืืจืืชื ืืื ืืกืืืืช ืืกืืืื ืืืืื ืกืืื ืฆืืจื
ืืืืืจืื ืฉื ืืืืกืฃ ืฉืื (ืื ืขื ืืืืคืช ืืืืืจืื, ืงืจืื ืืืืืื). ืืืืกืฃ ื ืืฆืจ ืืจืฉืืื ืืงืืฉืจืช
ืืืื ื ืืกืืื ืืช ืืกืจื ืชืืืืช ืืืคืืง ืืื ื ืืืืืืชืืช ืืืฉืืง
ะขะตะพัะธั
"ืืคืืื ืืกืข ืฉื ืืืฃ ืืืื ืืชืืื ืืฆืขื ืืจืืฉืื" (ืืืืื ืกืื ืืช ืขืชืืงื)
ืืืื ื ืขืืืจ ืืคืจืงืืืงื ืืชืืืืจืื! ืืื ืืชื ืืืฆื ืืื ืืชืืืื ืฉืื?
- ืงืืข ืื ืืชื ืืืืช ืจืืฆื (ืืืื, ืื ืืื ืงืฉื).
- ืงืืข ืกืืจื ืขืืืคืืืืช.
- ืืืงืจืื ืืช ืื ื"ืืืืชืจืื" ืืืขื ืกืืจื ืขืืืคืืืืช ืืืืืื ืืืชืจ.
- ืืชืงืื ืืขืืจ ืืืืจืืช ืฉืื ืื ืืื.
- ืื ืชืฆืคื ืฉืืืื ืฉืขืชืืื-ืฉืืืฉ ืฉื ืืื ืคื ืื ืืชืืืื.
ืืฆื ืืื, ืืชื ืฆืจืื ืืงืืืข ืื ืืชื ืจืืฆื ืืืชืขืืฃ. ืืฆื ืฉื ื, ื ืืชื ืื ืืืฉ ืืืง ืืืืงืจืื/ืคืจืืืงืืื ืืืืืช ืกืืจื ืขืืืคืืืืช ืืื. ืืืืืื ืืืจืืช, ืชืฆืืจื ืืืงืจืื ืื ืืืจ "ืืืืชืจ". ืฉืืขืชื ืืืคืฉืื ืฉืืืืื ืฆืจืืืืช ืืืืืช ืืงืกืืืื ืฉืืืฉ ืคืขืืืืืืช ืขืืงืจืืืช. ืื ืชืืื ืืืชืืืื ืืืชื ืืฆืืจื ืืืืื ืืืืชืจ. ืืคืจืืืงืืื/ืืืืื ืื ื ืืกืคืื ืืชืืืื ืืืขืืืก ืขื ื ืืืฉ. ืืื ืื ืืื, ืื ืจืื, ืกืืืืืงืืืื ืืืื ืืืืืืืืืื.
ืืฉ ืืื ืืื ืืกืืื: ืืขืืื ืื ืชืืื ืื ืืื ืฉื 0%! ืืืืชื ืขื ืื ืืืืืจ ืฉื ืืคืชื ืืื ืื. ืื ืืชื ืขืืื ืขื ืคืจืืืงื, ืื ืขืฉื ืืฉืื ืื ืืืื ืื ืืื. ืืื ืื ืืฉื ื ืืื ืืชื ืืจืืืื. ืืชืื ืืืื ืืืช ืื ืฉืืจืช ืงืื ืืืช, ืฆืคื ืืกืจืืื ืืืจืื ืืื, ืื ืชืงืขื ืืกืืจ ืืื ืืืื - ืคืฉืื ืขืฉื ืืฉืื. ืืืืง ืืื ืงืฉื ืื ืืืชืืื. ืืจืืข ืฉืชืชืืื, ืื ืจืื ืฉืชืขืฉื ืงืฆืช ืืืชืจ ืืื ืฉืจืฆืืช. ืื ืืชื ืื ืืืื ืชืชืงืื ืืขืืจ ืืืืจื ืฉืื, ืืชืืืื ืื, ืืืจ ืืืื. ืืืจื ืืื, ืืืื ืืขืืงืจื ืืื ืืืืจืื ืืื ืืืืื ืืช.
ืืืฉืื ืืืืืจ ืฉืืกืืจ ืืืืื ืืืืชืขืื ืื"ื ืกืืจืช" ืืคื ืื ืฉื ืืืื ื-5, 10, 15 ืืงืืช, ืืื ืืืื "ืืืืื" ืืืืืื ืฉืืืฉืื ืฉืขื-ืฉืขืชืืื. ืืชื ืขืืื ืืชืืจ? ืชืืฉืื ืขื ืืฉืื ืขืืืจ ืืคืจืืืงื ืฉืื. ืืชื ืขืืื ืืืืจืืืช ืื ืขืืช? ืจืฉืื ืืฉืื ืืืืืจืช. ืืชื ืืืื ืืืืืืืืก? ืืืงืื, ืงืจื ืืืื ืืืืจ. ื ืฆื ืื ืืืืื ืืช. ืืคืกืืงื ืืฆืคืืช ืืืชืืืื ืืืืืื ืืืืืืื! ืื ืชืชืขืกืง ืขื ืืืื ืฉืื!
ืืืืืจืื. ืื, ืืืืจ ืงืจืืืช ืืืืจ ืื, ืืืืช ืืช ืืจืขืืื ืืืฆืืจ ืืฉืืงืื ืืื ืฉืืืืฉ ืืื ืืขื ืืฉืืง, ืื ืืืืจ ืืช ืืฉื ืงืืืกื ืืืจืืืืจื. ืืืืืจ ืืื ืืฉ
ืงืืืกื ืื ืืกืืืจ ืื ืขื ืืื ืคืืชืื ืื ืืข ืืฉืืง ืืฉืื, ืชืืื ืื ืืื ื ืืืื ืืืชืจ ืฉื ืื ืืื ืืขืื ืืงืืืืื. ืืขืืื ืืืกืืจืช, ืฉืื ืืืื ืื ืกืื ืืืฆืข ืืืืืืฆืื, ืชืืืื ืืื ืืืฆืืจ, ืื ืืืฉืชืืฉ. ืืืืื ืืช ืืืขื ืฉื ืืืฉืืื. ืืืชื ืื ืชืืคืื ืืืชืื ืช ืืจืื ืืืชืจ ืืื ืืืืื ืื ืืืืืจ - ืืงืฆืืขื.
ืืืฆืืื ืืืจื ืฉืืืจืช! ืืืืื ื ืืคืื ืืช ืืขืืื ืืืงืฆืืขื ืืืชืจ.
ืืืืจ: ืืจื ืงืื ืื ืืจืื , DevOps
ืืงืืจ: www.habr.com