์ด์ฌ์ผ๋ก ๋์๊ฐ์ ๋ด๊ฐ ๊ฒ์ ์ ๊ณ์ ์ ์ค๊ฒ ๋์์๊น?
์ด๋ฑํ๊ต๋๋ถํฐ ์ข์ํ๋ ๊ฒ์์ ๋ฐ๋ผ ๋ง๋ค๋ค๊ฐ, ๋๋ง์ ๊ฒ์์ ์ฌ๋๋ค์๊ฒ ํ๋ ์ด์ํค๊ณ ์ถ์๊ธฐ ๋๋ฌธ์ด์๋ค.
ํ์ง๋ง ํ์ฌ๋ฅผ ๋ค๋๋ฉด์ ์ ์ ๊ทธ ๊ธฐ์ต๋ค์ ์ํ์ ธ๊ฐ๊ณ , ์์ ํ ๋ค ํ๋ฒ๋ฆฌ๊ณ ์ฌ๋ง ๋จ์์๋ค.
์ต๊ทผ์ 1.44MB ๊ฒ์ ๊ณต๋ชจ์ ์ด๋ ๊ฑธ ์๊ฒ ๋์ด ์ด๊ฒ ์ ๊ฒ ๊นจ์๊ฑฐ๋ฆฌ๋ค๋ณด๋ ์๋ ๊ธฐ์ต๋ ๋๊ณ , ๊ณผ๊ฑฐ ์์ค ์ฝ๋๋ค๋ ๋ค์ ธ๋ณด๊ณ ...
๊ฒ์์ ๋ง๋๋ ์ฌ๋ฏธ๊ฐ ์ด์๋๊ธฐ ์์ํ๋ค. ๊ทธ๋์ ์ด ์ฐธ์ ๊ด๋ จ ์ปจํ ์ธ ๋ฅผ ์ฐ์ฌํด๋ณด๋ ค๊ณ ํ๋ค.
์์งํ ๋งํ๋ฉด ๋ค์ด๋ฒ ๋ธ๋ก๊ทธ์ ์ฌ๋ ธ์๋๋ฐ ์ ์ ์ด ์์ผ๋ฏ๋ก, ๋์ผํ๊ฒ ์ ์ ์ด ์๋ ํฐ์คํ ๋ฆฌ์ ์ฐ์ฌํ๋ ๊ฒ์ด๊ธฐ๋ ํ๋ค.


์ฐ์ ๋งจ ์ฒ์์ ์์ง๋ถํฐ ์ดํด๋ณด์๋ค.
- ์์ ์ ํ๋ฆฌํฐ์ ๊ฒ์์ ๋ง๋ค ์ ์๋ ์์ง(๊ณ ๋, ์ ๋ํฐ, ์ธ๋ฆฌ์ผ)์ ํ๋ฝ์ด๋ค. ๊ธฐ๋ณธ ์ปดํ์ผ๋ ์ฉ๋์ด 30~40MB๊ฐ ๋๋ค.
- ๋ ํ์ด, Pygame๋ ์ญ์ ๋ฉํํ๊ฒ ๋๋ฉด ์ฉ๋์ด 30-40MB๊ฐ ๋๋ค.
- PIC-8์ด๋ TIC-80๋ ์คํํ์ผ์ ๋๋ต 5MB ์ ๋๊ฐ ๋๋ค.
- DirectX, OpenGL, SDL, CDX ๊ฐ์ ๊ฑธ ํ๋ฉด ๋ ๊ฒ ๊ฐ์๋ฐ ๋๊ด์ด ์์๋ค.
- ์ฉ๋ ์์ DirectX9 SDK๋ฅผ ๋ค์ด ๋ฐ์์ ์ค์นํ๋๋ฐ, ์ค์น๊ฐ ์คํจํ๋ค.
- OpenGL์ SDL์ ๋์ ๋งํฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ์ด ์MB์ด๋ค.
- SDL3์ ๊ฒฝ์ฐ SDL3.dll์ด 2.7MB์ด๋ค.
- SDL2์ ๊ฒฝ์ฐ ์๋ ์ฉ๋์ด ๋ ์์๋๋ฐ, ์ต์ SDL2๋ SDL3๋ก ๋ง๋ค์ด์ ธ์ ์๋ฏธ๊ฐ ์๋ค.
- SDL1์ 252KB์ง๋ง ์คํ์ด ๋์ง ์์๊ณ , LGPL ๋ผ์ด์ ์ค๋ผ์ ์์ค์ฝ๋ ์ค์ผ ๋ฌธ์ ๋ ์๋ค.
์ฆ, ๊ณต๋ชจ์ ์ ์กฐ๊ฑด์ธ 1.44MB๋ฅผ ์ด๊ณผํ๋ค. ์ด๋ป๊ฒ ํ์ง?
- ๊ฐ์ฅ ๋จผ์ ๋ ์ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฝ์ ํ๋ก์ ํธ ์๋ค.
- Stone Story ๊ฐ์ ๊ฒ์์ด ๋จผ์ ๋ ์ฌ๋๋๋ฐ,
- ์ด๊ฑด ์ง์ง ์ฝ์์ด ์๋๋ค.


