๋‚ด ์ธ์ƒ์—์„œ ๋ฏฟ์„ ๊ฑด ์˜ค์ง ๋‚˜ ์ž์‹ ๋ฟ!

The only one you can truly trust is yourself.

๊ฒŒ์ž„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ/2026๋…„ 1.44MB ๊ฒŒ์ž„๊ณต๋ชจ์ „

1.44MB ๊ฒŒ์ž„ ๊ณต๋ชจ์ „์— ๋„์ „ํ•ด๋ณด์ž!

๐ŸŽฎinspirer9 2026. 6. 15. 22:57

์ดˆ์‹ฌ์œผ๋กœ ๋Œ์•„๊ฐ€์„œ ๋‚ด๊ฐ€ ๊ฒŒ์ž„ ์—…๊ณ„์— ์™œ ์˜ค๊ฒŒ ๋˜์—ˆ์„๊นŒ?

์ดˆ๋“ฑํ•™๊ต๋•Œ๋ถ€ํ„ฐ ์ข‹์•„ํ•˜๋Š” ๊ฒŒ์ž„์„ ๋”ฐ๋ผ ๋งŒ๋“ค๋‹ค๊ฐ€, ๋‚˜๋งŒ์˜ ๊ฒŒ์ž„์„ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ํ”Œ๋ ˆ์ด์‹œํ‚ค๊ณ  ์‹ถ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด์—ˆ๋‹ค.

ํ•˜์ง€๋งŒ ํšŒ์‚ฌ๋ฅผ ๋‹ค๋‹ˆ๋ฉด์„œ ์ ์  ๊ทธ ๊ธฐ์–ต๋“ค์€ ์žŠํ˜€์ ธ๊ฐ”๊ณ , ์™„์ „ํžˆ ๋‹ค ํƒ€๋ฒ„๋ฆฌ๊ณ  ์žฌ๋งŒ ๋‚จ์•˜์—ˆ๋‹ค.

์ตœ๊ทผ์— 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