- ๊ทธ๋ผ ๊ฒฐ๊ตญ win32+gdi32๋ก ๋ง๋ค์ด์ผ ํ๋ค.
- ์ด์ ๊ธฐ์ต๋ ๋์ง ์๋... ํ์ง๋ง ๋์๊ฒ AI๊ฐ ์๋ฐ!

- ๊ทธ๋์ ๋ฐ์ด๋ธ์ฝ๋ฉ์ผ๋ก win32 ์๋์ฐ ์ฐฝ์ ํ๋ ๋ง๋ค์ด๋ฌ๋ผ๊ณ ํ์๋ค.
- 8์ด๋ง์ ๋ฝ์์ ธ๋์๋ค.

์ฝ๋๋ผ์ธ 43์ค...
#include <windows.h>
#define SCREEN_WIDTH 320
#define SCREEN_HEIGHT 240
#define WINDOW_SCALE 2
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
switch (msg) {
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProcA(hwnd, msg, wParam, lParam);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
WNDCLASSA wc = {0};
wc.lpfnWndProc = WndProc;
wc.hInstance = hInstance;
wc.lpszClassName = "SimpleWindow";
wc.hCursor = LoadCursorA(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
RegisterClassA(&wc);
RECT wr = {0, 0, SCREEN_WIDTH * WINDOW_SCALE, SCREEN_HEIGHT * WINDOW_SCALE};
AdjustWindowRect(&wr, WS_OVERLAPPEDWINDOW, FALSE);
HWND hwnd = CreateWindowExA(
0, "SimpleWindow", "Skimming",
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
CW_USEDEFAULT, CW_USEDEFAULT,
wr.right - wr.left, wr.bottom - wr.top,
NULL, NULL, hInstance, NULL
);
MSG msg = {0};
while (GetMessageA(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessageA(&msg);
}
return 0;
}
์ฌ์ฉ IDE์ ์ปดํ์ผ๋ฌ๋ Code::Blocks์ MingW๋ฅผ ์ฌ์ฉํ๋ค. ๋น์ฃผ์ผ ์คํ๋์ค๋ ๋๋ฌด ๋ฌด๊ฑฐ์์...

ํ๋ก์ ํธ๋ console application์ผ๋ก ์์ฑํ๋ค.
- ํ๋ก์ ํธ ์นดํ ๊ณ ๋ฆฌ : console application
- ์ธ์ด : c++
- ํ๋ก์ ํธ๋ช : hack
- ์ปดํ์ผ๋ฌ : GNU GCC ์ปดํ์ผ๋ฌ (๋๋ฒ๊ทธ / ๋ฆด๋ฆฌ์ฆ ์ค์ ๋ชจ๋ ์ฒดํฌ)
ํ๋ก์ ํธ๊ฐ ์์ฑ๋๋ฉด main.cpp๋ฅผ ์ด์ด์ AI๊ฐ ๋ง๋ ์ฝ๋๋ฅผ ๋ณต๋ถํ๋ค.
๊ทธ๋ฆฌ๊ณ Project -> Build Options์์ ๋ง์ปค ์ธํ
์ ํด์ฃผ์ด์ผ ํ๋ค.
- Project build option -> hack -> Linker settings -> Link libraries

๊ทธ๋ฆฌ๊ณ ์ปดํ์ผํ๋ฉด 131KB์ง๋ฆฌ ์คํํ์ผ์ด ํ๋ ๋์จ๋ค.

์ด๊ฒ debug๋ผ์ ๊ทธ๋ฐ๊ฒ์ด๊ณ release๋ก ์ปดํ์ผํ๋ฉด~ 18KB๊ฐ ๋๋ค.

๋๋ฒ๊ทธ์ ๋ฆด๋ฆฌ์ฆ ๋ฐ๊พธ๋ ๊ฑด ์์์ ํ ์ ์๋ค.

๊ทธ๋ฆฌ๊ณ , ์ปดํ์ผ๋ฌ ์ต์
์ ์ข ๋ ์์ ํด์ผ ํ๋๋ฐ, ์ฐ์ ์ฉ๋์ ์ค์ด๊ธฐ ์ํด Release๋ง ๊ณ ์น๋ค.
๋ฆด๋ฆฌ์ฆ๋ ํ์ผ์ ์์กด์ฑ์ด ์์ด์ผ ํ๋ฏ๋ก, mingW์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ์ ๋งํฌ ํด์ค๋ค.

๊ทธ๋ฆฌ๊ณ -O3์ผ๋ก ์ฉ๋ ์ต์ ํ๋ฅผ ์งํํ๊ณ , -s๋ก ๋๋ฒ๊ทธ์ฉ ์ฌ๋ณผ์ ์ ๊ฑฐํ๋ค.

๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ผ๋ก upx๋ก -9(์ต๋ ์์ถ) ์ต์ ์ ์ด์ฉํด ์ฉ๋์ ๋ ๋ค์ด์ดํธ ํ๋ ๊ฒ์ด๋ค.

๊ทธ๋ฌ๋ฉด 18.432Bytes๊ฐ 9728Bytes๊ฐ ๋๋ค.

์ด๋ ๊ฒ ์ฒซ ์ฝ์ ๋ด๋ค.
์ฌ์ค ์ด๋ฏธ ๋ช๊ฐ ๋ง๋ค์ด๋ณด์๋๋ฐ, ๊ทธ์ค ํ๊ฐ ์์ฑ๋ ๊ฒ์์ ์ฌ๊ธฐ์ ์๋ค. -> https://dev9.itch.io/solo-2play
SOLO 2PLAY by dev9
2player shooter for 1 player
dev9.itch.io
'๊ฒ์ ํ๋ก๊ทธ๋๋ฐ > 2026๋ 1.44MB ๊ฒ์๊ณต๋ชจ์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๋ ์ด๋ผ์ด๋ธ 6.x ๊ฒ์์ผ ๊ฒฐ๊ณผ (0) | 2026.07.19 |
|---|---|
| Raylib๋ก 1.44MB ๊ฒ์ ๊ณต๋ชจ์ ๋์ ํ๋ ๋ฐฉ๋ฒ (0) | 2026.06.30 |
| ์๋์ฐ ์ฑ ์์ด์ฝ์ ๋ฐ๊ฟ๋ณด์! (0) | 2026.06.17 |
| WndProc์ WinMain ์ญํ ๊ณผ ์ฐจ์ด์ (0) | 2026.06.16 |