• ·Î±×ÀÎ ÇÔ ÇØº¸²ô³ª?

  • Sarangnamu.net June 17, 2003
    Home Login Study Open Project Gallery Free board Google Code
    Direct X (Direct Draw3)


    À©µµ¿ì ¸ðµå

    À©µµ¿ì ¸ðµå·Î DirectX¸¦ ¿òÁ÷ÀÌ·Á¸é , ±â¹ÝÀÌ µÇ´Â À©µµ¿ìÀÇ Á¤Àǵµ
    º¯°æÇØ¾ß ÇÕ´Ï´Ù.

    Áö±Ý±îÁö ÇÁ·Î±×·¥Àº Ç® ½ºÅ©¸°¿¡ ÀûÀýÇÑ ÇüÅÂÀÇ À©µµ¿ì Á¤Àǰ¡ µÇ¾î ÀÖ¾úÀ¸¹Ç·Î
    À̹ø¿¡´Â À©µµ¿ì ¸ðµå¿¡ ÀûÀýÇÑ À©µµ¿ì Á¤ÀǸ¦ ÇÕ´Ï´Ù.

    hwnd = CreateWindowEx(
        WS_EX_TOPMOST,
        "DirectX GamePrograming",
        "DirectX GamePrograming",
        WS_POPUP,//À©µµ¿ì ½ºÅ¸ÀÏ
        0,//À©µµ¿ì XÁÂÇ¥ ½ÃÁ¡
        0,//À©µµ¿ì YÁÂÇ¥ ½ÃÁ¡
        GetSystemMetrics(SM_CXSCREEN),//À©µµ¿ì »çÀÌÁî X
        GetSystemMetrics(SM_CXSCREEN),//À©µµ¿ì »çÀÌÁî Y
        (HWND) NULL,
        (HMENU) NULL,
        hInstance,
        (LPVOID) NULL);

    À§´Â À©µµ¿ì¸¦ »ý¼ºÇϴ ó¸®ÀÇ ºÎºÐÀÔ´Ï´Ù.
    ¿©±â¼­ À©µµ¿ì ÇÚµé ¡¸HWND¡¹¿¡ À©µµ¿ìÀÇ ID¸¦ °Ç³×¹Þ´Â ºÎºÐµµ
    º¯°æÇØ¾ß ÇÕ´Ï´Ù.(À§ÀÇ ÄÚµå´Â Ç® ½ºÅ©¸°¿¡ ÀûÀýÇÑ ÇüÅÂ)

    Á¦4 ÆÄ¶ó¹ÌÅ͸¦ ÀÌÇÏ¿Í °°ÀÌ º¯°æÇÕ´Ï´Ù.
    WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION,

    À̰ÍÀº ¡¸¸Þ´º¡¹ ¡¸Å׵θ®¡¹ ¡¸À©µµ¿ì ±âº» ±â´É¡¹µîÀ» Ãß°¡ÇÏ´Â Ç÷¡±×ÀÔ´Ï´Ù.
    (Ç÷¡±×ÀÇ Àǹ̴ ÇïÇÁ ÂüÁ¶)

    ´ÙÀ½À¸·Î º¯°æ ÇØ¾ß ÇÒ °ÍÀº Á¦7, 8 ÆÄ¶ó¹ÌÅÍÀÔ´Ï´Ù.
    À̰ÍÀº »ý¼ºÇÏ´Â À©µµ¿ìÀÇ »çÀÌÁî¿¡ ´ëÇÑ ÆÄ¶ó¹ÌÅÍÀÔ´Ï´Ù.
    À©µµ¿ì ¸ðµå¿¡¼­´Â ¡¸Å׵θ®¡¹¡¸¸Þ´º¡¹µîÀ» °¡Áö¹Ç·Î ±âº» »çÀÌÁî¿¡ ÀÌ ¡¸Å׵θ®¡¹µî
    ÀÇ »çÀÌÁ Ç÷¯½ºÇØ¾ß ÇÕ´Ï´Ù.

    (À©µµ¿ì ¸ðµå¿¡¼­´Â ±× ¶§¹®¿¡ Á¶±Ý Ä¿Áø´Ù(Ŭ¶óÀÌ¾ðÆ®´Â °°Àº »çÀÌÁî))

    ½Ã½ºÅÛÀÇ ÆøÀ» Á¶»çÇÏ·Á¸é ¡¸GetSystemMetrics ÇÔ¼ö¡¹¸¦ »ç¿ëÇÕ´Ï´Ù.
    Å׵θ®µîÀº °æ¿ì¿¡ µû¶ó¼­ ÆøÀÌ ¹Ù²ð ¼ö ÀÖÀ¸¹Ç·Î À§ÀÇ ÇÔ¼ö¸¦ »ç¿ëÇØ ±× »çÀÌÁ ÃëµæÇÏÁö ¾ÊÀ¸¸é ¿Ã¹Ù¸¥ °ªÀ» ÃëµæÇÒ ¼ö ¾ø½À´Ï´Ù.

    int GetSystemMetrics(
        int nIndex // system metric or configuration setting to retrieve
    );

    ÆÄ¶ó¹ÌÅÍ´Â ¾î´À ½Ã½ºÅÛÀÇ ÆøÀ» ¸®ÅÏÇÒ±î? ÀÇ Ç÷¡±×·Î ¸®ÅÏ °ªÀº INTÇüÀÔ´Ï´Ù.

    SM_CXFIXEDFRAM                ¹üÀ§ »çÀÌÁî(´Ù¸¥ ÇÑÂÊ)
    SM_CYCAPTION                 ŸÀÌÆ² ¹ÙÀÇ ³ôÀÌ
    SM_CYMENU                        1ÇàÀÇ ¸Þ´ºÀÇ ³ôÀÌ

    À§´Â Ç÷¡±×ÀÇ ÇϳªÀÇ ¿¹ÀÔ´Ï´Ù.
    ÇÔ¼ö¸¦ »ç¿ëÇØ¼­ °ÔÀÓ È­¸é »çÀÌÁ½Ã½ºÅÛ ÆøÀ» À©µµ¿ì »ý¼ºÀÇ »çÀÌÁî·Î ÇÕ´Ï´Ù.

    640+GetSystemMetrics(SM_CXFIXEDFRAME)*2//°¡·ÎÀÇ ½Ã½ºÅÛÆø
    480+GetSystemMetrics(SM_CYCAPTION) +GetSystemMetrics(SM_CYFIXEDFRAME)*2//¼¼·Î

    (ÀÌ °ª¿¡¼­ ¸Þ´ºÀÇ ³ôÀÌ´Â Æ÷ÇÔµÇÁö ¾Ê´Â´Ù)

    ÀÌ º¯°æÀ¸·Î À©µµ¿ì ¸ðµåÀÇ »ý¼ºÀº Á¾·áÀÔ´Ï´Ù.

    À©µµ¿ì ¸ðµåÀÇ Á¦ÇÑ
    Ç® ½ºÅ©¸°°ú ´Ù¸£´Ù

    Ç® ½ºÅ©¸° ¸ðµå¿¡¼­´Â È­¸éÀ» µ¶Á¡ÇÏÁö¸¸ À©µµ¿ì ¸ðµå¿¡¼­ ±×°ÍÀº ºÒ°¡´ÉÇÕ´Ï´Ù.
    À©µµ¿ì ¸ðµå¿¡¼­´Â ´Ù¸¥ ¾îÇø®ÄÉÀ̼ǰú °øÁ¸ÇÏÁö ¾ÊÀ¸¸é ¾È µÇ±â ¶§¹®¿¡
    Á¦¾àÀÌ ¹ß»ýÇÕ´Ï´Ù.

    ¨ç£ºÆÈ·¹Æ®ÀÇ Á¦ÇÑ

    ÇØ»óµµ°¡ ¡¸256Ä®¶ó¡¹ÀÏ °æ¿ì, À©µµ¿ì ¸ðµå·Î »ç¿ëÇÒ ¼ö ÀÖ´Â ÆÈ·¹Æ®°¡ ÇÑÁ¤µË´Ï´Ù.

    ÀÌ °æ¿ì, ÆÈ·¹Æ®ÀÇ ¡¸0~9¹ø¡¹ ¡¸246~255¹ø¡¹Àº À©µµ¿ì ½Ã½ºÅÛÀÌ »ç¿ëÇÏ´Â
    ½Ã½ºÅÛ Ä®¶ó·Î¼­ µî·ÏµÇ¾î ÀÖÀ¸¹Ç·Î ÀÌ ÆÈ·¹Æ®¸¦ º¯°æÇϸé WINDOWS ÀÚ½ÅÀÇ »öÀÌ
    ÀÌ»óÇÏ°Ô µÇ¾î ¹ö¸³´Ï´Ù.


    ¨è£ºÇø³À» ÇÒ ¼ö ¾ø´Ù

    Ç® ½ºÅ©¸° ¸ðµå¿¡¼­´Â attach µÈ ¹é ¹öÆÛ¿Í Çø³À¸·Î ¹¦È­ Çϰí ÀÖ¾úÁö¸¸
    À©µµ¿ì ¸ðµå¿¡¼­´Â attach µÈ ¹é ¹öÆÛ¸¦ ¸¸µé ¼ö°¡ ¾ø½À´Ï´Ù.

    À©µµ¿ì ¸ðµå¿¡¼­ ¹¦È­´Â attachµÇ¾î ÀÖÁö ¾ÊÀº ¼­ÆäÀ̽º¿¡¼­ ÇÁ¶óÀ̸Ӹ®¿¡ Àü¼ÛÀÌ ¹¦È­
    󸮰¡ µË´Ï´Ù.

    ¨é£ºÇÁ¶óÀ̸Ӹ®¼­ÆäÀ̽º

    ÇÁ¶óÀ̸Ӹ®¼­ÆäÀ̽º´Â µð½ºÇ÷¹ÀÌ Àüü°¡ µË´Ï´Ù.

    ¹¦È­ ÁÂÇ¥µµ È­¸é ÁÂÇ¥ ´ÜÀ§°¡ µË´Ï´Ù.
    (Ãʱ⼳Á¤ ÇÑ Å¬¶óÀÌ¾ðÆ® À̿ܿ¡µµ ¹¦È­ °¡´ÉÇÏ°Ô µÈ´Ù.)
    º¸Åë °ÔÀÓ¿¡¼­´Â À̰ÍÀ» °í·ÁÇØ ¹¦È­ÇØ¾ß ÇÕ´Ï´Ù.

    Draw ÃʱâÈ­
    if(dd->SetCooperativeLevel(hwnd, DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN)!=DD_OK)
        return FALSE; //À©µµ¿ìÀÇ ¼³Á¤À» º¯°æ

    Draw ÃʱâÈ­ÀÇ Çϳª¡¤¡¤¡¤ÇùÁ¶¸¦ Çϰí ÀÖ´Â °÷µµ º¯°æÇØ¾ß ÇÕ´Ï´Ù.
    Á¦2 ÆÄ¶ó¹ÌÅͰ¡ ¡¸DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN¡¹°¡ µÇ¾î ÀÖ½À´Ï´Ù.
    À̰ÍÀº ¡¸¹èŸ ¶Ç´Â Ç® ½ºÅ©¸°¡¹À̶ó´Â Ç÷¡±×ÀÔ´Ï´Ù.

    À̰ÍÀ» ¡¸DDSCL_NORMAL¡¹·Î º¯°æÇÕ´Ï´Ù.
    ÀÌ·¸°Ô ÇÔÀ¸·Î ÇùÁ¶ ·¹º§ÀÌ ¡¸À©µµ¿ì ¸ðµå¡¹°¡ µË´Ï´Ù.


    SURFACE ÃʱâÈ­

    ¼­ÆäÀ̽ºÀÇ ÆÄ¶ó¹ÌÅ͵µ Ç® ½ºÅ©¸°°ú À©µµ¿ì ¸ðµå¿¡¼­´Â ´Þ¶óÁý´Ï´Ù.

    DDSURFACEDESC2         ddsd;    //DDSURFACEDESC ±¸Á¶Ã¼

    memset((VOID *) &ddsd, 0, sizeof(ddsd));
    ddsd.dwSize=sizeof(ddsd);
    ddsd.dwFlags=DDSD_CAPS|DDSD_BACKBUFFERCOUNT;
    ddsd.ddsCaps.dwCaps=DDSCAPS_PRIMARYSURFACE|DDSCAPS_COMPLEX|DDSCAPS_FLIP;
    ddsd.dwBackBufferCount=1;
    À§¿¡ ÀÖ´Â ºÎºÐÀÌ ÇÁ¶óÀ̸Ӹ® ¼­ÆäÀ̽º¸¦ ¼³Á¤ÇÏ´Â ÇàÀÔ´Ï´Ù.
    Àû»ö ¹®ÀÚÀÇ ºÎºÐÀº ¡¸À©µµ¿ì ¸ðµå¡¹¿¡¼­´Â ÇÊ¿ä¾ø´Â ºÎºÐÀÔ´Ï´Ù.

    À©µµ¿ì ¸ðµå´Â attach ÇÒ ¼ö ÀÖ´Â ¹é ¹öÆÛ¸¦ °¡Áú ¼ö ¾ø±â ¶§¹®¿¡
    Çø³À» ÇÒ ¼ö°¡ ¾ø´Ù¡¤¡¤¡¤¡¤À̰ÍÀ» °í·ÁÇϸé À§ÀÇ Ç÷¡±×¸¦ Áö¿ì´Â ÀÌÀ¯¸¦ ÀÌÇØÇÒ ¼ö ÀÖ´Ù°í »ý°¢ÇÕ´Ï´Ù

    ddsd.dwSize=sizeof(ddsd);
    ddsd.dwFlags=DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
    ddsd.ddsCaps.dwCaps=DDSCAPS_OFFSCREENPLAIN;
    ddsd.dwWidth = 640;
    ddsd.dwHeight = 480;
    dd->CreateSurface(&ddsd, &BackSurface, NULL);

    ´ÙÀ½Àº º¯°æµÇ´Â ¹é ¹öÆÛÀÇ ¼­ÆäÀ̽º¸¦ »ý¼ºÇÕ´Ï´Ù.
    ¿©±â´Â º¸ÅëÀÇ ¼­ÆäÀ̽º¸¦ ¸¸µì´Ï´Ù.

    À©µµ¿ì ¸ðµå¿¡¼­ÀÇ ¹¦È­

    À©µµ¿ì ¸ðµå¿¡¼­´Â attach µÈ ¹é ¹öÆÛ¸¦ °¡Áú ¼ö°¡ ¾ø±â ¶§¹®¿¡
    Çø³ ¸Þ¼Òµå¿¡ ÀÇÇÑ ¹¦È­¸¦ ÇÒ ¼ö ¾ø½À´Ï´Ù.

    °Å±â¼­ À©µµ¿ì ¸ðµåÀÏ ¶§´Â Ŭ¶óÀÌ¾ðÆ® ¿µ¿ª°ú °°Àº »çÀÌÁîÀÇ ¼­ÆäÀ̽º¸¦ »ý¼ºÇؼ­
    ¹¦È­ ÇØ ¹¦È­°¡ ³¡³ª¸é ±× ¼­ÆäÀ̽ºÀÇ ³»¿ë°ú ÇÁ¶óÀ̸Ӹ® ¼­ÆäÀ̽º·Î Àü¼Û ÇÏ´Â
    ¹æ¹ýÀ¸·Î ¹¦È­¸¦ ÇÕ´Ï´Ù.

    À©µµ¿ì ¸ðµå¿¡¼­ÀÇ ¹¦È­ÀÇ È帧Àº À§¿¡ ±×¸²¿¡ ³ªÅ¸³­ ´ë·Î ¹é ¹öÆÛ(Çø³ ºÒ°¡)¿¡¼­ ¡¸Blt¡¹¸¦ ÇÕ´Ï´Ù.

    ±× Àü¼ÛÇÒ °÷ÀÇ ÁÂÇ¥´Â À¯ÀúÀÇ ¼Õ¿¡ ÀÇÇØ Ç×»ó º¯°æ °¡´ÉÇÑ °ÍÀÌ À©µµ¿ì ¸ðµåÀÔ´Ï´Ù.
    ±× ¶§¹®¿¡ Ç×»ó ¿Ã¹Ù¸¥ À§Ä¡ÀÇ À©µµ¿ì ÁÂÇ¥¸¦ ÃëµæÇØ °Å±â¿¡ ¡¸Blt¡¹ÇØ¾ß ÇÕ´Ï´Ù.

    À©µµ¿ì°¡ ¿òÁ÷¿´´Ù°í ÇÏ´Â ¸Þ¼¼Áö 󸮸¦ Ãß°¡ÇÕ´Ï´Ù.
    À©µµ¿ì°¡ ¿òÁ÷ÀÌ¸é ¡¸WM£ßMOVE ¸Þ¼¼Áö¡¹°¡ ¹ßÇàµÇ¹Ç·Î ±× 󸮿¡
    ÇöÀçÀÇ À©µµ¿ìÀÇ ±¸Çü À§Ä¡¸¦ ¾ò´Â 󸮸¦ ÇÕ´Ï´Ù.

    ¡¸Blt¡¹´Â À̰ÍÀ¸·Î ±¸ÇÒ ¼ö ÀÖ´ø °ªÀ» ¹ÙÅÁÀ¸·Î ¹¦È­ ÇÕ´Ï´Ù.
    ¿ì¼± ¡¸WM£ßMOVE ¸Þ¼¼Áö¡¹·Î À©µµ¿ìÀÇ °ªÀ» ¾ò´Â ó¸®(ÇÔ¼ö)¸¦
    »ý°¢ÇØ º¾½Ã´Ù.

    À̶ó°í ÇÒ±î, ȸ´äÀÌ ÀÌÇÏÀÔ´Ï´Ù

    void GetClientRect(void)
    {
        POINT clientpos={0,0}//Ŭ¶óÀÌ¾ðÆ® Æ÷Áö¼Ç
        ClientToScreen(hwnd, &clientpos);
        //À©µµ¿ìÀÇ Á»ó´Ü ÁÂÇ¥¸¦ È­¸é ÁÂÇ¥·Î ÇÑ´Ù
        //ScreenClientRect´Â ±Û·Î¹úÀÇ RECT ±¸Á¶Ã¼
        ScreenClientRect.left=clientpos.x//½ÃÁ¡ XÁÂÇ¥
        ScreenClientRect.top=clientpos.y//½ÃÁ¡ YÁÂÇ¥
        ScreenClientRect.right=clientpos.x + _ScreenXsize;
        //Á¾Á¡ XÁÂÇ¥
        ScreenClientRect.bottom=clientpos.y + _ScreenYsize;
        //Á¾Á¡ YÁÂÇ¥
        //¡¡_¡¡¾ÕºÎºÐ¿¡ ¼ÂÆÃµÇ¾î ÀÖ´Â ¸ÅÅ©·ÎÀÔ´Ï´Ù.
        //½ÃÁ¡¿¡ À©µµ¿ì »çÀÌÁîÀÇ ¸ÅÅ©·Î¸¦ Ãß°¡ÇÔÀ¸·Î
        // Ŭ¶óÀ̾ðÆ®ÀÇ Å©±â¸¦ ¾Ë ¼ö ÀÖ½À´Ï´Ù.
    }

    ±×·³ ó¸®ÀÇ ¼³¸íÀ» ÇÕ´Ï´Ù.

    ¡¸ClientToScreen ÇÔ¼ö¡¹´Â ÁöÁ¤µÈ À©µµ¿ì ÇÚµé(HWND)ÀÇ À©µµ¿ìÀÇ Å¬¶óÀ̾ðÆ®
    ÁÂÇ¥ÀÇ °ªÀ» È­¸éÀÇ ÁÂÇ¥ °ªÀ¸·Î º¯°æÇØ ÁÝ´Ï´Ù.

    ÀÌ °æ¿ì Ŭ¶óÀÌ¾ðÆ® °ª ¡¸clientpos¡¹´Â È­¸éÀÇ ¡¸0, 0¡¹¸¦ ÀÌ ÇÔ¼ö¿¡ °Ç³×ÁÖ¾î
    °á°ú, ¡¸clientpos¡¹¿¡´Â ½ºÅ©¸°(µð½ºÇ÷¹ÀÌÀÇ)ÀÇ ÁÂÇ¥°¡ °Ý³³µË´Ï´Ù.

    À§ÀÇ »ùÇà ÄÚµåÀÇ ¡¸ScreenClientRect¡¹´Â RECT ±¸Á¶Ã¼·Î ¡¸Blt¡¹ÇÒ ¶§ÀÇ
    Ç¥½ÃÇÒ °÷ÀÇ °ªÀ» °Ý³³ÇÏ´Â ±Û·Î¹ú ±¸Á¶Ã¼ÀÔ´Ï´Ù.

    ±× ±¸Á¶Ã¼¿¡¼­ ¾òÀ» ¼ö ÀÖ´ø È­¸é ÁÂÇ¥¸¦ ¹ÙÅÁÀ¸·Î Ŭ¶óÀ̾ðÆ®ÀÇ °ª(rect)À» °Ç³×ÁÝ´Ï´Ù.
    ½ÃÀÛÁ¡Àº ¡¸ClientToScreen ÇÔ¼ö¡¹·Î ¾ò´Â °ª°ú °°½À´Ï´Ù.

    ³¡Á¡Àº ¾òÀº °ª£«Å¬¶óÀ̾ðÆ®ÀÇ »çÀÌÁî·Î ¾òÀ» ¼ö°¡ ÀÖ½À´Ï´Ù.

    ¹¦È­´Â ÀÌ·¸°Ô µÈ´Ù

    À©µµ¿ì ¸ðµå¿¡¼­´Â ¡¸Çø³¡¹À» ÇÒ ¼ö ¾ø±â ¶§¹®¿¡.
    ¼Ò½ºÄÚµåÀÇ ¡¸Flip¡¹ÇÔ¼ö(È­¸é ¹Ý¿µ ó¸®)´Â À§ÀÇ °ª(rect)À¸·Î ¡¸Blt¡¹µË´Ï´Ù.

    void flip(void)
    {
        //MainSurface->Flip(NULL, DDFLIP_WAIT);
        //À§´Â Ç® ½ºÅ©¸° ¸ðµå¿¡¼­¸¸ À¯È¿
        //À©µµ¿ì ¸ðµå¿¡¼­´Â blt¿¡ ÀÇÇÑ Àü¼Û ¹¦È­¸¦ ½Ç½ÃÇÑ´Ù
        MainSurface->Blt(&ScreenClientRect, BackSurface, NULL, DDBLTFAST_WAIT, NULL);
    }

    Çø³ ºÒ°¡´ÉÇÑ ¹é ¹öÆÛ·ÎºÎÅÍ ¡¸Blt¡¹¸¦ »ç¿ëÇϰí Àü¼ÛÇÕ´Ï´Ù.
    Àü¼ÛÇÒ °÷ÀÇ rect¿¡´Â ¹æ±Ý Àü À§¿¡¼­ ¼³¸íÇÑ RECT ±¸Á¶Ã¼¸¦ ÁöÁ¤ÇÕ´Ï´Ù.(Á¦1 ÆÄ¶ó¹ÌÅÍ)

    À¯Àú°¡ À©µµ¿ìÀÇ À§Ä¡¸¦ º¯°æÇÏ¸é ¹¦È­ÇÒ °÷ÀÇ ÁÂÇ¥µµ ¹Ù²ò´Ï´Ù

    ÇÁ¶óÀ̸Ӹ® ¼­ÆäÀ̽ºÀÇ Å¬¸³

    ½ºÅ©¸° Àüü°¡ ¡¸ÇÁ¶óÀ̸Ӹ® ¼­ÆäÀ̽º¡¹°¡ µÇ¹Ç·Î À©µµ¿ì ¸ðµåÀÇ DirectDraw´Â
    ÀÚ½ÅÀÇ Å¬¶óÀÌ¾ðÆ® ¿µ¿ª ¿Ü¿¡µµ ¹¦È­°¡ °¡´ÉÇÕ´Ï´Ù.

    (miss´Â È­¸é Àüü¸¦ ¹¦È­ ÇØ ¹ö·Á ´ë´ÜÇÑ ÀÏÀÌ µÇ¾ú½À´Ï´Ù. . .)

    À̰ÍÀ» ¸·±â À§ÇØ ¡¸À©µµ¿ì¿¡ Ŭ¸³¡¹ÀÌ ÇÊ¿äÇÕ´Ï´Ù.
    À̰ÍÀ» ÇÏÁö ¾ÊÀ¸¸é È­¸éÀÌ ÀÌ»óÇÏ°Ô µÇ¾î ¹ö¸°´Ù.

    dd->CreateClipper(0, &LpClip, NULL);

    if(LpClip->SetHWnd( 0, hwnd )!= DD_OK)
        return FALSE;

    if(MainSurface->SetClipper(LpClip) !=DD_OK)
        return FALSE//¼­ÆäÀ̽º¿¡ Ŭ¸³ ¼¼Æ®

    ¿©±â¼­ Ŭ¸®ÆÛ¸¦ ¼³Á¤ÇÏ´Â °ÍÀÌ ¡¸ÇÁ¶óÀ̸Ӹ®¼­ÆäÀ̽º¡¹¶ó°í ÇÏ´Â °Í¿¡ ÁÖÀÇÇϽʽÿÀ.
    ¹°·Ð, ¹é¼­ÆäÀ̽º¿¡µµ ÇÊ¿äÇϰÚÁö¸¸. . .

    À©µµ¿ì ¸ðµåÀÇ °æ¿ì, ÇÁ¶óÀ̸Ӹ® ¼­ÆäÀ̽ºÀÇ Å¬¸®ÇÎÀº ¹ÝµíÀÌ ÇÊ¿äÇÕ´Ï´Ù.

    ¹é ¹öÆÛÀÇ Å¬¸³
    ½ÇÁ¦·Î ¹¦È­¸¦ ½Ç½ÃÇÏ´Â ¹é ¹öÆÛ¿¡µµ Ŭ¸³À» SetÇÏÁö ¾ÊÀ¸¸é È­¸é³¡¿¡¼­ ij¸¯ÅͰ¡ »ç¶óÁö´Â Çö»óÀÌ µÇ¾î ¹ö¸³´Ï´Ù.
    ±×·¯³ª ÇÁ¶óÀ̸Ӹ® ¼­ÆäÀ̽º¿¡ SetÇÔÀ¸·Î¡¤¡¤¡¤

    if(LpClip->SetHWnd( 0, hwnd )!= DD_OK)                return FALSE;

    ÀÌ·¯ÇÑ Ã³¸®´Â ºÒ°¡´ÉÇÕ´Ï´Ù.
    ¡¸SetHWnd ¸Þ¼Òµå¡¹´Â ÁöÁ¤ÇÑ À©µµ¿ì Çڵ鿡 Ŭ¸³ ¿µ¿ªÀ» SetÇÔÀ¸·Î
    ¹é ¹öÆÛ´Â °ü°è°¡ ¾ø´Â ´Ü¼øÇÑ ¸Þ¸ð¸® ¿µ¿ª¿¡ Áö³ªÁö ¾Ê±â ¶§¹®ÀÔ´Ï´Ù.

    ¡¸GetHWnd ¸Þ¼Òµå¡¹·Î Ŭ¸³ ¿µ¿ªÀ» ¼¼Æ® Çϸé, À©µµ¿ìÀÇ »çÀÌÁî¿Í °°Àº Å©±âÀÇ
    Ŭ¸³ ¿µ¿ªÀÌ È­¸é ÁÂÇ¥¡¸0, 0¡¹·ÎºÎÅÍ SetµË´Ï´Ù.

    ÀÌ °æ¿ì, À©µµ¿ìÀÇ À§Ä¡¸¦ ¡¸0, 0¡¹·Î Çϸé Á¤»óÀûÀ¸·Î µ¿ÀÛÇϰí ÀÖ´Â °Íó·³ º¸ÀÔ´Ï´Ù¸¸
    À©µµ¿ì¸¦ ¿òÁ÷ÀÌ¸é ¾ÈµÇ°Ô µË´Ï´Ù.

    À̰ÍÀ» ÇØ°áÇÏ·Á¸é ¹é¼­ÆäÀ̽º¿¡ ¹¦È­ ÇÒ ¶§ ÀÚÀÛÀÇ Å¬¸³ 󸮸¦ ¸¸µé±î¡¤¡¤¡¤¡¤
    Àû´çÇÑ ¹æ¹ýÀ¸·Î.

    if(LpClip->SetHWnd( 0, hwnd )!= DD_OK)                return FALSE;

    ±×¸®°í Ŭ¸³À» ¼¼Æ® Çϸé À©µµ¿ì ÇÚµéÀÌ °¡¸®Å°´Â À©µµ¿ìÀÇ »çÀÌÁî°¡
    ½ºÅ©¸°ÀÇ ¡¸0, 0¡¹·ÎºÎÅÍ ¼¼Æ® µÇ±â ¶§¹®¿¡¡¤¡¤¡¤¡¤

    À©µµ¿ì ¸ðµå¿¡¼­´Â È­¸éÀÇ »çÀÌÁî¿Í °°Àº Å©±âÀÇ Å¬¸³ ¿µ¿ªÀ» ¼¼Æ® ÇÕ´Ï´Ù.

    typedef struct{
        RGNDATAHEADER rdh;
        RECT rect[256];
    }MYRGNDATA;
    MYRGNDATA rgn;

    rgn.rdh.dwSize             = sizeof(RGNDATAHEADER);
    rgn.rdh.iType                 = RDH_RECTANGLES;
    rgn.rdh.nCount             = 1;
    rgn.rdh.nRgnSize            = sizeof(RECT);
    rgn.rdh.rcBound.left        = 0;
    rgn.rdh.rcBound.top     = 0;
    rgn.rdh.rcBound.right     = GetSystemMetrics(SM_CXSCREEN);
    rgn.rdh.rcBound.bottom = GetSystemMetrics(SM_CYSCREEN);
    rgn.rect[0].left             = 0;
    rgn.rect[0].top             = 0;
    rgn.rect[0].right             = GetSystemMetrics(SM_CXSCREEN);
    rgn.rect[0].bottom         = GetSystemMetrics(SM_CYSCREEN);

    if(dd->CreateClipper(0, &LpClipBack, NULL) != DD_OK)
        return FALSE;

    LpClipBack->SetClipList((RGNDATA*) &rgn, 0);

    if(BackSurface->SetClipper(LpClipBack) !=DD_OK)
        return FALSE//¼­ÆäÀ̽º¿¡ Ŭ¸³ ¼¼Æ®

    À§´Â È­¸é Àüü¸¦ Ŭ¸³ ¿µ¿ª¿¡ ¼¼Æ® Çϴ ó¸®ÀÔ´Ï´Ù.
    ¼¼Æ® ÇÏ´Â ¿µ¿ªÀ» °Ý³³Çϴ ó¸®°¡ ´ëºÎºÐÀÔ´Ï´Ù.
    ¶Ç, ÀÌ Ã³¸®¸¦ ¶§¹®¿¡ ¶Ç ÇϳªÀÇ Å¬¸³ ¿ÀºêÁ§Æ®¸¦ ÇÊ¿ä·Î ÇÕ´Ï´Ù.
    ¡¸LpClipBack¡¹»õ·Î¿î Ŭ¸®ÆÛ ¿ÀºêÁ§Æ® Æ÷ÀÎÅ͸¦ Á¤ÀÇÇÕ´Ï´Ù.

    ¡¸SetClipList ¸Þ¼Òµå¡¹´Â MYRGNDATA ±¸Á¶Ã¼¿¡ °Ç³×ÁÖ°í ÀÖ´Â °ªÀ» Ŭ¸®ÆÛ ¿ÀºêÁ§Æ®
    ¿¡ SetÇÕ´Ï´Ù.

    ÀÌ ÈÄ, ¡¸SetClipper¡¹¸¦ ÇÏ¸é ¼³Á¤ÀÌ µË´Ï´Ù.

    /////////////////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////////

    À©µµ¿ì¡¤Ç® ½ºÅ©¸° ¾ç¸ðµå ´ëÀÀ

    ½ÃÆÇµÇ°í ÀÖ´Â WINDOWS °ÔÀÓÀº Ç® ½ºÅ©¸°, À©µµ¿ì ¸ðµåÀÇ ¾çÂÊ ¸ðµÎ¸¦
    ´ëÀÀÇϰí ÀÖ´Â °ÔÀÓÀÌ ¸¹½À´Ï´Ù.

    À̹øÀº ÇÁ·Î±×·¥À» ¾ç ´ëÀÀÀ¸·Î ¼³Á¤ÇØ º¾´Ï´Ù.

    ¾ç´ëÀÀÀÇ ÇÁ·Î±×·¥Àº À¯ÀúÀÇ ¸ðµå º¯È¯À» Ç×»ó °Ë»öÇØ ¸ðµåº¯È¯ÀÌ ¹ß»ýÇϸé
    À©µµ¿ì Ŭ·¡½º¸¦ ÀçÁ¤ÀÇÇØ¼­ ¹¦È­(Çø³)¸¦ º¯°æÇÕ´Ï´Ù.

    ¿£ÅÍ۸¦ ´©¸£¸é ½ºÅ©¸° ¸ðµå°¡ º¯°æµË´Ï´Ù.

    ¹¦È­ °èÅëÀ» º¯°æÇÑ´Ù

    óÀ½ÀÇ º¯°æÇÒ °÷Àº¡¸Çø³¡¹¡¤¡¤¡¤¡¤¹¦È­ ó¸®ÀÇ ºÎºÐÀÔ´Ï´Ù.
    Ç® ½ºÅ©¸° ¸ðµå¿¡¼­´Â ¡¸Çø³¡¹Àº °¡´ÉÇÏÁö¸¸¡¤¡¤¡¤¡¤À©µµ¿ì ¸ðµå¿¡¼­´Â
    ¡¸Çø³¡¹À» ÇÒ ¼ö°¡ ¾ø½À´Ï´Ù.
    ¶§¹®¿¡ À©µµ¿ì ¸ðµåÀÏ ¶§, Ç® ½ºÅ©¸° ¸ðµåÀÏ ¶§·Î.
    µð½ºÇ÷¹ÀÌ¿¡ ¹¦È­¸¦ ¹Ý¿µÇϰí ÀÖ´ø 󸮸¦ ³ª´²¾ß ÇÕ´Ï´Ù.

    MainSurface->Flip(NULL, DDFLIP_WAIT);
    //Çø³Àº Ç® ½ºÅ©¸° ¸ðµåÀÏ ¶§ ¹Û¿¡ ½ÇÇàÇÒ ¼ö ¾ø´Ù
    MainSurface->Blt(NULL, BackSurface, NULL, DDBLTFAST_WAIT, NULL);
    //À©µµ¿ì ¸ðµå¿¡¼­´Â blt¿¡ ÀÇÇÑ Àü¼Û ¹¦È­¸¦ ÇÑ´Ù

    ¹¦È­¿¡´Â ¸ðµå¿¡ ÀÇÇØ À§ÀÇ 2°¡Áö ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù.
    À§ÀÇ ¹æ¹ýÀ» ÇöÀçÀÇ ¸ðµå¿¡ ÀÇÇØ ºÐ±â ÇÏ·Á¸é ÇöÀçÀÇ ÇùÁ¶ ·¹º§À» Á¶»çÇÏ´Â °ÍÀ¸·Î °¡´ÉÇÕ´Ï´Ù.

    if(dd->SetCooperativeLevel(hwnd, ncoop)!=DD_OK)
        return FALSE;         //ÇùÁ¶

    À§°¡ ÇùÁ¶·¹º§À» SetÇϰí ÀÖ´Â ºÎºÐÀÔ´Ï´Ù.
    Á¦2 ÆÄ¶ó¹ÌÅÍ´Â ÇùÁ¶ Ç÷¡±×¸¦ °Ç³×ÁÝ´Ï´Ù.

    ÀÌ ºÎºÐÀ» º¯¼ö·Î ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.
    (¸ðµå¸¦ º¯È¯ÇÒ ¶§´Â ÀÌ º¯¼ö¸¦ ¹Ù²Ù¾î ÇùÁ¶ ·¹º§À» ¼³Á¤À» ´Ù½Ã Çϱâ À§Çؼ­ »ç¿ëÇÑ´Ù)

    DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN

    À§ÀÇ ÄÚµå´Â Ç® ½ºÅ©¸°ÀÇ Ç÷¡±×ÀÔ´Ï´Ù.
    ƯÈ÷ °­Á¶ ¹®ÀÚÀÇ ¡¸DDSCL_FULLSCREEN¡¹Àº ¹Ýµå½Ã Ç® ½ºÅ©¸° ¸ðµåÀÏ ¶§ ÇÊ¿äÇÏ°Ô µË´Ï´Ù.

    ¡¤¡¤¡¤¡¤·Î ¡¸ncoop º¯¼ö(WORDÇü)¡¹°¡ ¡¸DDSCL_FULLSCREEN¡¹À϶§
    Ç® ½ºÅ©¸° ¸ðµå¶ó´Â °ÍÀ» ¾Ë¼ö ÀÖ½À´Ï´Ù.
    ¡¸ncoop º¯¼ö¡¹¿¡ ¡¸DDSCL_FULLSCREEN¡¹°¡ ¾øÀ» ¶§´Â À©µµ¿ì ¸ðµå°¡ µË´Ï´Ù.

    if(ncoop&DDSCL_FULLSCREEN)
    {
        if( MainSurface->Flip(NULL, DDFLIP_WAIT) != DD_OK)
        return FALSE;
    }
    else
    {
        if( MainSurface->Blt(&rect, BackSurface, NULL, DDBLT_WAIT, NULL) != DD_OK)
            return FALSE;
    }

    ¹¦È­ 󸮴 À§Ã³·³ µË´Ï´Ù.

    ¡¸ncoop º¯¼ö¡¹¸¦ ¡¸DDSCL_FULLSCREEN Ç÷¡±×¡¹¿Í¡¸AND ó¸®(&¿¬»êÀÚ)¡¹ÇÏ´Â °ÍÀ¸·Î
    ¡¸ncoop º¯¼ö¡¹¾È¿¡ ¡¸DDSCL_FULLSCREEN Ç÷¡±×¡¹°¡ Æ÷ÇԵǴÂÁö¸¦ üũÇÕ´Ï´Ù.

    Æ÷ÇԵǴ °æ¿ì´Â ÇöÀçÀÇ ¸ðµå°¡ ¡¸Ç® ½ºÅ©¸° ¸ðµå¡¹°¡ µÇ¹Ç·Î
    ¡¸Flip ¸Þ¼Òµå¡¹¿¡ ÀÇÇÑ ¹¦È­¸¦ ÇÕ´Ï´Ù.

    ¼­ÆäÀ̽º ÆÄ±«¿¡ ´ëÇØ

    Ç® ½ºÅ©¸° ¸ðµå¿¡¼­ À©µµ¿ì ¸ðµå·Î º¯°æÇÒ ¶§, ¸Þ¸ð¸®»ó¿¡ ÀÖ´Â ¼­ÆäÀ̽º´Â ¸ðµÎ
    »èÁ¦µË´Ï´Ù.(¹Ý´ëÀÇ °æ¿ìµµ °°´Ù)

    Ç® ½ºÅ©¸°Àº ºñµð¿À ¸Þ¸ð¸®¸¦ µ¶Á¡Çϰí ÀÖ´Â ¸ðµåÁö¸¸, À©µµ¿ì ¸ðµå´Â ¸ðµç ¾îÇø®ÄÉÀ̼ÇÀÌ ºñµð¿À¸Þ¸ð¸®¸¦ °øÀ¯Çϰí ÀÖ½À´Ï´Ù.

    Ç® ½ºÅ©¸°À¸·ÎºÎÅÍ À©µµ¿ì ¸ðµå·Î º¯°æÇÒ ¶§, Ç® ½ºÅ©¸° ¸ðµå°¡
    »ç¿ëÇϰí ÀÖ´ø ºñµð¿À¸Þ¸ð¸®¸¦ ½Ã½ºÅÛ º¹±Í¸¦ À§ÇØ ÇØ¹æÇØ¾ß ÇÏ´Â °ÍÀÔ´Ï´Ù.

    ¼­ÆäÀ̽º°¡ ÆÄ±«µÇ´Â(³»¿ëÀÌ ¼Ò½ÇµÈ´Ù) °ÍÀ¸·Î È­¸é ¸ðµå º¯°æ ÈÄ ¼­ÆäÀ̽º¸¦
    ´Ù½Ã »ý¼ºÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.

    °³³ä)
    ÇÎÅ©»öÀÇ Å©±âÀÇ ¸Þ¸ð¸® °ø°£ÀÌ ÇÊ¿äÇÏ°Ô µË´Ï´Ù.(Àå¼Ò´Â ºÒ¸í)
    ºí·çÀÇ À̹ÌÁö¸¦ °Ý³³Çϰí ÀÖ´ø °ø°£Àº ¹æÇذ¡ µÇ¹Ç·Î ÇØ¹æÇÕ´Ï´Ù.

    ¼­ÆäÀ̽º º¹±Í
    ¼­ÆäÀ̽ºÀÇ ³»¿ë¡¤¡¤¡¤À̹ÌÁö´Â ÆÄ±«µÇÁö¸¸, ¼­ÆäÀ̽ºÀÇ ÀÎÅÍÆäÀ̽º´Â ¾ÆÁ÷ Á¸ÀçÇϰí ÀÖ½À´Ï´Ù.
    È­¸é ¸ðµåÀÇ º¯È¯ÀÌ Á¾·áµÇ¾î ¾îÇø®ÄÉÀ̼ÇÀÇ Ã³¸®°¡ °³½ÃµÇ¸é ¼­ÆäÀ̽º ¸Þ¼Òµå ¡¸Restore¡¹¸¦ »ç¿ëÇÔÀ¸·Î ¾ø¾îÁø ¼­ÆäÀ̽º ¿µ¿ªÀ» ´Ù½Ã È®º¸ÇØ ÁÝ´Ï´Ù.
    ±×·¯³ª ¸Þ¸ð¸® ¿µ¿ªÀ» È®º¸ÇØ ÁÙ »ÓÀ̹ǷΠ¿µ¿ª¿¡ ´Ù½Ã ¹¦È­ 󸮸¦ ½Ç½ÃÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.
    ¡¸Restore ¸Þ¼Òµå¡¹´Â »ý¼ºÇÑ ¸ðµç ¼­ÆäÀ̽º¿¡¼­ »ç¿ëÇØ¾ß ÇÕ´Ï´Ù.

    ¼­ÆäÀ̽º·Î½ºÆ®ÀÇ °ËÃâ
    ¼­ÆäÀ̽º ÆÄ±«´Â ½ºÅ©¸° ¸ðµå¸¦ º¯°æÇßÀ» ¶§¿¡µµ ¹ß»ýÇÏÁö¸¸ ´Ù¸¥ ¿øÀο¡¼­µµ ¹ß»ýÇÕ´Ï´Ù.
    ¡¸Blt ¸Þ¼Òµå¡¹¸¦ »ç¿ëÇßÀ» ¶§ ¡¸Blt ¸Þ¼Òµå¡¹°¡ ¸®ÅÏ °ªÀ¸·Î ÇØ¼­ ¡¸DDERR_SURFACELOST¡¹¸¦ µ¹·ÁÁÖ¾úÀ» ¶§, ¼­ÆäÀ̽º°¡ ÆÄ±«µÈ °ÍÀ» ÀǹÌÇÕ´Ï´Ù.
    (ÇïÇÁ ÂüÁ¶)

    ¡¸DDERR_SURFACELOST¡¹°¡ ¸®ÅÏ µÆ´Ù¡¤¡¤¡¤¡¤¡¤Áï, µð½ºÇ÷¹ÀÌ ¸ðµå°¡ º¯°æµÇ¾ú´ÂÁö
    ÇϵîÀÇ ÀÌÀ¯·Î ¼­ÆäÀ̽º°¡ ÆÄ±«(·Î½ºÆ®)µÈ °ÍÀÌ µË´Ï´Ù.

    À̰ÍÀ¸·Î ¼­ÆäÀ̽ºÀÇ ÆÄ±«¸¦ °ËÃâÇÒ ¼ö ÀÖ¾úÀ¸¹Ç·Î ³ª¸ÓÁö´Â ´Ù¸¥ ¶§ÀÇ Ã³¸®(Restore ó¸®)¸¦ ½ÇÇà½Ã۸é OK¡¤¡¤¡¤¡¤ÀÏ °ÍÀÔ´Ï´Ù.

    ¼Ò½ºÄÚµå ÇØ¼³
    ¿ì¼± Ç® ½ºÅ©¸° ¸ðµå¿Í À©µµ¿ì ¸ðµåÀÇ ¾çÂÊ ¸ðµÎ¸¦ °¡´ÉÇÏ°Ô Çϱâ À§Çؼ­ ÇöÀç ¾î´À ¸ðµåÀÎÁö¸¦ ¾Ë¾Æ µÑ Çʿ䰡 ÀÖ½À´Ï´Ù.

    ncoop=DDSCL_NORMAL;

    ¡¸ncoop º¯¼ö¡¹´Â µð½ºÇ÷¹ÀÌÀÇ ÇùÁ¶¸¦ ½Ç½ÃÇÏ´Â Ç÷¡±×ÀÔ´Ï´Ù.
    ÀÌ º¯¼ö¿¡´Â ¸ðµåÀÇ Ç÷¡±×°¡ µé¾î°©´Ï´Ù.Ãʱ⠰ªÀ» ¡¸DDSCL_NORMAL¡¹·Î ÇϹǷÎ
    óÀ½ÀÇ ±âµ¿Àº ¡¸À©µµ¿ì ¸ðµå¡¹°¡ µË´Ï´Ù.
    ¼Ò½ºÄڵ忡¼­´Â ¡¸¿£ÅÍŰ¡¹°¡ ´­·ÈÀ» ¶§¿¡ ½ºÅ©¸° ¸ðµå¸¦ º¯°æÇϹǷÎ. . .
    ÇöÀç À©µµ¿ì ¸ðµåÀÏ ¶§´Â ¡¸ncoop º¯¼ö¡¹¿¡ ¡¸DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN¡¹¸¦ °Ç³×ÁÖ¸é Ç® ½ºÅ©¸°ÀÌ µË´Ï´Ù.
    µ¡ºÙ¿©¼­ ¿£ÅÍ۸ÞÅ©·Î´Â ¡¸VK_RETURN¡¹ÀÔ´Ï´Ù

    void changescreen(void);
    À§ÀÇ ÇÔ¼ö´Â, ¿£ÅÍ۰¡ ´­·ÈÀ» ¶§¿¡ 󸮵Ǵ ÇÔ¼öÀÔ´Ï´Ù.
    ó¸®ÀÇ ³»¿ëÀº¡¤¡¤¡¤¡¤
    ÇöÀçÀÇ ¸ðµå¸¦ Á¶»çÇØ¼­ Ç÷¡±×¸¦ °íÃÄ ¾´´Ù.
    À©µµ¿ì Ŭ·¡½º¸¦ °»½Å.
    ÇùÁ¶¸¦ ÀçÂ÷ ½Ç½ÃÇÑ´Ù.

    BOOL changescreen(void)
    {

        if(nccop&DDSCL_FULLSCREEN){                //ÇöÀç Ç® ½ºÅ©¸°
            if(DD_OK!=dd->RestoreDisplayMode())
                return FALSE;    //ÇØ»óµµ¸¦ ¹ÙÅÁÀ¸·Î µÇµ¹¸°´Ù

            nccop = DDSCL_NORMAL;
            //Ç÷¡±×¸¦ À©µµ¿ì ¸ðµå·Î ÇÑ´Ù
        }
        else{        //ÇöÀç À©µµ¿ì ¸ðµå
            ncoop = DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN;
        }

        return TRUE;
    }

    À§´Â Ç÷¡±× º¯È¯ ó¸®ÀÔ´Ï´Ù.
    ¡¸ncoop º¯¼ö¡¹ÀÇ ³»¿ëÀ» ¡¸&(ºñÆ®¸¶´ÙÀÇ AND)¡¹·Î ÇöÀçÀÇ ¸ðµå¸¦ Á¶»çÇÕ´Ï´Ù.

    ÇöÀç, Ç® ½ºÅ©¸° ¸ðµåÀ϶§¡¤¡¤¡¤¡¤¡¤¡¸ncoop º¯¼ö¡¹¿¡ ¡¸DDSCL_NORMAL¡¹
    À» ³Ö½À´Ï´Ù.(À©µµ¿ì ¸ðµå¸¦ ³ªÅ¸³»´Â Ç÷¡±×)

    ±× Àü¿¡ µð½ºÇ÷¹ÀÌÀÇ ÇØ»óµµ¸¦ ¹ÙÅÁÀ¸·Î µÇµ¹¸³´Ï´Ù.
    ¾Æ¸¶ 640¡¿480À̶ó°í ÇÏ´Â »çÀÌÁîÀÇ ÇØ»óµµ°¡ µÇ¾î ÀÖÀ» °ÍÀ̹ǷÎ.
    º¯°æÀüÀÇ ÇØ»óµµ·Î ´Ù½Ã µ¹·Á ÁÝ´Ï´Ù.

    À̰ÍÀº ¡¸RestoreDisplayMode ¸Þ¼Òµå¡¹·Î °¡´ÉÇÕ´Ï´Ù.(ÆÄ¶ó¹ÌÅÍ ¾øÀ½)

    ±×·±µ¥¡¤¡¤¡¤¡¤À̰ÍÀ¸·Î ¿øÇÏ´Â ¸ðµå¿¡ Ç÷¡±×¸¦ º¯°æÇÒ ¼ö ÀÖ¾úÁö¸¸.
    ÀÌ´ë·Î´Â ¹®Á¦°¡ ÀÖ½À´Ï´Ù.
    À©µµ¿ì Ŭ·¡½º¸¦ ÀçÁ¤ÀÇÇØ À©µµ¿ìÀÇ Çü»óÀ» º¯°æÇÏÁö ¾ÊÀ¸¸é
    À©µµ¿ì·ÎºÎÅÍ Ç® ½ºÅ©¸°¿¡ º¯°æÇßÀ» °æ¿ì¿¡ Å׵θ®³ª ¸Þ´º°¡ ³²´Â Àϵµ »ý°¢ÇÒ ¼ö ÀÖ½À´Ï´Ù.
    ¹Ý´ë·Î Ç® ½ºÅ©¸°ÀÇ À©µµ¿ìÀÇ °æ¿ì´Â ¸Þ´º³ª Å׵θ®°¡ Ç¥½ÃµÇÁö ¾Ê´Â °ÍÀÌ µÇ¾î ¹ö¸³´Ï´Ù.

    BOOL changescreen(void)
    {
        if(ncoop&DDSCL_FULLSCREEN){
            //ÇöÀç Ç® ½ºÅ©¸°-À©µµ¿ì¿¡

            if(DD_OK!=dd->RestoreDisplayMode())
                //ÇØ»óµµ¸¦ ¹ÙÅÁÀ¸·Î µÇµ¹¸°´Ù
                return FALSE;

            ncoop = DDSCL_NORMAL;
            //Ç÷¡±×¸¦ À©µµ¿ì ¸ðµå·Î ÇÑ´Ù
        }
        else{                     //ÇöÀç À©µµ¿ì ¸ðµå-Ç® ½ºÅ©¸°¿¡
            ncoop = DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN;
        }

        //À©µµ¿ì Ŭ·¡½º¸¦ °»½Å

        if(ncoop&DDSCL_EXCLUSIVE)
            if(!SetWindowLong(hwnd, GWL_STYLE, WS_POPUP))
                //Ç® ½ºÅ©¸°¿¡ ÀÖ´ø À©µµ¿ì·Î ÇÑ´Ù
                return FALSE;
            if(dd->SetCooperativeLevel(hwnd, ncoop)!=DD_OK)
                return FALSE; //ÇùÁ¶

            if(ncoop&DDSCL_EXCLUSIVE){
                //µð½ºÇ÷¹ÀÌ ¸ðµåÀÇ º¯°æ
                // . . . À̰ÍÀº Ç® ½ºÅ©¸°À¸·Î ÇÒ ¶§¸¸
                if(dd->SetDisplayMode(640,480,16)!=DD_OK)
                    return FALSE;
            }
            else{
                if(!SetWindowLong(hwnd, GWL_STYLE,
                    //À©µµ¿ì ¸ðµå¿¡ ÀÖ´ø À©µµ¿ì¿¡ ÀçÁ¤ÀÇÇÑ´Ù
                    WS_POPUP | WS_CAPTION |
                    WS_SYSMENU | WS_BORDER|
                    WS_MINIMIZEBOX | WS_VISIBLE))
                    return FALSE;

                RECT rect={0,0,640,480};

                AdjustWindowRect(&rect, GetWindowStyle(hwnd),
                GetMenu(hwnd)!=NULL);

                //À©µµ¿ì¸¦ ¹¦È­ ÇÏ´Â À§Ä¡¸¦ rect ±¸Á¶Ã¼¿¡ ³Ö½À´Ï´Ù.
                //¡é£ºÀ©µµ¿ì Ç¥½Ã ÁÂÇ¥¸¦
                //        Set(ÆÄ¶ó¹ÌÅÍ´Â ÇïÇÁ ÂüÁ¶ (WindowsX.h))

                SetWindowPos(hwnd, NULL, 0, 0,
                            (rect.right - rect.left),
                            (rect.bottom - rect.top),
                            SWP_NOMOVE|
                            SWP_NOZORDER|
                            SWP_NOACTIVATE);

                SetWindowPos(hwnd, HWND_NOTOPMOST, 0,0,0,0,
                SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE);

            }

        //À§¿¡¼­ ½ºÅ©¸° ¸ðµå´Â º¯°æµÇ¾ú´Ù. ±×·¯³ª ¼­ÆäÀ̽º´Â ¾ø¾îÁ³´Ù.
        return TRUE;
    }

    À©µµ¿ì Ŭ·¡½ºÀÇ ÀçÁ¤ÀÇ´Â ¡¸SetWindowLong ÇÔ¼ö¡¹·Î °¡´ÉÇÕ´Ï´Ù.
    ÁÖ·Î À©µµ¿ì Ŭ·¡½º Á¤ÀÇ¿¡ ¡¸ Á¦4 ÆÄ¶ó¹ÌÅÍ¡¹¡¤¡¤¡¤À©µµ¿ìÀÇ ¸ð½ÀÀ» º¯°æÇÕ´Ï´Ù.

    (Ç÷¡±×¿¡ ´ëÇØ¼­´Â ÇïÇÁ ÂüÁ¶)

    Ç® ½ºÅ©¸°¿¡¼­ À©µµ¿ì·Î

    ÀÌ ¶§, ÇØ»óµµ¸¦ ¿ø·¡´ë·Î µÇµ¹¸° °Í ¸¸À¸·Î´Â ¾îÇø®ÄÉÀ̼ÇÀÇ À©µµ¿ì ÆøÀº ¿ø·¡´ë·Î
    µ¹¾Æ¿ÀÁö ¾Ê½À´Ï´Ù.
    ¿ø·¡ÀÇ ÇØ»óµµ¡¤¡¤¡¤¡¤ÇÏÁö¸¸ È­¸é¿¡´Â ÇϳªÀÇ À©µµ¿ì·Î¼­ Ç¥½ÃµË´Ï´Ù.

    °Å±â¼­ À©µµ¿ì ¸ðµå·Î ÀüȯÇÒ ¶§´Â ±× »çÀÌÁî.À§Ä¡µµ ¼³Á¤ÇØ ÁÖÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù
    ±×°ÍÀÌ »ý¼ºµÇ´Â °ÍÀº ¡¸SetWindowPos ÇÔ¼ö¡¹ÀÔ´Ï´Ù.

    À§ÀÇ °æ¿ìÀ϶§ µð½ºÇ÷¹ÀÌ ¸ðµå´Â ±³Ã¼µÇÁö¸¸ ¼­ÆäÀ̽ºÀÇ ³»¿ëÀº ÆÄ±«µÇ°í
    ¡¸Blt ¸Þ¼Òµå¡¹´Â ¡¸DDERR_SURFACELOST¡¹ÀÇ ¹Ýȯ ¹¦È­°¡ ¹Ý¿µµÇÁö ¾Ê°Ô µË´Ï´Ù.

    ¿©±â¼­ ¼­ÆäÀ̽ºÀÇ º¹¿øÀÌ ÇÊ¿äÇÏ°Ô µÇ´Â °ÍÀÔ´Ï´Ù.
    ¡¸Restore ¸Þ¼Òµå¡¹¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀÌ ÀÖÀ¸¸é(À§¿¡¼­µµ ´Ù·ç¾úÀ¸³ª)


    ¼­ÆäÀ̽º ·Î½ºÆ®°¡ ¹ß»ýÇßÀ» ¶§´Â ¼­ÆäÀ̽º¸¦ ¿ÏÀüÇÏ°Ô ÆÄ±âÇØ ´Ù½Ã »õ·Ó°Ô ¸¸µç´Ù.

    ¼­ÆäÀ̽º ·Î½ºÆ®°¡ ¹ß»ýÇßÀ» ¶§´Â ¡¸initsurface ÇÔ¼ö¡¹¸¦ È£ÃâÇÕ´Ï´Ù(°­¿ä´Â ¾Æ´Ô).
    ÀÌ ÇÔ¼ö´Â »õ·Ó°Ô ¼­ÆäÀ̽º¸¦ »ý¼ºÇÏ´Â ÇÔ¼ö·Î ÁغñµÇ¾î ÀÖ½À´Ï´Ù.


    ±×¸®°í, ±× ¼±µÎ¿¡¡¤¡¤¡¤¡¤

    if(MainSurface){
        //ÇÁ¶óÀ̸Ӹ® ¼­ÆäÀ̽º°¡ »ý¼ºµÇ¾î ÀÖ´Ù¸é ÇØ¹æ
        MainSurface->Release();
        MainSurface=NULL;
    }

    if(mapsurface){
        // ÇÁ¶óÀ̸Ӹ® ¼­ÆäÀ̽º°¡ »ý¼ºµÇ¾î ÀÖ´Ù¸é ÇØ¹æ
        mapsurface->Release();
        mapsurface=NULL;
    }

    if(sprite){     ÇÁ¶óÀ̸Ӹ® ¼­ÆäÀ̽º°¡ »ý¼ºµÇ¾î ÀÖ´Ù¸é ÇØ¹æ
        sprite->Release();
        sprite=NULL;
    }

    ¸¦ Ãß°¡ÇÕ´Ï´Ù.
    º¸¸é ¾Ë ¼ö ÀÖµíÀÌ ¼­ÆäÀ̽º°¡ Á¸ÀçÇÏ¸é ÆÄ±âÇÕ´Ï´Ù.
    ¾îÇø®ÄÉÀ̼ÇÀ» ±âµ¿ÇØ 1ȸ°¿¡ ÀÌ Ã³¸®´Â ½ÇÇàµÇÁö ¾Ê½À´Ï´Ù.(´ç¿¬ ¼­ÆäÀ̽º´Â ¾øÀ¸´Ï±î)

    ±×·¯³ª ¼­ÆäÀ̽º·Î½ºÆ®°¡ ¹ß»ýÇØ ÀÌ ÇÔ¼ö¸¦ ºÎ¸£¸é
    ÇöÁ¸ ÇÏ´Â ¼­ÆäÀ̽º¸¦ ¿ÏÀü ÆÄ±âÇØ ´Ù½Ã »õ·Ó°Ô ¸¸µé¾î ÁÝ´Ï´Ù.

    ½ºÅ©¸° ¸ðµå¿¡ ÀÇÇØ ¼­ÆäÀ̽ºÀÇ ¼Ó¼ºÀÌ ¹Ù²î¹Ç·Î ±× 󸮵µ Ãß°¡Çϰí ÀÖ´Ù.
    ÇÁ·Î±×·¥ÀÌ Ä¿Á® °¡¹Ç·Î À§ÀÇ ÇØ¹æ 󸮴 ÇÔ¼öÈ­ ÇÏ´Â °ÍÀÌ ÁÁÀ»Áöµµ ¸ð¸¥´Ù

    ±×¸®°í, ÇÔ¼öÀÇ ¸¶Áö¸·¿¡¡¤¡¤¡¤¡¤

    if(!(sprite=loadbmp("mychr.bmp")))
        return FALSE;
    if(!(mapsurface=loadbmp("map.bmp")))//¸Ê Ç¥¸é »ý¼º
        return FALSE;

    ¸¦ Ãß°¡ÇÏ´Â °ÍÀ¸·Î ¼­ÆäÀ̽º¸¦ ¿ÏÀüÇÏ°Ô ¿ø·¡´ë·Î µÇµ¹¸± ¼ö°¡ ÀÖ½À´Ï´Ù.
    (µ¡ºÙ¿©¼­ À§ÀÇ Ã³¸®´Â Áö±Ý±îÁö¡¡¡¸CreateDraw ÇÔ¼ö·Î È£ÃâÇß¾ú½À´Ï´Ù¸¸ ºÎÀûÀýÇÑ °÷ÀÌ µÇ¹Ç·Î Àå¼Ò º¯°æ)

    ¼­ÆäÀ̽ºÀÇ ÆÄ¶ó¹ÌÅÍ
    ¼­ÆäÀ̽ºµµ Ç® ½ºÅ©¸°¡¤À©µµ¿ì¿¡¼­´Â ±× ¼ºÁúÀÌ ´Þ¶ó Áý´Ï´Ù.

    Ç® ½ºÅ©¸°ÀÏ ¶§´Â ¡¸attach °¡´É¡¹À¸·Î ¡¸Çø³ °¡´É¡¹
    À©µµ¿ì ¸ðµåÀÏ ¶§´Â ¡¸attach ºÒ°¡¡¹,¡¸Çø³ ºÒ°¡¡¹ÀÔ´Ï´Ù.

    ¶§¹®¿¡ ¡¸initsurface ÇÔ¼ö¡¹µµ º¯°æÇÏ°í ½ÍÀº ¸ðµåÀÇ Ç÷¡±×¿¡ ÀÇÇØ
    »ý¼º ¶Ç´Â Áö¿ì´Â ±â´ÉÀ» ¼­ÆäÀ̽ºÀÇ ÆÄ¶ó¹ÌÅ͸¦ ³ª´©Áö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù.

    À©µµ¿ì ¸ðµå·Î ÇÏ°í ½ÍÀ¸¸é¡¤¡¤¡¤¡¤¡¤
    ¡¸attach °¡´É¡¹ ¡¸¹é ¹öÆÛ ÀÖÀ½¡¹ ¡¸Çø³ °¡´É¡¹ÀÇ ¼­ÆäÀ̽º¸¦
    ¸¸µé¾î¾ß ÇÕ´Ï´Ù.

    Áö±Ý±îÁöÀÇ ¡¸initsurface ÇÔ¼ö¡¹´Â ¾î´À ÂÊÀÎÁö ´Ù¸¥ ÇÑÂÊÀÇ ¼­ÆäÀ̽º »ý¼º¸¸ÀÇ Ã³¸®¿´½À´Ï´Ù.

    //////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////

    À©µµ¿ì ¸ðµåÀÇ ¹¦È­

    Áö±Ý±îÁöÀÇ À©µµ¿ì ¸ðµåÀÇ »ùÇÃÀº È­¸éÀÌ ÀǵµÇÏÁö ¾Ê´Â ÇüÅ·ΠȮ´ëµÇ°í ÀÖÁö ¾Ê¾Ò½À´Ï±î?

    ±×°ÍÀº ¡¸flip ÇÔ¼ö¡¹¿¡ ¹®Á¦°¡ Àֱ⠶§¹®ÀÔ´Ï´Ù.

    void flip(void)
    {
        if(ncoop&DDSCL_FULLSCREEN){
            MainSurface->Flip(NULL, DDFLIP_WAIT);
        }
        else{
            MainSurface->Blt(NULL, BackSurface, NULL,
            DDBLTFAST_WAIT, NULL);
        }
    }

    ÀÌ ºÎºÐÀÌ Çø³(¹¦È­ÀÇ È­¸é ¹Ý¿µ) ó¸®ÀÔ´Ï´Ù.
    Ç® ½ºÅ©¸° ¸ðµåÀÇ °æ¿ì´Â ÁÂÇ¥°¡ º¯ÇÔ¾ø±â ¶§¹®¿¡ ¹®Á¦ ¾ø½À´Ï´Ù.
    À©µµ¿ì ¸ðµåÀÇ °æ¿ì´Â ¹¦È­ÇÒ °÷ÀÇ ÁÂÇ¥´Â ¡¸È­¸é ÁÂÇ¥¡¹¡¤¡¤¡¤¡¤
    Áï µð½ºÇ÷¹ÀÌ ´ÜÀ§ÀÇ ÁÂÇ¥ °ªÀ¸·Î ¹¦È­ÇÒ °÷À» °Ç³×ÁÖÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù.

    MainSurface->Blt(NULL, BackSurface, NULL, DDBLTFAST_WAIT, NULL);

    À§´Â À©µµ¿ì ¸ðµåÀÏ ¶§ÀÇ Çø³ ó¸®ÀÔ´Ï´Ù.

    Á¦1 ÆÄ¶ó¹ÌÅÍ´Â Àü¼ÛÇÒ °÷ÀÇ ³×¸ð¸¦ ³ªÅ¸³»´Â °ªÀÔ´Ï´Ù. °Å±â¸¦ Áö±Ý±îÁö´Â NULL·Î Çß¾ú½À´Ï´Ù.
    À̰ÍÀº È­¸é Àüü¿¡ ¹¦È­Ç϶ó´Â Àǹ̰¡ µË´Ï´Ù.

    ´ëºÎºÐÀÇ »ç¶÷Àº µð½ºÇ÷¹ÀÌÀÇ ÇØ»óµµ¸¦ ¡¸640¡¿480¡¹º¸´Ù ³ô°Ô ¼³Á¤Çϰí ÀÖÀ» °ÍÀ̹ǷÎ
    Ŭ¶óÀÌ¾ðÆ® ¿µ¿ª¿¡´Â È®´ëµÈ À̹ÌÁö°¡ Ç¥½ÃµÇ°í ÀÖÀ» °ÍÀÔ´Ï´Ù.

    (±×·¡ÇÈ Ä«µå¿¡ µû¶ó¼­´Â Èñ¹ÌÇØÁöµçÁö¡¤¡¤¡¤¡¤)

    È®´ëÇÏÁö ¾Ê°í Á¦´ë·Î µÈ »çÀÌÁî·Î ¹¦È­ ÇÏ·Á¸é, ¡¸Àü¼ÛÇÒ °÷¡¹À» °ªÀ» ¿Ã¹Ù¸£°Ô ¾òÀ» Çʿ䰡 ÀÖ½À´Ï´Ù.

    À©µµ¿ì´Â À¯ÀúÀÇ ¼Õ¿¡ ÀÇÇØ Ç×»ó À̵¿ÀÌ °¡´ÉÇØ¼­ À̵¿ÀÌ ¹ß»ýµÇ¸é
    ¡¸Àü¼ÛÇÒ °÷ÀÇ °ª¡¹¸¦ º¯°æÇϵµ·Ï ÇÁ·Î±×·¡¹Ö ÇÏÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù.

    À©µµ¿ì°¡ ÀÛµ¿µÇ¸é¡¤¡¤¡¤¡¤¡¤

    ¡¸WM_MOVE¡¹¸Þ¼¼Áö°¡ ¹ß»ýµË´Ï´Ù.
    ÀÌ ¸Þ¼¼Áö¸¦ ÃëµæÇØ Àü¼ÛÇÒ °÷ÀÇ °ªÀ» º¯°æÇϴ ó¸®¸¦ Ãß°¡ÇսôÙ.

    ¸Þ¼¼Áö ó¸®
    LRESULT WINAPI WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch(message){
        case WM_KEYDOWN:
            switch(wParam)
            {
            case VK_ESCAPE:
                releaseobject();
                PostMessage(hwnd, WM_CLOSE, 0,0);
                break;
            case VK_RETURN:
                //½ºÅ©¸° ¸ðµå º¯°æ
                changescreen();
                break;
            }
            break;
        case WM_MOVE:
            GetClientRect();
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:

        return DefWindowProc(hwnd, message, wParam, lParam);
        }

        return 0;
    }

    À§¿Í °°ÀÌ ¡¸WM£ßMOVE ¸Þ¼¼Áö¡¹¿¡ ´ëÇÑ ¸Þ¼¼Áö¸¦ Ãß°¡ÇÕ´Ï´Ù.

    ¡¸GetClientRect ÇÔ¼ö¡¹´Â ÇöÀçÀÇ Å¬¶óÀÌ¾ðÆ® ¿µ¿ªÀÇ À§Ä¡¸¦ ¾ò´Â ÇÔ¼öÀÔ´Ï´Ù.
    (Ãß°¡Çß½À´Ï´Ù)

    void GetClientRect(void)
    {
        POINT clientpos={0,0};                     //Ŭ¶óÀÌ¾ðÆ® Æ÷Áö¼Ç
        ClientToScreen(hwnd, &clientpos);
        //À©µµ¿ìÀÇ Á»ó ÁÂÇ¥¸¦ È­¸é ÁÂÇ¥·Î ¾ò´Â´Ù
        //ScreenClientRect ´Â ±Û·Î¹ú RECT ±¸Á¶Ã¼
        ScreenClientRect.left=clientpos.x//½ÃÀÛÁ¡ XÁÂÇ¥
        ScreenClientRect.top=clientpos.y//½ÃÀÛÁ¡ YÁÂÇ¥
        ScreenClientRect.right=clientpos.x + _ScreenXsize//³¡Á¡ XÁÂÇ¥
        ScreenClientRect.bottom=clientpos.y + _ScreenYsize//³¡Á¡ YÁÂÇ¥
        //½ÃÀÛÁ¡¿¡ À©µµ¿ì »çÀÌÁîÀÇ ¸ÅÅ©·Î¸¦ °¡»êÇÏ´Â °ÍÀ¸·Î //Ŭ¶óÀ̾ðÆ®ÀÇ Å©±â¸¦ ¾Ë ¼ö ÀÖ½À´Ï´Ù.
    }

    ÇöÀçÀÇ À©µµ¿ìÀÇ ÁÂÇ¥¸¦ Ŭ¶óÀÌ¾ðÆ® ÁÂÇ¥·Î ÃëµæÇϴ ó¸®ÀÔ´Ï´Ù.
    󸮴 °£´ÜÇÕ´Ï´Ù.

    ¡¸ClientToScreen ÇÔ¼ö¡¹·Î À©µµ¿ìÀÇ Á»óÀÇ ÁÂÇ¥¸¦ È­¸é ÁÂÇ¥°è·Î ¾òÀ» ¼ö°¡ ÀÖÀ¸¹Ç·Î
    ±×·¡¼­ ¾òÀº °ªÀ» RECT ±¸Á¶Ã¼¿¡ °Ç³×ÁÝ´Ï´Ù.
    ½ÃÀÛÁ¡(Á»ó ÁÂÇ¥)°ú ³¡Á¡(¿ìÇÏ ÁÂÇ¥)À» ¾ò½À´Ï´Ù.
    ±×¸®°í RECT ±¸Á¶Ã¼¸¦ ¹¦È­ ÇÒ ¶§, ¡¸Blt ¸Þ¼Òµå¡¹ÀÇ Á¦1 ÆÄ¶ó¹ÌÅÍ¿¡ °Ç³×ÁÝ´Ï´Ù.

    /////////////////////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////

    Z¼ÒÆ®

    Z¼ÒÆ®´Â ±íÀ̸¦ Ç¥ÇöÇÒ ¶§¿¡ »ç¿ëµË´Ï´Ù.
    ÀÏÁ¤ÇÑ °ÔÀÓ¡¤¡¤¡¤¡¤2DÁö¸¸ ¡¸±íÀÌ(ZÃà)¡¹ÀÇ °³³äÀÌ ÀÖ´Â °ÔÀÓÀ»
    ¸¸µé ¶§¿¡ »ç¿ëÇÏ¸é ½ºÇÁ¶óÀÌÆ®ÀÇ ¹¦È­°¡ ºñ±³Àû °£´ÜÇÏ°Ô µË´Ï´Ù.

    Áö±Ý±îÁöÀÇ »ùÇà ÇÁ·Î±×·¥Àº È­¸é¿¡ ¹¦È­ ÇÒ ¶§¡¤¡¤¡¤¡¤

    1.¡¸¹è°æÀÇ ¹¦È­¡¹
    2.¡¸Ä³¸¯ÅÍÀÇ ¹¦È­¡¹

    etc¡¤¡¤¡¤

    µîÀ¸·Î ¾ÈÂÊ¿¡ ÀÖÀ¸¸é ÀÖ´Â Â÷·Ê·Î ¹¦È­Çϵµ·Ï ÇÁ·Î±×·¥ ÇØ ¿Ô½À´Ï´Ù.

    ¹¦È­ ¼ø¼­°¡ ¹Ý´ë¶ó¸é,¡¸Ä³¸¯ÅÍ À̹ÌÁö¡¹´Â ¹è°æ¿¡ °¡·ÁÁö±â ¶§¹®¿¡
    º¸ÀÌÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù.

    2D¿¡¼­´Â ¡¸¹¦È­ ÇÏ´Â Â÷·Ê¡¹·Î ±íÀ̸¦ Ç¥ÇöÇÕ´Ï´Ù.

    Z¼ÒÆ®°¡ ÇÊ¿äÇÑ °ÔÀÓÀÌ ¿¹¸¦ µé¸é(ÀÚ)¡¤¡¤¡¤¡¤¡¤¡¸µð¾Æºí·Î¡¹
    µî ¸Ê¿¡ ¡¸¾Õ°ú ¾ÈÂÊ¡¹ÀÇ °³³äÀÌ ÀÖ´Â °æ¿ìÀÔ´Ï´Ù.

    ij¸¯ÅÍ´Â ¸ÊÀÇ ¾ÈÂÊÀ¸·Î °¡¸é ¾ÕÀÇ Ä³¸¯ÅÍÀÇ µÚ·Î ¼û¾î ¹ö¸³´Ï´Ù.
    ¾ÈÂÊÀ¸·Î °¬À¸´Ï±î ´ç¿¬ÇÕ´Ï´Ù¸¸,
    ÀÌ ÄÚ³ÊÀÇ Áö±Ý±îÁö ¹æ¹ý¿¡¼­´Â À̰ÍÀº ÇÒ ¼ö ¾ø½À´Ï´Ù.

    1.¡¸¹è°æÀÇ ¹¦È­¡¹
    2.¡¸Ä³¸¯ÅÍ AÀÇ ¹¦È­¡¹
    2.¡¸Ä³¸¯ÅÍ BÀÇ ¹¦È­¡¹

    etc¡¤¡¤¡¤

    󸮸¦ ¸¸µé°í ÀÖÀ¸¸é ¡¸Ä³¸¯ÅÍ B¡¹´Â Ç×»ó ¡¸Ä³¸¯ÅÍ A¡¹ÀÇ ¾Õ¿¡ ¹¦È­ µÇ°í.
    ¸ÊÀÇ ¾ÈÂÊÀ¸·Î À̵¿Çß´Ù°í ÇØµµ ¸ÊÀÇ ¾Õ¿¡ ÀÖ´Â ¡¸Ä³¸¯ÅÍ A¡¹ÀÇ µÚ¿¡ ¼û´Â ÀÏÀº ¾ø½À´Ï´Ù.

    ´Â ±× ¿¹¡¤¡¤¡¤¡¤¡¸Àû»ö È­»ó¡¹Àº ¡¸Ã»»ö È­»ó¡¹º¸´Ù µÚ·Î ¹¦È­ ÇÏ°í ½Í¾îµµ
    ÇÒ ¼ö ¾ø½À´Ï´Ù.

    À̰ÍÀº ¡¸¹¦È­ÀÇ Â÷·Ê¡¹¿¡ ¹®Á¦°¡ Àֱ⠶§¹®ÀÔ´Ï´Ù.

    Z¼ÒÆ®¿¡¼­´Â ½ºÇÁ¶óÀÌÆ®¿¡ ¡¸ZÃàÀÇ °ª¡¹À» °¢°¢ °®°ÔÇÏ°í ±× °ª¿¡ ÀÇÇØ ¹¦È­ ÇÏ´Â Â÷·Ê¸¦
    º¯°æÇϴ ó¸®ÇÕ´Ï´Ù.

    ¡¸ZÃàÀÇ °ª¡¹Àº ¡¸¾ó¸¶³ª ¾ÈÂÊ¿¡ ÀÖÀ»±î?¡¹¶ó°í ÇÏ´Â °ªÀ¸·Î ¡¸0¡¹À̶ó¸é Á¦ÀÏ ¾Õ ¡¸¥á¡¹À̶ó¸é ¾ÈÂÊÀ̶ó »ý°¢ÇÕ´Ï´Ù.
    ¥á°ªÀÌ ³ôÀ» ¼ö·Ï 󸮿¡ ½Ã°£ÀÌ °É¸®Áö¸¸ º¸´Ù Á¤¹Ðµµ°¡ ³ôÀº ¿ø±Ù°¨À» Ç¥ÇöÇÒ ¼ö ÀÖ´Ù
    ±×¸®°í ¡¸ZÃàÀÇ °ª¡¹ÀÌ ¡¸Å«(ÀÛÀº ¼ø¼­·Îµµ °¡´É) Â÷·Ê¡¹·Î ¹¦È­ ÇØ ³ª°¡¸é OKÀÔ´Ï´Ù.

    ó¸®ÀÇ È帧
    5°³ÀÇ ½ºÇÁ¶óÀÌÆ®¸¦ Z¼ÒÆ®¿¡ ÀÇÇÑ ¹¦È­¸¦ ½Ç½ÃÇÑ´Ù
    5°³ÀÇ ½ºÇÁ¶óÀÌÆ®´Â ¸ðµÎ ´Ù¸¥ À̹ÌÁö¸¦ »ç¿ëÇÕ´Ï´Ù.
    ±× À̹ÌÁöµéÀº ¸ðµÎ ÇϳªÀÇ ¼­ÆäÀ̽º¿¡ ¸ðÀ» ¼ö ÀÖ½À´Ï´Ù.
    Ç¥½ÃÇÏ´Â ¡¸5°³¡¹ÀÇ ½ºÇÁ¶óÀÌÆ®¿¡ ±¸Á¶Ã¼¸¦ ¸¸µì½Ã´Ù.
    ½ºÇÁ¶óÀÌÆ® ±¸Á¶Ã¼¿¡µµ Ãß°¡ÇØ¾ß ¸â¹ö´Â ÀÌÇÏ¿Í °°Àº °ÍÀ̶ó »ý°¢µË´Ï´Ù.

    ¡á½ºÇÁ¶óÀÌÆ®°¡ ÀÖ´Â ¼­ÆäÀ̽ºÀÇ ÁÖ¼Ò

    ¼Ò½ºÄڵ忡¼­´Â ¡¸ÇϳªÀÇ ¼­ÆäÀ̽º¡¹°¡ µÇ°í ÀÖÁö¸¸ ³ªÁß¿¡ È®ÀåÇÒ ¶§¿¡
    ¾î´À ¼­ÆäÀ̽º·ÎºÎÅ͵µ °¡´ÉÇϵµ·Ï À̰ÍÀ» ¸â¹ö¿¡ ³Ö½À´Ï´Ù.
    ¹¦È­ 󸮴 ÀÌ ¸â¹ö°¡ ÁöÁ¤ÇÏ´Â ¼­ÆäÀ̽ººÎÅÍ ¹¦È­¸¦ ÇÕ´Ï´Ù.

    ¡áÇ¥½ÃÇÒ °÷ÀÇ ±¸¿ª

    ¡¸blt¡¹·Î ¹¦È­ ÇÒ ¶§, 2°³ÀÇ RECT ±¸Á¶Ã¼·Î Àü¼ÛÇÒ °÷°ú Àü¼ÛÇØ¿Ã °÷ÀÇ ±¸¿ªÀÌ
    ÇÊ¿äÇϹǷΠÀ̰͵µ ¸â¹ö¿¡ ³Öµµ·Ï ÇսôÙ.
    X¡¤YÀÇ À§Ä¡¸¸À¸·Îµµ ¹¦È­¸¦ ó¸®ÇÏ´Â ÂÊ¿¡ 󸮸¦ Ãß°¡ÇÏ´Â ÀÏ·Î °¡´É

    ¡áZ°ª

    ±× ½ºÇÁ¶óÀÌÆ®°¡ ¾ó¸¶³ª ¾ÈÂÊÀ¸·Î Á¸ÀçÇÏ´ÂÁö¸¦ ³ªÅ¸³»´Â °ªÀÔ´Ï´Ù.

    ¡á¾Õ°ú ´ÙÀ½ÀÇ ±¸Á¶Ã¼ÀÇ ÁÖ¼Ò

    ¾ç¹æÇâÀ» üÀÎ ¸®½ºÆ®·Î ¼ÒÆ®¸¦ ÇÒ ¶§¿¡ À̰ÍÀÌ ÇÊ¿äÇÕ´Ï´Ù.
    ½ºÇÁ¶óÀÌÆ®°¡ Áõ°¡ÇÒ ¶§, ±¸Á¶Ã¼¸¦ µ¿ÀûÀ¸·Î »ý¼ºÇØ Ã¼ÀÎ ¾È¿¡ Â¥³Ö¾î °¡´Â °ÍÀÌ
    Á¦ÀÏ ÁÁ´Ù°í »ý°¢ÇÕ´Ï´Ù.

    ±×·¯³ª ÀÌ ¼Ò½º¿¡¼­´Â üÀÎ ¸®½ºÆ®¿¡¼­µµ ¼ÒÆ®´Â Çϰí ÀÖÁö ¾Ê½À´Ï´Ù.
    ´Ù¸¸ ¹è¿­À» Á¤ÀÇÇØ °Å±â¼­ ¼ÒÆ® Çϰí ÀÖ½À´Ï´Ù.

    »ùÇÃÀ» ±×´ë·Î »ç¿ëÇϸ顤¡¤¡¤¡¤È­¸é¿¡ ³ª¿À´Â ½ºÇÁ¶óÀÌÆ®ÀÇ ÃÖ´ëºÐ·®ÀÇ ±¸Á¶Ã¼°¡
    Ç×»ó ¸Þ¸ð¸®¿¡ ÇÊ¿äÇϱ⠶§¹®¿¡ ÃÖÀûÀ̶ó°í´Â ÇÒ ¼ö ¾ø½À´Ï´Ù.

    ÇÒ ¼ö ÀÖÀ¸¸é üÀÎ ¸®½ºÆ®¿¡¼­ÀÇ Z¼ÒÆ®¿¡ 縰ÁöÇÏ´Â ÆíÀÌ ´õ¿í È¿À²ÀûÀÔ´Ï´Ù.
    ±¸Á¶Ã¼ÀÇ Á¤ÀÇ
    ±¸Á¶Ã¼¸¦ Á¤ÀÇÇսôÙ.

    typedef struct{//Z¼ÒÆ® ±¸Á¶Ã¼ Á¤ÀÇ
        DWORD LpSurface;    //¼­ÆäÀ̽º¿¡ÀÇ Æ÷ÀÎÅÍ
        RECT Trect;            //Àü¼ÛÇÒ °÷ÀÇ ³×¸ð
        RECT Nrect;            //Àü¼ÛÇØ¿Ã °÷ÀÇ ³×¸ð
        int Zs;                //Z°ª
    }Zsort, *LpZsort;

    À̹ø »ùÇÃÀº ij¸¯ÅÍ 5°³¿Í ¸Ê 1°³ÀÇ ¡¸6°³¡¹ÀÇ ±¸Á¶Ã¼ ¹è¿­ÀÌ ÇÊ¿äÇÕ´Ï´Ù.
    ±¸Á¶Ã¼ÀÇ »ý¼ºÀ» Çϸé ÃʱâÀÇ ¼ÒÆ® °ªÀ» °Ý³³ÇÏ´Â ÇÔ¼ö¸¦ 1ȸ¸¸ È£ÃâÇϵµ·Ï ÇØ µÓ´Ï´Ù.

    void ZsortInit(void)
    {
        //¸Ê À̹ÌÁöÀÇ Z¼ÒÆ® ÃʱâÈ­
        sort[5].LpSurface = (DWORD) mapsurface;
        sort[5].Zs        = _ZLAST//¸ÊÀº Á¦ÀÏ ¾ÈÂÊ¿¡ SetÇÑ´Ù
        SetRect(&sort[5].Nrect, 0,0,256,240);
        SetRect(&sort[5].Trect, 0,0,640,480);

        //ij¸¯ÅÍ 5°³ÀÇ ÃʱâÈ­
        for(int cnt=0;cnt<=4;cnt++){
            sort[cnt].LpSurface = (DWORD) sprite;
            sort[cnt].Zs        = cnt; //¸ÊÀº Á¦ÀÏ ¾ÈÂÊ¿¡ SetÇÑ´Ù
            SetRect(&sort[cnt].Nrect, cnt*32, 0, cnt*32+32, 32);
            //Àü¼ÛÇØ¿Ã °÷ ÁÂÇ¥
            SetRect(&sort[cnt].Trect, cnt*32, 200, (cnt*32)+32, 232);
            //Àü¼ÛÇÒ °÷ ÁÂÇ¥
        }
        //ij¸¯ÅÍ´Â ³ªÁß¿¡ ¹¦È­ ÇÑ´Ù
        //ij¸¯ÅÍ A¸¸ ¿òÁ÷ÀÓÀ¸·Î. . . ¡¡Z°ªÀ» º¯°æÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.
    }

    Ãʱâ Z°ªÀº ¸ÊÀÇ Á¦ÀÏ ¾ÈÂÊ¿¡¼­ ij¸¯ÅͰ¡ 0¡¤1¡¤2¡¤3¡¤4·Î Z °ªÀ» ÇÒ´çÇϰí ÀÖ½À´Ï´Ù.

    ¿òÁ÷ÀÏ ¼ö Àִ ij¸¯ÅÍ´Â ¡¸A(Ãʱâ Z°ª£º0)¡¹¸¸À¸·Î ±âµ¿ÇßÀ» ¶§´Â ij¸¯ÅÍ A´Â
    ¾î´À ij¸¯Åͺ¸´Ù ¾Õ¿¡ Àֱ⠶§¹®¿¡ µÚ·Î ¼û´Â ÀÏÀº ¾ø½À´Ï´Ù.

    Z°ªÀÇ ÃʱâÈ­(ij¸¯ÅÍÀÇ ÁÂÇ¥ ÃʱâÈ­)´Â ¾Æ¹«·± Ư»öµµ ¾ø´Â °ªÀ» ³Ö´Â ó¸®À̹ǷÎ
    ¼³¸íÀº »ý·«ÇÕ´Ï´Ù.


    ´ÙÀ½¿¡¡¤¡¤¡¤¡¤¡¸Z¼ÒÆ®¿¡ ÀÇÇÑ ¹¦È­¡¹ÀÔ´Ï´Ù.
    ÀÌ Ã³¸®´Â ¡¸void Zsortrender(void)¡¹¿¡¼­ 󸮵˴ϴÙ.

    for(cnt=_ZLAST;cnt>=0;cnt--)         //¾ÈÂʺÎÅÍ °Ë»ö
    {
        for(x=0;x<=5;x++)//Z°ªÀÌ ³ôÀº °ÍºÎÅÍ ¹¦È­ ÇÑ´Ù
        {
            if(sort[x].Zs == cnt)         //Z½Éµµ¿Í µ¿ÀÏÇϴϱî
            BackSurface->Blt(&sort[x].Trect,
                (IDirectDrawSurface*) sort[x].LpSurface,
                &sort[x].Nrect,
                DDBLTFAST_WAIT | DDBLT_KEYSRC, &ddbltfx);
        }
    }

    ±â¼úÀûÀ¸·Î´Â ÀǿܷΠªÀº ó¸®ÀÔ´Ï´Ù.
    ·çÇÁ 󸮷Π¾ÈÂʺÎÅÍ Â÷·Ê·Î ¹¦È­Çϴ ó¸®°¡ µÇ¾î ÀÖ½À´Ï´Ù.

    ¹Ù±ùÂÊÀÇ ·çÇÁ(for(cnt=_ZLAST;cnt>=0;cnt--)

    ¡¸cnt¡¹´Â ¡¸Z°ª¡¹À» ³ªÅ¸³»°í ÀÖ¾î ¡¸ZÄ¡ÀÇ ÃÖ´ë°ª ¸ÅÅ©·Î_ZLAST¡¹ºÎÅÍ Â÷·Ê·Î °Ë»öÇØ °¥ °ÍÀÔ´Ï´Ù.
    ¡¸0¡¹ÀÌ µÇ¸é Â÷·Ê·Î ¹¦È­ ´Ù ÇÑ °ÍÀÌ µÇ¹Ç·Î 󸮴 Á¾·á°¡ µË´Ï´Ù.

    ¾ÈÂÊÀÇ ·çÇÁ(for(x=0;x<=5;x++)
    ´Â ½ºÇÁ¶óÀÌÆ® ±¸Á¶Ã¼ÀÇ °Ë»öÀÔ´Ï´Ù.

    ÇÁ·Î±×·¥Àº ¹æÇâ Ű·Î ij¸¯ÅÍ À̵¿ÀÌ °¡´ÉÇÕ´Ï´Ù.
    ZŰ·Î Z °ªÀ» Ç÷¯½º ÇØ¡¤¡¤¡¤XŰ·Î ¡¸Z°ª¡¹À» ¸¶À̳ʽº ÇÕ´Ï´Ù

    ¾îµð±îÁö³ª ¹è¿­ Å×À̺íÀ» »ç¿ëÇÑ Z¼ÒÆ®ÀÇ ¹æ¹ý(º¸Ãæ)
    »õ·Ó°Ô ¡¸½ºÇÁ¶óÀÌÆ® ±¸Á¶Ã¼ Æ÷ÀÎÅÍ ¹è¿­¡¹(±¸Á¶Ã¼¿¡ÀÇ Æ÷ÀÎÅ͸¸À» ¸ðÀº ¹è¿­)À» ¸¸µé¾î µÓ´Ï´Ù.
    ÇÁ·Î±×·¥ ½ÇÇàÁß¿¡ ¡¸Z°ª¡¹ÀÇ º¯°æÀÌ ÀÖ¾úÀ» ¶§ ¸¸ ¡¸½ºÇÁ¶óÀÌÆ® ±¸Á¶Ã¼¡¹¿¡ µ¥ÀÌÅ͸¦ °Ý³³ÇÕ´Ï´Ù.
    ¡¸½ºÇÁ¶óÀÌÆ® ±¸Á¶Ã¼¡¹¸ðµÎ¸¦ ¼ÒÆ®³ª ¿À¸§Â÷¼ø, ³»¸²Â÷¼øÀ¸·Î ¡¸½ºÇÁ¶óÀÌÆ® ±¸Á¶Ã¼ Æ÷ÀÎÅÍ ¹è¿­¡¹ÀÇ Å×À̺í¸ðµÎ¸¦ °»½ÅÇÕ´Ï´Ù.
    À̹ÌÁöÀÇ ¹¦È­´Â ÀÌ ¡¸½ºÇÁ¶óÀÌÆ® ±¸Á¶Ã¼ Æ÷ÀÎÅÍ ¹è¿­¡¹ÀÇ Â÷·Ê·Î ¹¦È­ ÇØ ³ª°©´Ï´Ù.
    ¼ÒÆ®´Â ¹è¿­ÀÇ ³»¿ëÀ» ¼ø¼­¿¡ ¸ÂÃß¾î ¹Ù²Ù´Â °ÍÀ» ¸»ÇÑ´Ù
    À̹ø ¼Ò½ºÀÇ ¿äÁ¡Àº¡¸Z°ªÀ» ½ºÇÁ¶óÀÌÆ®¸¶´Ù °®°ÔÇÑ´Ù¡¹¸¦ ¾Ë ¼ö ÀÖ¾ú´Ù¸é µÈ´Ù°í »ý°¢ÇÕ´Ï´Ù.
    ´ÙÀ½ ¼Ò½º´Â ¹è¿­À» ÀÌ¿ëÇÑ Z¼ÒÆ®ÀÔ´Ï´Ù.

    //////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////

    Z¼ÒÆ®ÀÌ

    Àüȸ¿¡¼­ °£´ÜÇÑ(?) Z¼ÒÆ® °°Àº °ÍÀ» ÇßÀ¸¹Ç·Î À̹øÀº ±×°ÍÀ» ¹ßÀü(?) ½ÃÄÑ
    º¼±îÇÏ°í »ý°¢ÇÕ´Ï´Ù.

    ¸ñÇ¥´Â ½ºÇÁ¶óÀÌÆ®ÀÇ µ¥ÀÌÅ͸¦ ¸Þ¸ð¸®¿¡ µ¿ÀûÀ¸·Î »ý¼ºÇØ ±×°ÍÀ» üÀÎÀ¸·Î ¹­¾î
    ¼ÒÆ®¡¤¹¦È­¿¡ ÀÌ¿ëÇÑ´Ù¡¤¡¤¡¤¡¤ÀÔ´Ï´Ù.

    üÀÎ ¸®½ºÆ®ÀÇ ¿¬½Àµµ Æ÷ÇÔÇÑ´Ù
    üÀÎ ¸®½ºÆ®Ã¼ÀÎ ¸®½ºÆ®ÀÇ °³³äÀ» ¸ð¸£´Â ºÐÀ» À§ÇØ¡¤¡¤¡¤¡¤
    °ÔÀÓÀÇ À帣¿¡ µû¶ó¼­´Â È­¸é¿¡ Ç¥½ÃµÇ´Â À̹ÌÁöÀÇ ¼ø¼­°¡ Á¤ÇØÁ® ÀÖÁö ¾ÊÀº °æ¿ì°¡ ÀÖ´Ù°í ÇÕ´Ï´Ù.
    Á¤ÇØÁ® À־ µÈ´Ù.
    ÀÌ ¶§, À̹ÌÁöÀÇ ¼ö¸¸Å­ ±×°ÍÀ» °ü¸®ÇÏ´Â ¡¸ÁÂÇ¥ º¯¼ö¡¹¸¦ ÁغñÇØ¾ß ÇÕ´Ï´Ù.
    È­¸é¿¡ ³ªÅ¸³»´Â À̹ÌÁöÀÇ ¡¸ÃÖ´ë¼ö¡¹ÀÇ º¯¼ö¸¦ ¡¸Ã³À½¿¡ Á¤ÀÇÇϸ项¡¤¡¤¡¤¡¤

    Á¡¤¡¤

    int x[256];
    int y[256];

    ¶ó°í ÇÁ·Î±×·¥ÀÇ Ã³À½À¸·Î ÇÊ¿äÇÑ ÃÖ´ë¾çÀ» Á¤ÀÇÇÏ´Â °ÍÀÔ´Ï´Ù.

    À§ÀÇ °æ¿ì´Â È­¸é¿¡ À̹ÌÁö 256°³¸¦ °ü¸®ÇÒ ¼ö ÀÖ´Â ÁÂÇ¥¸¦ Á¤ÀÇÇÑ °ÍÀÌ µÇ´Â±º¿ä.
    ±×·¯³ª È­¸é¿¡ À̹ÌÁö°¡ Çϳª ¹Û¿¡ Ç¥½ÃµÇ¾î ÀÖÁö ¾ÊÀº °ÍÀ» »ý°¢ÇØ º¸¼¼¿ä!
    ÀÌ °æ¿ì¡¤¡¤¡¤¡¤256°³ÀÇ °ü¸®¿ë º¯¼ö¸¦ º¸°ü À¯ÁöÇÏ´Â ¸Þ¸ð¸® ¿µ¿ªÁß¡¤¡¤¡¤
    1°³ ¹Û¿¡ »ç¿ëÇÏÁö ¾Ê±â ¶§¹®¿¡ ³ª¸ÓÁöÀÇ 255°³ ºÐÀÇ ¸Þ¸ð¸® ¿µ¿ªÀº ¡¸³¶ºñ¡¹°¡ µÇ°í ÀÖ½À´Ï´Ù.
    °Å±â¼­¡¤¡¤¡¤¡¤ÇÊ¿äÇÑ ¾ç¸¸Å­ ±×¶§ ±×¶§ »ý¼ºÇØ °Å±â¿¡ µ¥ÀÌÅ͸¦ º¸°üÇÏÀÚ°í ÇÏ´Â °ÍÀÌ
    üÀÎ ¸®½ºÆ®ÀÔ´Ï´Ù.

    À̰ÍÀ̶ó¸é ÇÊ¿äÇÑ ¾ç¸¸Å­ ¸Þ¸ð¸®¸¦ ¼ÒºñÇϹǷΠ³¶ºñ°¡ ¾ø½À´Ï´Ù.

    ¾î´À ÇÔ¼ö(³ªÁß¿¡ ³ª¿Ã ÇÔ¼ö)¿¡¼­ ¸Þ¸ð¸®¿¡ ÇÊ¿äÇÑ »çÀÌÁîÀÇ ¿µ¿ªÀ» »ý¼ºÇÕ´Ï´Ù.
    (ÇÁ·Î±×·¥ ·çÇÁ³»¿¡¼­)

    ÀÌ ¶§ »ý¼ºµÈ º¯¼ö¡¤±¸Á¶Ã¼µîÀÇ ¸Þ¸ð¸® À§Ä¡´Â ¾îµð°¡ µÉ±î °áÁ¤ÇÏ´Â ÀÏÀº ±âº»ÀûÀ¸·Î
    ºÒ°¡´ÉÇØ¼­ ÄÄÇ»ÅͰ¡ ÀÚµ¿À¸·Î ÀûÀýÇÑ À§Ä¡¿¡ ¿µ¿ªÀ» È®º¸ÇØ ÁÝ´Ï´Ù.

    À§ ±×¸²°ú °°ÀÌ ¸Þ¸ð¸®¿¡ »Ô»ÔÀÌ Èð¾îÁö°Ô µ¥ÀÌÅͰ¡ ¹èÄ¡µË´Ï´Ù.
    ÀÌ »óÅ·δ ÇÊ¿äÇÑ µ¥ÀÌÅÍÀÇ ¾ï¼¼½º¸¦ ÇÒ ¼ö°¡ ¾ø½À´Ï´Ù¡¤¡¤¡¤¡¤°Å±â¼­ µ¿ÀûÀ¸·Î »ý¼ºµÈ
    µ¥ÀÌŸ¿¡ ¡¸´ÙÀ½ÀÇ ¿ä¼Ò¿Í ÀüÀÇ ¿ä¼Ò¡¹ÀÇ ¡¸ÁÖ¼Ò(address)¡¹¸¦ °¡Áö´Â º¯¼ö¸¦ °®°ÔÇÕ´Ï´Ù.

    ¸Þ¸ð¸®»óÀÇ Ã¼ÀÎÀÇ °³³äÀº ±×¸²¿¡ ³ªÅ¸³­ ´ë·Î
    ¾ÕÀÇ ¿ä¼Ò¿Í ´ÙÀ½ÀÇ ¿ä¼ÒÀÇ ÁÖ¼Ò¸¦ °¡Á® ¿À´Â °ÍÀ¸·Î ¡¸Ã¼ÀÎ(¼è»ç½½)¡¹°ú °°ÀÌ ¿¬°áµÇ¾î °©´Ï´Ù.
    ÁÖ¼Ò·Î ¿¬°áÇϹǷΠ¸Þ¸ð¸®»óÀÇ À§Ä¡´Â °ü°è¾ø´Ù!
    ¶Ç ¿ä¼ÒÀÇ Ãß°¡ »èÁ¦µµ üÀÎÀ» ¿¬°áÇØ¼­ ¹Ù²Ù´Â °ÍÀ¸·Î °£´ÜÇÏ°Ô ÇÒ ¼ö ÀÖ°í Å×À̺í 󸮿¡¼­´Â Çϱ⠾î·Á¿î(󸮰¡ ¹«°Å¿öÁø´Ù) ¡¸µµÁß¿¡ Ãß°¡¡¤»èÁ¦¡¹µîµµ °£´ÜÇÏ°Ô °í¼ÓÀ¸·Î ½Ç½ÃÇÒ ¼ö ÀÖ½À´Ï´Ù.

    ¾Æ¹«Æ° ÁÖ¼ÒÀÇ ¾ÕÀ» º¯°æÇÏ´Â °Í¸¸À¸·Î °¡´ÉÇϱ⶧¹®¿¡.

    µ¡ºÙ¿©¼­ üÀÎ ¸®½ºÆ®´Â ¡¸³ëº§ °ÔÀÓ¡¹À̳ª RPG¿¡¼­ÀÇ À̺¥Æ® ¸Þ¼¼Áö 󸮿¡
    »ç¿ëÇϸé ÁÁÀº ¾Ë°í¸®ÁòÀ̶ó°í ÇÒ ¼ö ÀÖ½À´Ï´Ù.

    °³³äÀûÀÎ ¹°°Ç
    ¿ì¼±Àº ½ºÇÁ¶óÀÌÆ® µ¥ÀÌÅÍÀÇ ±¸Á¶Ã¼¸¦ Á¤ÀÇÇÕ´Ï´Ù.
    ÀÌ ±¸Á¶Ã¼¸¦ µ¿ÀûÀ¸·Î »ý¼ºÇØ ÀÌ ±¸Á¶Ã¼¿¡ °Ý³³µÇ°í ÀÖ´Â À̹ÌÁö¸¦ ¹¦È­Çϵµ·Ï ÇÕ´Ï´Ù.

    ¿ì¼± ÇÊ¿äÇÑ °ÍÀº ¡¸¾ÕÀÇ ¿ä¼Ò¡¹¿Í¡¸´ÙÀ½ÀÇ ¿ä¼Ò¡¹ÀÇ Æ÷ÀÎÅÍ º¯¼öÀÔ´Ï´Ù.
    »ùÇÃÀº ¾ç¹æÇâÀÇ Ã¼ÀÎÀ̹ǷΠÀÌ µÎ °³ÀÇ Æ÷ÀÎÅͰ¡ ÇʼöÀÔ´Ï´Ù.

    ¡¸Ã¼ÀÎ ¸®½ºÆ®¡¹ÀÇ ¼³¸íÀ» º¸¸é ¾Ë ¼ö ÀÖ´Ù°í »ý°¢ÇÕ´Ï´Ù.
    À§ÀÇ Æ÷ÀÎÅÍ´Â Çʼö·Î¼­¡¤¡¤¡¤³ª¸ÓÁöÀÇ ÇÊ¿äÇÑ °ÍÀ» »ý°¢Çϸé.

    À̹ÌÁö°¡ ³ª¿À¹Ç·Î ¡¸¼­ÆäÀ̽ºÀÇ Æ÷ÀÎÅÍ¡¹³ª ¡¸Ç¥½Ã¸¦ ³ªÅ¸³»´Â RECT ±¸Á¶Ã¼¡¹µîÀ¸·Î
    ÇϳªÀÇ ½ºÇÁ¶óÀÌÆ® µ¥ÀÌÅÍ ±¸Á¶Ã¼·Î Çϸé ÁÁ´Ù°í »ý°¢ÇÕ´Ï´Ù.

    Z½Éµµ

    ±íÀ̸¦ Ç¥ÇöÇϹǷΠ´ç¿¬È÷ ¡¸Z½Éµµ¡¹¸¦ ³ªÅ¸³»´Â ¡¸°ª¡¹ÀÌ ÇÊ¿äÇÏ°Ô µË´Ï´Ù.
    ÀÌ µ¥ÀÌÅ͸¦ ¡¸½ºÇÁ¶óÀÌÆ® ±¸Á¶Ã¼¡¹¸¶´Ù °®°ÔÇϸ顤¡¤¡¤¡¤

    À§¿Í °°ÀÌ µË´Ï´Ù.
    ÀϹÝÀûÀΠüÀÎÀ̶ó°í ÇÒ ¼ö ÀÖ½À´Ï´Ù.
    ±×¸®°í À̹ÌÁö Ç¥½Ã°¡ ÇÊ¿äÇÏ°Ô µÇ¸é ¸®½ºÆ®¿¡ ¸ðµÎ Ãß°¡ÇÕ´Ï´Ù.
    Ãß°¡¡¤»èÁ¦ À§Ä¡¿¡ ´ëÇØ¼­´Â °Ë»ö 󸮸¦ ÇØ¾ß ÇÕ´Ï´Ù.
    µ¥ÀÌÅÍ´Â ³»¸²Â÷¼ø¿¡ ÁÙÁö¾î ÀÖÀ¸¹Ç·Î ¡¸Â÷·ÊÂ÷·Ê °Ë»ö¡¹¸¸À¸·Î
    ¾Æ´Ñ ¡¸¼ø¼­´ë·ÎÀÇ °Ë»ö¡¹À» È¿À²ÀûÀ̶ó°í »ý°¢µË´Ï´Ù.

    ¸Þ¸ð¸®ÀÇ µ¿Àû »ý¼ºÀÇ ¹æ¹ý
    C¾ð¾î º£À̽º¶ó¸é ¡¸malloc ÇÔ¼ö¡¹·Î C£«£«º£À̽º¶ó¸é ¡¸new¡¹°¡ ÀÖ½À´Ï´Ù.
    ¿©±â´Â C¾ð¾î º£À̽ºÀ̹ǷΡ¤¡¤¡¤¡¸malloc ÇÔ¼ö¡¹¿¡ ´ëÇØ.
    ¿ì¼±, ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÏ·Á¸é , stdlib.h ¿Í malloc.h¸¦ ÀÎŬ·çµåÇØ¾ß ÇÕ´Ï´Ù.

    void *malloc( size_t size );

    ÀÌ ÇÔ¼öÀÇ ÆÄ¶ó¹ÌÅÍ´Â 1°³·Î ¡¸¾î´À ¸Þ¸ð¸®¿¡ È®º¸ÇÒ±î?¡¹ÀÔ´Ï´Ù.
    ¸®ÅÏ °ªÀº È®º¸ÇÑ ¿µ¿ªÀÇ ¸Ç ¾ÕÀÇ ÁÖ¼ÒÀÔ´Ï´Ù.
    È®º¸¿¡ ½ÇÆÐÇßÀ» °æ¿ì´Â NULLÀÌ ¸®ÅÏ µË´Ï´Ù.

    »ç¿ëÇÏ´Â °æ¿ì´Â ±¸Á¶Ã¼ÀÇ ¹ÙÀÌÆ® ¼ö¸¦ ÆÇ´ÜÇÏ´Â ÇÔ¼ö ¡¸sizeof¡¹µîÀ¸·Î º´¿ëÇØ¼­ µ¿ÀûÀ¸·Î È®º¸ÇÕ´Ï´Ù.
    üÀÎ ¸®½ºÆ®ÀÇ Æ÷ÀÎÅÍ = malloc(sizeof(SpriteStruct));

    ¿µ¿ªÀÌ ºÒÇÊ¿äÇÏ°Ô µÇ¾úÀ» °æ¿ì´Â ÇÁ·Î±×·¥ÂÊ¿¡¼­ ¸í½ÃÀûÀ¸·Î ÇØ¹æ 󸮸¦ ½Ç½ÃÇÏÁö ¾ÊÀ¸¸é
    ¸Þ¸ð¸®¿¡ ³²¾Æ ÀÖ½À´Ï´Ù.

    ¡¸free ÇÔ¼ö¡¹¿¡ ÀÇÇØ È®º¸ÇÑ ¿µ¿ªÀ» °³¹æÇÕ´Ï´Ù.
    void free( void *memblock );
    ÆÄ¶ó¹ÌÅÍ´Â ÇØ¹æÇÏ°í ½ÍÀº ÁÖ¼Ò¸¦ °Ç³×ÁÝ´Ï´Ù.
    malloc·Î È®º¸ÇÑ ¼±µÎ ÁÖ¼Ò¸¦ °Ç³×ÁÝ´Ï´Ù.

    ///////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////

    ¼­ÆäÀ̽ºÀÇ Á¶ÀÛ

    À̹øÀº ¡¸¼­ÆäÀ̽ºÀÇ Á¶ÀÛ¡¹À» ÇØ º¾½Ã´Ù.
    °£´ÜÇÏ°Ô À̹ÌÁö°¡ º¸°üµÇ°í ÀÖ´Â ¸Þ¸ð¸®¸¦ ¸¶±¸ ÁÖ¹«¸¥´Ù´Â ÀǹÌÀÔ´Ï´Ù.

    1ȸ·Î¼­ ¡¸Blt¡¹¸¦ »ç¿ëÇÏÁö ¾Ê´Â À̹ÌÁöÀÇ ¹¦È­¸¦ ÇØ º¾½Ã´Ù.
    ÀÌ¡¸¼­ÆäÀ̽ºÀÇ Á¶ÀÛ¡¹ÀÇ ´ëÇ¥ÀûÀ¸·Î¡¸¹ÝÅõ¸í 󸮡¹µîÀ» µé ¼ö ÀÖ½À´Ï´Ù.
    ¶Ç, ¡¸¼±¡¹À» ±ß°Å³ª ¡¸Á¡¡¹À» ¹¦È­ ÇÑ´Ù¸é ²Ï ÁÁÀº ¹æ¹ýÀÌ ¾Æ´Ò±î¿ä?

    °³³äºÎÅÍ ¿ì¼± ¹æ¹ýÀº ´ÙÀ½¿¡ ¼Ò°³ÇÑ´Ù°í ÇÏ°í °³³äºÎÅÍ ¼³¸íÇÕ´Ï´Ù.
    ¿ì¼±, À̹ÌÁö°¡ º¸°ü À¯ÁöµÇ°í ÀÖ´Â ¸Þ¸ð¸® ¿µ¿ªÀ» DirectX¿¡¼­´Â ¡¸¼­ÆäÀ̽º¡¹¶ó°í
    ºÎ¸£°í ÀÖ¾ú½À´Ï´Ù.

    ¹«¾ùÀΰ¡ ¾î·Á¿ï °Í °°Áö¸¸, °á±¹ ¸Þ¸ð¸®¿¡ ¡¸À̹ÌÁöÀÇ Á¤º¸¡¹°¡ °Ý³³µÇ°í ÀÖ´Â °ÍÀÏ»Ó
    ÀÔ´Ï´Ù.
    16ºñÆ® Ä®¶ó ÀÌ»óÀ¸·Î ¼³¸íÇÕ´Ï´Ù.
    ¿¹¸¦ µé¸é 16ºñÆ® Ä®¶ó´Â À̹ÌÁöÀÇ 1 µµÆ®¸¦ ¡¸16ºñÆ®¡¹·Î Ç¥ÇöÇϰí ÀÖ½À´Ï´Ù.

    ¡¸2¹ÙÀÌÆ®¡¹±º¿ä. (8ºñÆ®=1¹ÙÀÌÆ®)
    ¸Þ¸ð¸®ÀÇ ¡¸2¹ÙÀÌÆ®¡¹¿¡´Â ¡¸R ¡¤ G ¡¤ B ¡¤ ±× ¿Ü(?)¡¹ÀÇ Á¤º¸°¡ °Ý³³µÇ°í
    ´ÙÀ½ÀÇ ¹øÁöÀÇ ¸Þ¸ð¸®¿¡´Â ´ÙÀ½ µµÆ®ÀÇ Á¤º¸°¡ °Ý³³µÇ°í ÀÖ½À´Ï´Ù.

    ÇÁ·Î±×·¥¿¡¼­ ¾î´À ¹øÁöÀÇ Ä®¶óÁ¤º¸ÀÇ Ã³¸®(°»½Åµî)°¡ ¾î¶»°Ô µÉ±î¿ä?
    ´ç¿¬È÷ ¼­ÆäÀ̽ºÀÇ À̹ÌÁö ±× ÀÚü°¡ º¯È­µË´Ï´Ù.
    ¹ÝÅõ¸íÀÇ Ã³¸®¸¦ ½Ç½ÃÇÑ´Ù¸é ¡¸Àü¼ÛÇÒ °÷ÀÇ À̹ÌÁöÀÇ 1 µµÆ®¡¹ ¡¸Àü¼ÛÇØ¿Ã °÷ À̹ÌÁöÀÇ 1 µµÆ®¡¹ÀÇ Ä®¶óÁ¤º¸¸¦ ºñ±³ÇØ ¡¸Àü¼ÛÇÒ °÷ÀÇ ¸Þ¸ð¸®¸¦ ´Ù½Ã ±âÀÔÇϸ项¹ÝÅõ¸í ó¸®ÀÇ ¿Ï¼ºÀÔ´Ï´Ù.
    (¹ÝÅõ¸íµµÀÇ Á¤µµ¿¡ ÀÇÇØ °è»ê½Äµµ ¹Ù²ð °ÍÀÌ´Ù)

    ¿©±â¿¡¼­ ¡¸Àü¼ÛÇØ¿Ã °÷ÀÇ ¼­ÆäÀ̽º¡¹ÀÇ À̹ÌÁö¸¦ ¡¸Blt ¸Þ¼Òµå¡¹¸¦ »ç¿ëÇÏÁö ¾Ê°í
    ¡¸Àü¼ÛÇÒ °÷¡¹¿¡ ¹¦È­ ÇÕ´Ï´Ù.

    È帧Àº À§ÀÇ °°½À´Ï´Ù.
    ¾ÆÁÖ ´Ü¼øÇϰԡ¸Àü¼ÛÇØ¿Ã °÷¡¹ÀÇ Á¤º¸¸¦ Àо¡¤¡¤¡¤±×°ÍÀ» ¡¸Àü¼ÛÇÒ °÷¡¹¿¡ º¸³»¸é µË´Ï´Ù.
    ±×·³ ±× ¹æ¹ýÀ̶õ!

    ¼­ÆäÀ̽º¸¦ Á÷Á¢ Á¶ÀÛÇÏ·Á¸é?
    »ç½Ç ÀÌ ±â´ÉÀ» DirectDraw´Â °¡Áö°í ÀÖ½À´Ï´Ù.
    °£´ÜÈ÷ ¸»Çϸé, ¸Þ¸ð¸®¶ó´Â °ÍÀ» ±×´ÙÁö ÀǽÄÇÏÁö ¾Ê¾Æµµ °¡´ÉÇÏ´Ù°í ÇÒ ¼ö ÀÖ½À´Ï´Ù.

    ¼­ÆäÀ̽ºÀÇ ·Ï
    ¼­ÆäÀ̽º¿¡ Á÷Á¢ ¾ï¼¼½º¸¦ ÇÏ·Á¸é ¡¸DirectDraw ¿ÀºêÁ§Æ®¡¹ÀÇ ¡¸Lock ¸Þ¼Òµå¡¹
    ¸¦ »ç¿ëÇØ¼­ ¼­ÆäÀ̽º¸¦ ¡¸·Ï¡¹ÇÕ´Ï´Ù.
    Àá±×´Â °ÍÀ¸·Î ´Ù¸¥ ¾îÇø®ÄÉÀ̼ÇÀÌ ¡¸¼­ÆäÀ̽º¡¹¿¡ÀÇ ¾ï¼¼½º°¡ ºÒ°¡´ÉÇÏ°Ô µÇ¾î
    ÀÚ½ÅÀÇ ¾îÇø®ÄÉÀ̼ÇÀº ¼­ÆäÀ̽º¿¡ ¾ï¼¼½º ÇÒ ¼ö ÀÖµµ·Ï µË´Ï´Ù.
    (¸Þ¸ð¸®³»ÀÇ µ¥ÀÌŸÀÇ Á¤ÇÕ¼ºÀ» À¯ÁöÇϱâ À§ÇØ ·ÏÀ» ½Ç½ÃÇϰÚÁö¿ä.)

    HRESULT Lock(
        LPRECT lpDestRect,
        LPDDSURFACEDESC lpDDSurfaceDesc,
        DWORD dwFlags,
        HANDLE hEvent
    );

    ·Ï ¸Þ¼Òµå´Â À§¿¡ Àִ´ë·ÎÀÔ´Ï´Ù.
    ¿©±â¼­ ÁöÁ¤ÇÏ´Â ¼­ÆäÀ̽ºÀÇ ÀϺΠ¿µ¿ª(¶Ç´Â Àü¿ª)À» Àá±Û ¼ö ÀÖ½À´Ï´Ù.

    Á¦1 ÆÄ¶ó¹ÌÅÍ£º

    À̰ÍÀº Àá±×´Â ¿µ¿ªÀ» ÁöÁ¤ÇÏ´Â RECT ±¸Á¶Ã¼ÀÔ´Ï´Ù.
    ¼­ÆäÀ̽ºÀÇ ³»¿ëÀ» º¯°æÇÏ°í ½ÍÀº ¿µ¿ªÀ» ¹Ì¸® RECT ±¸Á¶Ã¼¿¡ Set ÇÏ°í ³ª¼­
    °Ç³×ÁÝ´Ï´Ù.¡¸null¡¹¸¦ °Ç³×ÁÖ¸é ¼­ÆäÀ̽º Àü¿ªÀ̶ó´Â Àǹ̰¡ µË´Ï´Ù.

    Á¦2 ÆÄ¶ó¹ÌÅÍ£º

    ·ÏÇÏ´Â ¼­ÆäÀ̽ºÀÇ Á¤º¸¸¦ °Ý³³ÇÏ´Â ±¸Á¶Ã¼ ¡¸LPDDSURFACEDESC¡¹ÀÔ´Ï´Ù.
    À§ÀÇ ¼³¸í ´ë·Î ·ÏÇÑ ÈÄ ¼­ÆäÀ̽ºÀÇ Á¤º¸°¡ °Ý³³µË´Ï´Ù.

    lpSurface            ¼­ÆäÀ̽ºÀÇ ¸Þ¸ð¸®»óÀÇ ÁÖ¼Ò
    dwWidth, dwHeight    ¼­ÆäÀ̽ºÀÇ Æø°ú ³ôÀÌ
    lPitch                ¼­ÆäÀ̽ºÀÇ °¡·Î¶óÀÎÀÇ ¹ÙÀÌÆ®ÀÇ ÆøÀÔ´Ï´Ù.(Áß¿ä)
    ddpfPixelFormat        Çȼ¿ Æ÷¸Ë(ÀÌÇÏ ¼³¸í)

    ¶ó°í À§¿Í °°Àº ¸â¹ö¸¦ °¡Áö´Â ±¸Á¶Ã¼¿¡ µ¥ÀÌŸ°¡ ÁÖ¾îÁý´Ï´Ù.

    Á¦3 ÆÄ¶ó¹ÌÅÍ£º
    Àá±Û ¶§ÀÇ µ¿ÀÛÀ» °áÁ¤ÇÏ´Â Ç÷¡±×, ÀÌÇÏÀÇ Ç÷¡±×°¡ ÀÖ½À´Ï´Ù.

    DDLOCK_EVENT
    ÇöÀç, ÀÌ Ç÷¡±×´Â ½ÇÀåµÇÁö ¾Ê¾Ò´Ù.

    DDLOCK_NOSYSLOCK
    °¡´ÉÇϸé Win16Lock ¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù. ÇÁ¶óÀ̸Ӹ® Ç¥¸éÀ» Àá±Û ¶§ ÀÌ Ç÷¡±×´Â ¹«½ÃµÈ´Ù.

    DDLOCK_READONLY
    Àá±×´Â Ç¥¸éÀº Àо±â Àü¿ëÀÎ °ÍÀ» ³ªÅ¸³»´Â Ç÷¡±×.

    DDLOCK_SURFACEMEMORYPTR
    ÁöÁ¤ÇÑ ¹üÀ§ÀÇ ¼±µÎÀÇ À¯È¿ÇÑ ¸Þ¸ð¸®Æ÷ÀÎÅ͸¦ µ¹·ÁÁÖÁö ¾ÊÀ¸¸é ¾È µÇ´Â °ÍÀ» ³ªÅ¸³»´Â Ç÷¡±×.
    ¹üÀ§°¡ ÁöÁ¤µÇÁö ¾Ê´Â °æ¿ì, ¸Ç À§ÀÇ Ç¥¸éÀÇ Æ÷ÀÎÅͰ¡ ¸®ÅϵȴÙ.
    µðÆúÆ®·Î´Â ÀÌ Ç÷¡±×¸¦ ÁöÁ¤ÇÑ´Ù.

    DDLOCK_WAIT
    ºí·Ï Àü¼Û ó¸®ÁßÀ̾ ·ÏÀ» ȹµæÇÒ ¼ö ¾ø´Â °æ¿ì, ÀÌ ¸Þ¼Òµå´Â ·ÏÀ» ȹµæÇÒ ¼ö ÀÖ´ÂÁö
    ¶Ç´Â DDERR_SURFACEBUSY µîÀÇ ´Ù¸¥ ¿¡·¯°¡ »ý±æ ¶§±îÁö ½ÃµµÇÑ´Ù.

    DDLOCK_WRITEONLY
    Àá±×´Â Ç¥¸éÀº ±âÀÔ Àü¿ëÀÎ °ÍÀ» ³ªÅ¸³½´Ù.

    Á¦4 ÆÄ¶ó¹ÌÅÍ£º
    Ç×»ó NULL

    ÇÁ·Î±×·¥Àº ¡¸Blt¡¹¸¦ »ç¿ëÇÏÁö ¾Ê°í À̹ÌÁö Àü¼ÛÀ» ½Ç½ÃÇÕ´Ï´Ù.
    ¡¸Ä³¸¯ÅÍ¡¹¿Í¡¸¹é ¹öÆÛ¡¹¸¦ Àá±×¾î 1 µµÆ®¾¿ ¸Þ¸ð¸®¸¦ µ¿ÀÏÇÏ°Ô ÇØ °¥ °ÍÀÔ´Ï´Ù.
    Àü¼ÛÇØ¿Ã °÷ÀÇ ¼­ÆäÀ̽º´Â 32¡¿32 µµÆ®ÀÔ´Ï´Ù.

    BYTE *pPixel;                 //Çȼ¿(µµÆ®)ÀÇ µ¥ÀÌŸ¸¦ °Ý³³ÇÏ´Â ÁÖ¼Ò¸¦ ¾ò´Â´Ù
    BYTE *pPixels;                 //½ºÇÁ¶óÀÌÆ®¿ë Æ÷ÀÎÅÍ
    DDSURFACEDESC ddsd;     //·ÏÇÒ ¶§ÀÇ µ¥ÀÌŸ¸¦ °Ý³³ÇÏ´Â ±¸Á¶Ã¼
    DDSURFACEDESC ddsds; //·ÏÇÒ ¶§ÀÇ µ¥ÀÌŸ¸¦ °Ý³³ÇÏ´Â ±¸Á¶Ã¼

    ZeroMemory(&ddsd, sizeof(ddsd)); //µ¥ÀÌÅÍÀÇ º¸°ü, À¯Áö±¸Á¶Ã¼¸¦ Á¦·Î Ŭ¸®¾î
    ddsd.dwSize = sizeof(ddsd);                     //±¸Á¶Ã¼ÀÇ »çÀÌÁ °Ç³×ÁØ´Ù
    ZeroMemory(&ddsds, sizeof(ddsds));         //µ¥ÀÌÅÍÀÇ º¸°ü, À¯Áö ±¸Á¶Ã¼¸¦ Á¦·Î Ŭ¸®¾î
    ddsds.dwSize = sizeof(ddsds);     //±¸Á¶Ã¼ÀÇ »çÀÌÁ °Ç³×ÁØ´Ù

    if(BackSurface->Lock(NULL, &ddsd, DDLOCK_WAIT| DDLOCK_SURFACEMEMORYPTR, NULL) == DD_OK)
    {
        if(sprite->Lock(NULL, &ddsds, DDLOCK_WAIT | DDLOCK_SURFACEMEMORYPTR , NULL) == DD_OK)
        {

            pPixel = (BYTE*) ddsd.lpSurface; //ÁÖ¼Ò¸¦ Ãëµæ(Àá±Ù ¹é ¹öÆÛÀÇ)
            pPixels = (BYTE*) ddsds.lpSurface;
            //ÁÖ¼ÒÀÇÃëµæ(Àá±Ù ¿ÀÇÁ¼­ÆäÀ̽ºÀÇ)

            for(int y=0;y<32;y++){
                for(int x=0;x<32;x++){
                    pPixel[y*ddsd.dwWidth+x] =
                    pPixels[(y*ddsds.dwWidth) +x];
                }
            }
        }
        else
            return FALSE;
    }
    else
        return FALSE;

    //¼­ÆäÀ̽ºÀÇ ·ÏÀ» Ǭ´Ù
    if(BackSurface->Unlock(NULL)!=DD_OK)
        return FALSE;
    if(sprite->Unlock(NULL)!=DD_OK)
        return FALSE;

    À§ÀÇ Ã³¸®´Â ¹é ¹öÆÛ¿Í ½ºÇÁ¶óÀÌÆ® ¼­ÆäÀ̽º¸¦ ·ÏÇØ¼­ ½ºÇÁ¶óÀÌÆ®ÀÇ ¸Þ¸ð¸®ÀÇ ³»¿ëÀ» ¹é ¹öÆÛÀÇ ¸Þ¸ð¸® °ø°£¿¡ º¹»çÇϴ ó¸®ÀÔ´Ï´Ù.

    BYTEÇü º¯¼ö¿¡ ¼­ÆäÀ̽ºÀÇ ÁÖ¼Ò¸¦ °Ý³³ÇØ¡¤¡¤¡¤
    pPixel = (BYTE*) ddsd.lpSurface;             //ÁÖ¼Ò¸¦ Ãëµæ(Àá±Ù ¹é ¹öÆÛÀÇ)
    pPixels = (BYTE*) ddsds.lpSurface;

    //ÁÖ¼ÒÀÇ Ãëµæ(Àá±Ù ¿ÀÇÁ¼­ÆäÀ̽ºÀÇ)
    ¸Þ¸ð¸® °ø°£Àº ¿¬¼ÓÇÏ´Â 1 Â÷¿øÀûÀÎ ¸Þ¸ð¸®À̹ǷΡ¤¡¤¡¤¡¤
    for(int y=0;y<32;y++)
    {
        for(int x=0;x<32;x++)
        {
            pPixel[y*ddsd.dwWidth+x] =
            pPixels[(y*ddsds.dwWidth) +x];
        }
    }
    ¶ó°í ÇÏ´Â ½ÄÀ¸·Î ÀÓÀÇÀÇ µµÆ®¿¡ ¾ï¼¼½º ÇÏ´Â °ÍÀÌ °¡´ÉÇÕ´Ï´Ù.

    ¿¹)
    pPixel[10]
    ¶ó¸é, Àá±Ù ¿µ¿ªÀÇ ¼±µÎ µµÆ®ºÎÅÍ 10 µµÆ®Â°ÀÇ ÁÖ¼Ò¸¦ °¡¸®Åµ´Ï´Ù.

    pPixel[y*ddsd.dwWidth+x]
    ¶ó°í ¼Ò½º´Â ±â¼úÇϰí ÀÖ½À´Ï´Ù.

    ¡¸dwWidth ¸â¹ö¡¹´Â ¼­ÆäÀ̽ºÀÇ °¡·Î µµÆ®¼ö¸¦ °¡Áö°í ÀÖ½À´Ï´Ù.
    y¡¡¡¿¡¡¼­ÆäÀ̽º °¡·Î µµÆ®¼ö¡¡£«¡¡x
    ·Î ÇÔÀ¸·Î ÀÓÀÇÀÇ »çÀÌÁ ºÐ¸íÇÏ°Ô Àü¼Û ÇÒ ¼ö ÀÖ½À´Ï´Ù.

    for(int y=0;y<32;y++)
    {
        for(int x=0;x<32;x++)
        {

    µ¡ºÙ¿©¼­ ·çÇÁ°¡ À§¿Í °°ÀÌ µÇ°í ÀÖ´Â °ÍÀº ½ºÇÁ¶óÀÌÆ® ¼­ÆäÀ̽º ÂÊÀÇ »çÀÌÁî°¡ 32¡¿32ÀÎ °Í°ú Àü¼Û ÇÏ°í ½ÍÀº »çÀÌÁî°¡ 32¡¿32À̱⠶§¹®ÀÔ´Ï´Ù.

    ////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////

    ¹ÝÅõ¸í ó¸®

    ¡¸¹ÝÅõ¸í¡¹À̶ó°í ÇÏ´Â ¹¦È­ 󸮴 ¡¸¼­ÆäÀ̽º·Ï¡¹À» ¼­ÆäÀ̽º ¸Þ¸ð¸®¸¦
    ÀÚÀ¯·Ó°Ô Á¶ÀÛÇÏ´Â ÀÏ·Î °¡´ÉÇÏ°Ô µË´Ï´Ù.
    ÀÌ ÀåÀº ÀüÀåÀÇ ÀÀ¿ëÀÔ´Ï´Ù.

    °ÔÀÓ¿¡¼­´Â ¡¸½Çü°¡ ¾ø´Â ¡¤ ¼û¾î ÀÖ´Â ÄÉ·ºÅ͵À» Ç¥ÇöÇÒ ¶§¿¡ »ç¿ëµÉ °Í °°½À´Ï´Ù.
    ¿¹¸¦ µé¸é, À¯·ÉÀ̶óµçÁö¡¤¡¤¡¤¡¤¡¤Ä³¸¯ÅÍÀÇ ÀÜ»óµîÀ¸·Î¼­ »ç¿ëµÇ°í Àֳ׿ä.

    ¾Ë°í¸®Áò
    ±×·³ ¹ÝÅõ¸íÀº ¾î¶² ¾Ë°í¸®ÁòÀϱî?
    ¼­ÆäÀ̽ºÀÇ ·ÏÀÌ µÇ°í ºñµð¿À¸Þ¸ð¸®ÀÇ ÁÖ¼ÒÀÇ ³»¿ë(Çȼ¿ µ¥ÀÌŸ)À»
    ÃëµæÇÒ ¼ö°¡ ÀÖÀ¸¸é °£´ÜÇÕ´Ï´Ù.
    ¹è°æÀÌ µÇ´Â ¡¸¸Ê¼­ÆäÀ̽º¡¹ÀÇ ¡¸Çȼ¿ µ¥ÀÌŸ¡¹¿Í
    °Å±â¿¡ ¹¦È­µÇ´Â ¡¸Äʸ¯Åͼ­ÆäÀ̽º¡¹ÀÇ ¡¸Çȼ¿ µ¥ÀÌŸ¡¹¸¦ ¾ò½À´Ï´Ù.

    À§ÀÇ ±×¸²°ú °°ÀÌ ¡¸¹ÝÅõ¸í ¹¦È­¿¡ ÇÊ¿äÇÑ ¿µ¿ª¡¹ÀÇ Çȼ¿ µ¥ÀÌŸ¸¦ ÃëµæÇÕ´Ï´Ù.
    ¾Æ¸¶ ¡¸RGB¡¹¶ó°í ÇÏ´Â µ¥ÀÌŸ°¡ ±× ÁÖ¼Ò¿¡ °Ý³³µÇ¾î ÀÖÀ» °ÍÀÔ´Ï´Ù.

    (256 ÀÌÇÏÀÇ Ä®¶óÀÇ È­»óÀ» Á¦¿Ü)
    ÃëµæÇÑ ¡¸2°³(ÀÌ»ó)ÀÇ RGB µ¥ÀÌŸ¡¹¸¦ ¹ÙÅÁÀ¸·Î ¡¸°è»ê¡¹À» ÇàÇÑ
    °è»ê °á°úÀÇ ¡¸RGB µ¥ÀÌŸ¡¹¸¦ Àü¼ÛÇÒ ¼­ÆäÀ̽ºÀÇ ÁÖ¼Ò¿¡ Àü¼ÛÇÕ´Ï´Ù.

    50% 50%ÀÎ ¹ÝÅõ¸í

    À̰ÍÀº °¡Àå °£´ÜÇÑ °è»êÀ̹ǷΠÀ̰ÍÀ» ¼Ò°³ÇÕ´Ï´Ù.
    ¡¸¹è°æÀÇ Ä®¶ó¡¹ ¡¸Ä³¸¯ÅÍÀÇ Ä®¶ó¡¹ ¾çÂÊ ¸ðµÎ 50%ÀÇ Ä®¶ó¸¦ È­¸é¿¡ Ç¥ÇöÇÏ´Â °ÍÀÔ´Ï´Ù.

    ¾î´À Çȼ¿ µ¥ÀÌŸÀÇ ³»¿ëÀÌ ÀÌÇÏ¿Í °°¾Ò´Ù°í ÇսôÙ.
    RGB: 125 50 40     ¹è°æÂÊ
    RGB: 10 80 255     ij¸¯ÅÍÂÊ

    ÀÌ µÎ °³ÀÇ µ¥ÀÌŸ¸¦ ´Ü¼øÇÏ°Ô Ç÷¯½ºÇÕ´Ï´Ù.
    RGB: 135 130 255
    ¿À¹ö Ç÷¯±×¸¦ Á¶½É!
    ±×¸®°í ¡¸2¡¹·Î ³ª´©¾î º¾½Ã´Ù.
    RGB: 67 65 127

    °á°ú, Ä®¶ó´Â ÀÌ¿Í °°ÀÌ µÇ¾ú½À´Ï´Ù.
    ÀÀ~ÀÌ·²²¨¶ó »ý°¢ÇÕ´Ï´Ù ºÐ¸í!
    ÇÁ·Î±×·¥¿¡¼­´Â ¡¸50%ºê·£µå¡¹ÀÎ ¹ÝÅõ¸í 󸮸¦ Çϰí ÀÖ½À´Ï´Ù.

    ó¸® ÄÚµå ¼Ò°³
    󸮷Π¿ì¼± ÁÖÀÇÇØ¾ß ÇÒ °ÍÀº Ä®¶ó ¸ðµå¿¡ ÀÇÇØ Çȼ¿ Æ÷¸ËÀÌ ´Ù¸¥ °ÍÀÔ´Ï´Ù.

    16Ä®¶óÀÇ °æ¿ì¡¤¡¤¡¤¡¤256Ä®¶óÀÇ °æ¿ì, 16ºñÆ® Ä®¶óÀÇ °æ¿ì, 32ºñÆ®ÀÇ °æ¿ìµî
    (¿äÁò24ºñÆ®´Â Àß »ç¿ëÀÌ ¾È ÇϹǷΠ»ý·«ÇÕ´Ï´Ù. 3¹ÙÀÌÆ®ÀÌ°í º¹ÀâÇÑ Ã³¸®°¡ µÈ´Ù)
    Ä®¶ó ¸ðµå¿¡ ÀÇÇØ Æ÷¸ËÀÌ ´Ù¸£¹Ç·Î °¢°¢ÀÇ ¸ðµå¿¡ ´ëÇØ¼­ Äڵ尡 ÇÊ¿äÇÏ°Ô µË´Ï´Ù.

    ±× ¶§¹®¿¡ ¿ì¼± ½Ç½ÃÇØ¾ß ÇÏ´Â °ÍÀº ¡¸¼­ÆäÀ̽º¡¹ÀÇ ¡¸Çȼ¿ Æ÷¸Ë¡¹À» ÃëµæÇÏ´Â °ÍÀÔ´Ï´Ù.

    ¡¸Çȼ¿ Æ÷¸Ë¡¹À» ¾òÀ¸·Á¸é ¿ì¼± DDPIXELFORMAT ±¸Á¶Ã¼¸¦ Á¤ÀÇÇÕ´Ï´Ù.
    ÀÌ ±¸Á¶Ã¼´Â DirectDrawSurfaceÀÇ ¡¸GetPixelFormat ¸Þ¼Òµå¡¹¸¦ »ç¿ëÇØ¼­ ¡¸Çȼ¿ Æ÷¸Ë Á¤º¸¡¹¸¦ ¾òÀ» ¶§¿¡ ÇÊ¿äÇÑ ±¸Á¶Ã¼ÀÔ´Ï´Ù.

    (DDPIXELFORMAT ±¸Á¶Ã¼¿¡ Çȼ¿ Æ÷¸Ë Á¤º¸°¡ °Ý³³µË´Ï´Ù. )

    DDPIXELFORMAT     pixel;
    pixel.dwSize=sizeof(pixel);
    if(DrawSurface->GetPixelFormat(&pixel)! =DD_OK) return FALSE;

    À§ÀÇ ÄÚµå¿Í °°ÀÌ ±â¼úÇÏ¸é ¡¸DrawSurface(¼­ÆäÀ̽º)¡¹ÀÇ Çȼ¿ Æ÷¸ËÀ» ¾òÀ» ¼ö°¡ ÀÖ½À´Ï´Ù.

    ¡¸DDPIXELFORMAT ±¸Á¶Ã¼¡¹ÀÇ ¡¸dwRGBBitCount ¸â¹ö¡¹¿¡´Â ¼­ÆäÀ̽ºÀÇ Ä®¶ó ¸ðµå Á¤º¸
    °¡ °Ý³³µË´Ï´Ù.
    (4, 8, 16, 24, ¶Ç´Â 32)ÀÇ °ªÀÌ ÀÌ ¸â¹ö¿¡ °Ý³³µË´Ï´Ù.
    ¿ì¼± ¿©±â¼­ Ä®¶ó ¸ðµå¿¡ ÀÇÇÑ ¹ÝÅõ°úó¸®(¾ËÆÄºí·»µù)ÀÇ Ã³¸®ÀÇ ³ª´©±â¸¦ ½Ç½ÃÇÕ´Ï´Ù.

    if(pixel.dwRGBBitCount == 4) Alpha_4();
    //16Ä®¶óÀÏ ¶§ÀÇ ¾ËÆÄ ºê·£µå ó¸® ÇÔ¼ö

    if(pixel.dwRGBBitCount == 8) Alpha_8();
    //256Ä®¶óÀÏ ¶§ÀÇ ¾ËÆÄ ºê·£µå ó¸® ÇÔ¼ö

    if(pixel.dwRGBBitCount == 16) Alpha_16();
    //16ºñÆ® Ä®¶óÀÏ ¶§ÀÇ ¾ËÆÄ ºê·£µå ó¸® ÇÔ¼ö

    if(pixel.dwRGBBitCount == 24) Alpha_24();
    //24ºñÆ® Ä®¶óÀÏ ¶§ÀÇ ¾ËÆÄ ºê·£µå ó¸® ÇÔ¼ö

    if(pixel.dwRGBBitCount == 32) Alpha_32();
    //32ºñÆ® Ä®¶óÀÏ ¶§ÀÇ ¾ËÆÄ ºê·£µå ó¸® ÇÔ¼ö

    ÀÌ·¸°Ô ³ª´©¾î ó¸®ÇÏ´Â °ÍÀÌ È¿À²ÀûÀÔ´Ï´Ù.
    º¸ÃæÀ¸·Î 256Ä®¶óÀÇ °æ¿ì´Â Ä®¶ó°¡ ÆÈ·¹Æ®¿¡ °ü¸®µÇ±â¶§¹®¿¡ À§¿¡¼­ ¼³¸íÇϰí ÀÖ´Â °Í °°Àº Çȼ¿ÀÇ Ä®¶ó Á¤º¸¸¦ ¾ò¾î ±×°ÍÀ» °è»êÇÑ´Ù¡¤¡¤¡¤¾à°£ ¹æ¹ýÀÌ ´Ù¸¨´Ï´Ù.

    ±×·³, Ä®¶ó ¸ðµå¿¡ ÀÇÇÑ Ã³¸® ³ª´©±â·Î ¡¸16ºñÆ® ¸ðµå 󸮡¹·Î ÁøÇàµÇ¾ú´Ù°í ÇսôÙ.

    1 Çȼ¿(1 µµÆ®)À» Ç¥ÇöÇϴµ¥ ¡¸16ºñÆ®¡¹ÀÇ ¸Þ¸ð¸®¸¦ »ç¿ëÇØ¼­.
    ±× Áß¿¡ ¡¸R¡¤G¡¤B¡¹ÀÇ ¿ä¼Ò°¡ °Ý³³µÇ°í ÀÖ´Â °ÍÀÔ´Ï´Ù.

    ¾ËÆÄ ºê·£µåÀ̱⠶§¹®¿¡ °è»êÇÏ·Á¸é¡¤¡¤¡¤¡¤16ºñÆ® ¾È¿¡¼­ ¡¸R¡¤G¡¤B¡¹¸¦ °³º°ÀûÀ¸·Î »Ì¾Æ³¾
    Çʿ䰡 ÀÖ½À´Ï´Ù.

    ±× ¶§¹®¿¡¡¸¸¶½ºÅ© ÇÁ·Î¼¼½Ì¡¹À̶ó°í ÇÏ´Â ºñÆ® ´ÜÀ§°¡ Àִ ó¸®¸¦ ½Ç½ÃÇÕ´Ï´Ù.
    °Å±â¿¡ ÇÊ¿äÇÑ¡¸¸¶½ºÅ©¡¹¸¦ ¡¸DDPIXELFORMAT ±¸Á¶Ã¼¡¹ÀÇ ¡¸lBBitMask¡¹ ¡¸lGBitMask¡¹ ¡¸lRBitMask¡¹¸â¹ö´Â °¡Áö°í ÀÖ½À´Ï´Ù.

    ¸¶½ºÅ© ÇÁ·Î¼¼½ÌÀÇ ÇϳªÀÇ ¿¹
    ¾î´À ¼­ÆäÀ̽ºÀÇ Çȼ¿ Æ÷¸ËÀÌ ÀÌÇÏÀÇ ±×¸²´ë·Î¿´´Ù°í ÇսôÙ.
    ±× Æ÷¸ËÀÎ Çȼ¿ÀÌ ÀÌÇÏÀÇ °°Àº Ä®¶ó µ¥ÀÌŸ¸¦ °¡Áö°í ÀÖ¾ú´Ù°í ÇÕ´Ï´Ù.

    ÀÌ ¶§, G(green)ÀÇ Ä®¶ó °ª¸¸À» ¾òÀ¸·Á¸é? ¾î¶»°Ô Çϸé ÁÁÀ»±î¿ä?
    ¿ª½Ã Á¦ÀÏ ÁÁ´Ù°í »ý°¢µÇ´Â °ÍÀÌ ¡¸¸¶½ºÅ© ÇÁ·Î¼¼½Ì¡¹ÀÔ´Ï´Ù.
    ¡¸¸¶½ºÅ© ÇÁ·Î¼¼½Ì¡¹Àº ºñÆ® ´ÜÀ§·Î ¡¸AND¡¹ ¡¸OR¡¹ ¡¸XOR¡¹µîÀ» ÃëÇØ ÀÓÀÇÀÇ À§Ä¡ÀÇ
    ºñÆ®¸¸À» Á¶ÀÛÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.

    ÀÌ °æ¿ì,¡¸ÀÖ´Â ºÎºÐ¸¸À» ³²±ä´Ù¡¹¶ó´Â ó¸®À̹ǷÎ.
    ¡¸GetPixelFormat ¸Þ¼Òµå¡¹´Â ¡¸GÁ¤º¸¡¹ÀÇ ºñÆ® À§¿¡¸¸ ¡¸1¡¹·Î ¡¸¸¶½ºÅ©¡¹¸¦
    ÁغñÇϰí ÀÖÀ» °ÍÀÔ´Ï´Ù.

    ÁغñµÈ ¸¶½ºÅ© µ¥ÀÌŸ¿Í Ä®¶ó µ¥ÀÌŸ¸¦ ¡¸AND¡¹ÇÏ¸é ¡¸Gµ¥ÀÌŸ¡¹¸¸ÀÌ ºñÆ®¿¡ ³²½À´Ï´Ù.

    ¡¸AND¡¹´Â ¾çÂÊ ¸ðµÎÀÇ ºñÆ®°¡ ¡¸1¡¹À̾úÀ» °æ¿ì, ºñÆ®ÀÇ °á°ú°¡¡¸1¡¹ÀÌ µÈ´Ù.
    ±× Àܴ̿ ¡¸0¡¹(true, falseÀÇ °³³ä)

    GreenÀÇ Ä®¶ó µ¥ÀÌŸ¸¸ ºñÆ®°¡ ÀÖ½À´Ï´Ù.
    ±× ÈÄÀÇ Ã³¸®·Î¼­ ºñÆ® ½¬ÇÁÆ®µîÀ» ½Ç½ÃÇÏ¸é ¿Ã¹Ù¸¥ °ªÀ¸·Î ÇØ¼­ Ä®¶ó °ªÀ» ¾òÀ» ¼ö°¡ ÀÖ½À´Ï´Ù.

    DWORD Rmask;
    DWORD Bmask;
    DWORD Gmask;

    Rmask=pixel.dwRBitMask;
    Bmask=pixel.dwBBitMask;
    Gmask=pixel.dwGBitMask;

    ¸¶½ºÅ© µ¥ÀÌŸ¸¦ º¸°üÇÑ´Ù¸é º¸°üÇØ µÓ½Ã´Ù.

    ¡á󸮿¡ ÇÊ¿äÇÑ º¯¼ö¸¦ ÁغñÇÑ´Ù
    WORD     *LpBg;     //¹è°æÀÇ ¸Ê(¹é ¹öÆÛ)ÀÇ Æ÷ÀÎÅÍ
    WORD     *LpCha;    //¹è°æ¿¡ °ÅµìÇÏ´Â Äɸ¯ÅÍ ¼­ÆäÀ̽ºÀÇ Æ÷ÀÎÅÍ

    À̰ÍÀº ¼­ÆäÀ̽º¸¦ ¡¸·Ï¡¹ÇÒ ¶§(Àá±Û ¶§)¿¡ ÇÊ¿äÇÕ´Ï´Ù.
    Çȼ¿ÀÇ Ä®¶ó Á¤º¸¸¦ ¾ò±â À§Çصµ ´ë»ó ¼­ÆäÀ̽ºÀÇ ÁÖ¼Ò°¡ ÇÊ¿äÇϱ⠶§¹®ÀÔ´Ï´Ù.
    ÀÌ Æ÷ÀÎÅÍ¿¡´Â ¡¸·Ï¡¹ÇÒ ¶§¿¡ À̹ÌÁö µ¥ÀÌŸÀÇ ¼±µÎ ÁÖ¼Ò°¡ °Ý³³µË´Ï´Ù.

    BYTE        *Chatop;
    BYTE        *Bgtop;
    »ùÇÿ¡¼­´Â 32¡¿32ÀÇ ¹üÀ§¸¦ ¾ËÆÄ ó¸®ÇÕ´Ï´Ù.

    ±× ¡¸ÇࡹÀÇ ¼±µÎ Çȼ¿ÀÇ ÁÖ¼Ò¸¦ º¸°üÇÏ´Â º¯¼öÀÔ´Ï´Ù.

    DDSURFACEDESC    ddsd;     //·ÏÇÒ ¶§ÀÇ µ¥ÀÌŸ¸¦ °Ý³³ÇÏ´Â ±¸Á¶Ã¼
    DDSURFACEDESC    ddsds;     //·ÏÇÒ ¶§ÀÇ µ¥ÀÌŸ¸¦ °Ý³³ÇÏ´Â ±¸Á¶Ã¼

    ¼­ÆäÀ̽º¸¦ Àá±×·Á¸é, ¡¸Lock ¸Þ¼Òµå¡¹¸¦ »ç¿ëÇÕ´Ï´Ù.
    ±× ¶§, ÆÄ¶ó¸ÞŸ·Î¼­ ¡¸DDSURFACEDESC¡¹°¡ ÇÊ¿äÇÏ°Ô µÇ¹Ç·Î ÁغñÇÕ´Ï´Ù.

    DWORD     red_1, red_2, red_3
    DWORD     green_1, green_2, green_3;
    DWORD     blue_1, blue_2, blue_3;

    ºñÆ®¿­ °è»ê¿¡ »ç¿ëÇÏ´Â º¯¼öÀÔ´Ï´Ù.

    ***_1¿¡´Â¡¤¡¤¡¤¹è°æÂÊ Çȼ¿ÀÇ Ä®¶ó Á¤º¸ÀÇ ºñÆ®¿­
    ***_2¿¡´Â¡¤¡¤¡¤¹¦È­ÂÊ Çȼ¿ÀÇ Ä®¶ó Á¤º¸ÀÇ ºñÆ®¿­
    ***_3¿¡´Â¡¤¡¤¡¤°è»ê ó¸® ÈÄÀÇ Ä®¶ó Á¤º¸ ºñÆ®¿­À» °Ý³³ ÇÕ´Ï´Ù.

    ó¸®

    --------------------------------------------------------------------------------

    A

    if(BackSurface->Lock(NULL, &ddsd, DDLOCK_WAIT |
                        DDLOCK_SURFACEMEMORYPTR, NULL) == DD_OK)
    {

        if(sprite->Lock(NULL, &ddsds, DDLOCK_WAIT |
                DDLOCK_SURFACEMEMORYPTR , NULL) == DD_OK)
        {
            //¾ç¼­ÆäÀ̽º¸¦ Àá±Ù´Ù

            LpBg = (WORD*) ddsd.lpSurface;
            //ÁÖ¼Ò¸¦ Ãëµæ(Àá±Ù ¹é ¹öÆÛ)

            LpCha = (WORD*) ddsds.lpSurface;
            //ÁÖ¼Ò¸¦ Ãëµæ(Àá±Ù ¿ÀÇÁ¼­ÆäÀ̽º)

            // Ppixel¿¡´Â Àá±Ù ¼­ÆäÀ̽ºÀÇ Á»ó ù¹øÂ°ÀÇ
            // µµÆ® Á¤º¸ÀÇ ÁÖ¼Ò°¡ µé¾î°£´Ù

            for(int y=0;y<32;y++)
            {
                Chatop     = (BYTE*) LpCha;
                Bgtop     = (BYTE*) LpBg;

                for(int x=0;x<32;x++)
                {
                    //ij¸¯ÅÍ »çÀÌÁî°¡ 32*32(·çÇÁ)
                    //¾ËÆÄ ºê·£µå ó¸®
                    red_1 = *LpBg & Rmask;
                    red_2 = *LpCha & Rmask;
                    red_3 = ((red_1 + red_2)/2);

                    blue_1 = *LpBg & Bmask;
                    blue_2 = *LpCha & Bmask;
                    blue_3 = ((blue_1 + blue_2)/2);

                    green_1 = *LpBg & Gmask;
                    green_2 = *LpCha & Gmask;
                    green_3 = ((green_1 + green_2)/2);

                    *LpBg = (WORD)((red_3 & Rmask)|
                    (green_3 & Gmask)|(blue_3 & Bmask));

                    LpBg++;
                    LpCha++;

                    //¸¶Áö¸·
                }

                LpBg = (WORD*)(Bgtop+ddsd.lPitch);
                LpCha = (WORD*)(Chatop+ddsds.lPitch);
            }
        }
        else
            return FALSE;
    }
    else
        return FALSE;

    //¼­ÆäÀ̽ºÀÇ Unlock
    if(BackSurface->Unlock(NULL)! =DD_OK)    return FALSE;
    if(sprite->Unlock(NULL)! =DD_OK)         return FALSE;

    ¾ËÆÄ ºê·£µåÀÇ Ã³¸®´Â À§¿¡ ÀÖ´Â ´ë·ÎÀÔ´Ï´Ù.
    ¼­ÆäÀ̽º¸¦ Àá±×°í ±× ¼±µÎ Çȼ¿ÀÇ ÁÖ¼Ò¸¦ ¾ò´Â ºÎºÐÀº ÀüÀå°ú °°¾Æ¼­ »ý·«ÇÕ´Ï´Ù.
    ·çÇÁ°¡ À§¿Í °°ÀÌ µÇ¾î ÀÖ´Â °ÍÀº 32¡¿32 Çȼ¿ÀÇ Äɸ¯Å͸¦ ¾ËÆÄ ó¸®Çϱ⠶§¹®ÀÔ´Ï´Ù

    for(int y=0;y<32;y++)
    {
        Chatop = (BYTE*) LpCha;
        Bgtop = (BYTE*) LpBg;

        ¿ì¼± À§ÀÇ Ã³¸®ÀÔ´Ï´Ù.
        YÃàÀÇ ·çÇÁ°¡ ó¸®ÀÇ Á¾·á Á¶°ÇÀÌ µÇ¾î ÀÖ½À´Ï´Ù.

        1¿­ ¸¶´Ù
        Chatop = (BYTE*) LpCha;
        Bgtop     = (BYTE*) LpBg;
        Çϴ ó¸®¸¦ ¹Ýº¹ÇÏ´Â °ÍÀÌ µË´Ï´Ù.

        ·çÇÁ¿¡ µé¾î°¡±â Àü¿¡ LpCha¡¤LpBgÀÇ Æ÷ÀÎÅÍ º¯¼ö(WORDÇü)¿¡´Â ¼­ÆäÀ̽º¸¦ ·ÏÇÒ ¶§ÀÇ ¼±µÎ
        Çȼ¿ÀÇ ÁÖ¼Ò°¡ ´ëÀԵǾî ÀÖ½À´Ï´Ù.
        ·çÇÁ ó¸®ÀÇ 1ȸ°¿¡ ¡¸Chatop¡¤Bgtop¡¹¿¡´Â ¼±µÎ Çȼ¿ ÁÖ¼Ò°¡ °Ý³³µË´Ï´Ù.
        ±× ÈÄ LpCha¡¤LpBg´Â ¡¸++¿¬»êÀÚ¡¹·Î ´ÙÀ½ ÁÖ¼Ò·Î ³»¿ëÀÌ º¯È­ÇÕ´Ï´Ù.

        ¡¸Chatop¡¤Bgtop¡¹¿¡´Â °¢ ¿­ÀÇ ¼±µÎ Çȼ¿ ÁÖ¼Ò°¡ ´ëÀÔµÇ¾î °£´Ù

        Çȼ¿ÀÇ ¹ÝÅõ¸í ó¸®
        //¾ËÆÄ ºê·£µå ó¸®
        red_1 = *LpBg & Rmask;
        red_2 = *LpCha & Rmask;
        red_3 = ((red_1 + red_2)/2);

        blue_1 = *LpBg & Bmask;
        blue_2 = *LpCha & Bmask;
        blue_3 = ((blue_1 + blue_2)/2);

        green_1 = *LpBg & Gmask;
        green_2 = *LpCha & Gmask;
        green_3 = ((green_1 + green_2)/2);

        ·çÇÁ³»¿¡¼­ À§ÀÇ Ã³¸®¸¦ ¹Ýº¹ÇØ ½Ç½ÃÇϵµ·Ï µÇ¾î ÀÖ½À´Ï´Ù.
        À̰ÍÀÌ ¹ÝÅõ¸í ó¸®ÀÇ Áß½ÉÀ̶ó°í ÇÒ ¼ö ÀÖ´Â ¿¬»ê ó¸®ÀÔ´Ï´Ù.

        À§¿¡¼­µµ ¼³¸íÇϰí ÀÖ´Â °Íó·³, ¸¶½ºÅ©¿Í Çȼ¿ÀÇ ºñÆ® ¿­À» ¡¸AND¡¹¿¬»êÇØ¼­ Ä®¶óÁ¤º¸¸¸À» »Ì¾Æ³»¼­ ¡¸***_*¡¹ÀÇ º¯¼ö·Î À¯ÁöÇϰí ÀÖ´Â °ÍÀÔ´Ï´Ù.

        ***_1¡¡ÀÇ Ã³¸®¿¡´Â ¹è°æ(¹é ¹öÆÛ)ÀÇ ´ëÀÀ Çȼ¿ÀÇ Ä®¶óÁ¤º¸¸¦ ¾ËÆÄ ó¸®
        ***_2¡¡ÀÇ Ã³¸®¿¡¼­´Â ½ºÇÁ¶óÀÌÆ®(ij¸¯ÅÍ)ÀÇ ´ëÀÀ Çȼ¿ÀÇ Ä®¶óÁ¤º¸¸¦ ¾ËÆÄ ó¸®
        ***_3¡¡ÀÇ Ã³¸®¿¡¼­´Â 1°ú 2·Î ¾òÀ» ¼ö ÀÖ´ø Ä®¶ó µ¥ÀÌÅ͸¦ ´õÇØ¼­ 2·Î ³ª´©°í ÀÖ½À´Ï´Ù.

        2·Î ³ª´©¸é 50%Åõ¸íµµÀÇ ¾ËÆÄ ºê·£µå°¡ µË´Ï´Ù.
        ¹é ¹öÆÛ¡¤½ºÇÁ¶óÀÌÆ®ÀÇ ¾ç¼­ÆäÀ̽ºÀÇ Çȼ¿Ä®¶ó¿ä¼Ò¸¦ ¹Ý¹ÝÀ̶ó°í ÇÏ´Â ¿¬»ê °á°ú°¡ µÇ±â ¶§¹®ÀÔ´Ï´Ù

        *LpBg = (WORD)((red_3 & Rmask) | (green_3 & Gmask) | (blue_3 & Bmask));
        LpBg++;
        LpCha++;

        ÀÌ Ã³¸®´Â R¡¤G¡¤BÀÇ Ä®¶óÀÇ ¿ä¼Ò¸¶´Ù °è»êµÈ Ä®¶óµ¥ÀÌŸ¸¦ Çϳª¿¡ ¸ðÀ¸°í
        ¡¸LpBg¡¹(¹é ¹öÆÛ¿¡ÀÇ Æ÷ÀÎÅÍ)°¡ °¡¸®Å°´Â ÁÖ¼Ò¿¡ µ¥ÀÌŸ¸¦ Àü¼Û ÇÕ´Ï´Ù.

        ¿©±â±îÁöÀÇ Ã³¸®·Î ¾ËÆÄ ºê·£µåÀÇ 1 µµÆ®ÀÇ Ã³¸®°¡ ³¡³­ °ÍÀÌ µË´Ï´Ù.
        ´ÙÀ½ µµÆ®¿¡ 󸮸¦ ¿Å±â±â À§Çؼ­ ¡¸LpBg ¡¤ LpCha¡¹ÀÇ Æ÷ÀÎÅÍ º¯¼ö¿¡ ¡¸++¡¹ÇÕ´Ï´Ù.

        ÀÌ·¸°Ô ÇÔÀ¸·Î Æ÷ÀÎÅÍ º¯¼ö´Â 1 ÁÖ¼Ò·Î ³ª¾Æ°©´Ï´Ù. (¿À¸¥ÂÊÀÇ µµÆ®¿¡)
        LpBg = (WORD*)(Bgtop + ddsd.lPitch);
        LpCha = (WORD*)(Chatop + ddsds.lPitch);
    }

    ÀÌ Ã³¸®´Â ÀÏÇà(¿· 32°³)ÀÇ Ã³¸®°¡ ³¡³µÀ» ¶§¿¡ ½ÇÇàµÇ´Â ó¸®ÀÔ´Ï´Ù.
    À̰ÍÀº ¡¸LpBg ¡¤ LpCha¡¹Æ÷ÀÎÅÍ º¯¼ö¿¡ ´ÙÀ½ÀÇ ÇàÀÇ ÁÖ¼Ò¸¦ °Ç³×ÁÖ°í ÀÖ½À´Ï´Ù.
    À̰ÍÀÌ ¾øÀ¸¸é »ç°¢Çü¿¡ Àü¼Û µÇÁö ¾Ê½À´Ï´Ù.

    ddsd.lPitch¿¡´Â ±× ¼­ÆäÀ̽ºÀÇ °¡·ÎÀÇ Çȼ¿¼ö°¡ °Ý³³µÇ°í ÀÖ½À´Ï´Ù.

    ¡¸Bgtop ¡¤ Chatop¡¹¿¡ ±× °ªÀ» ´õÇϸ顤¡¤¡¤¡¤°á°ú, ÁÖ¼Ò´Â ´ÙÀ½ÀÇ ÇàÀÇ ¼±µÎ¿Í µ¿ÀÏÇØÁý´Ï´Ù.

    »ùÇÿ¡¼­´Â, 32¡¿32ÀÇ ½ºÇÁ¶óÀÌÆ® À̹ÌÁö¸¦ ¹é ¹öÆÛÀÇ 0, 0 ÁÂÇ¥¿¡ Àü¼ÛÇϰí ÀÖ½À´Ï´Ù.
    Åõ°ú 󸮸¦ ÇÏÁö ¾Ê±â ¶§¹®¿¡ ½ºÇÁ¶óÀÌÆ®ÀÇ ¹è°æµµ ¹ÝÅõ¸í µÇ°í ÀÖ½À´Ï´Ù.


    ////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////

    ½ºÇÁ¶óÀÌÆ® ¹ÝÅõ¸í ó¸®
    Àü¹øÀÇ ¹ÝÅõ¸í 󸮿¡¼­´Â ij¸¯ÅÍ¿¡¼­ Åõ¸íÇÏ°Ô ¸¸µé°í ½ÍÀº »öÀ» ¹ÝÅõ¸í ó¸®Çß½À´Ï´Ù.
    À̹ø¿¡´Â ±× Á¡À» ÇØ¼ÒÇØ ¡¸½ºÇÁ¶óÀÌÆ®¿ë ¹ÝÅõ¸í ¹¦È­¡¹¸¦ ÇÕ´Ï´Ù.

    Àü¹ø¿¡´Â À§ÀÇ Ä³¸¯ÅÍ À̹ÌÁöÀÇ ÇÎÅ©ÀÇ ºÎºÐ±îÁö ¹¦È­ µÇ¾ú½À´Ï´Ù.

    ¡á¾Ë°í¸®Áò

    ±âº»ÀûÀÎ ºÎºÐÀº Àü¹ø°ú Å« Â÷ÀÌ´Â ¾ø½À´Ï´Ù.
    Ãß°¡ 󸮷μ­ ¼­ÆäÀ̽ºÀÇ Æ÷ÀÎÅͰ¡ °¡¸®Å°´Â Çȼ¿ÀÇ »öÀÌ ¡¸ÇÎÅ©¡¹¶ó¸é
    ±× »öÀ» ¾ËÆÄ ºê·£µå ó¸®ÀÇ ´ë»óÀ¸·Î ÇÏÁö ¾Ê°í, ¡¸¹é ¹öÆÛ(¹è°æ)¡¹ÀÇ »öÀ»
    100%¹Ý¿µ½Ãŵ´Ï´Ù.

    ¡¸Åõ°ú ½ÃŰ´Â °ª°ú ºñ±³¡¹Çϴ ó¸®°¡ Ãß°¡ µÇ¹Ç·Î ÀÌ ÂÊÀÇ ½ºÇÁ¶óÀÌÆ® ¾ËÆÄ ºê·£µå°¡
    ¾à°£ ¹«°Å¿î 󸮰¡ µË´Ï´Ù.

    ¡áÅõ°ú »öÀÇ Ä®¶ó °ª(ºñÆ® ¿­)
    À̰ÍÀ» °áÁ¤ÇÏ·Á¸é ´Ù¾çÇÏ°Ô ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù.
    ÀϹÝÀûÀÎ °ÍÀÌ ¡¸Black¡¹À» Åõ°ú»öÀ¸·Î ÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù(¹°·Ð ¹ÝµíÀÌ BlackÀÏ ÇÊ¿ä´Â ¾ø´Ù).
    ±× ÀÌÀ¯´Â ¾Æ¸¶µµ ¡¸Black¡¹ÀÇ Ä®¶ó °ªÀº ¡¸00000000...¡¹À̹ǷΠ°áÁ¤ÇÏ´Â °ÍÀÌ °£´ÜÇÕ´Ï´Ù.
    ÀÌ °æ¿ì´Â ´ç¿¬È÷ ½ºÇÁ¶óÀÌÆ® ±× ÀÚü¿¡ ¡¸00000...BlackÀ» »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù¡¹

    ÀÌ ¼Ò½º¿¡¼­´Â Àü¼ÛÇÏ´Â ½ºÇÁ¶óÀÌÆ®ÀÇ ¹üÀ§·Î¡¤¡¤¡¤Á¦ÀÏ Á»ó Çȼ¿·Î »ç¿ëµÇ°í ÀÖ´Â »öÀ»
    ¸¶½ºÅ© Ä®¶ó·Î ÇÕ´Ï´Ù.

    ÀÌ °æ¿ì´Â ij¸¯ÅÍ À̹ÌÁöÀÇ Á¦ÀÏ Á»óÀÇ Çȼ¿Àº ¸¶½ºÅ© Ä®¶ó¿©¾ß ÇÏ´Â Á¦¾àÀÌ
    µû¸¨´Ï´Ù. ¡¤¡¤ÇÏÁö¸¸, °Å±â±îÁö Äɸ¯ÅÍ À̹ÌÁö°¡ µÉ ÀÏÀº Àû±â ¶§¹®¿¡ ¿ì¼± ±¦Âú½À´Ï´Ù.

    ¡áÁ¦ÀÏ Á»ó Çȼ¿ÀÇ Ä®¶ó °ªÀ» ¾òÀ¸·Á¸é?
    À̰ÍÀº °£´ÜÇÕ´Ï´Ù.
    ¼­ÆäÀ̽º¸¦ Àá±×°í ¡¸DDSURFACEDESC ±¸Á¶Ã¼ lpSurface ¸â¹ö¡¹ÀÇ ÁÖ¼ÒÀÇ ³»¿ëÀ» ÃëµæÇÕ´Ï´Ù.

    DDSURFACEDESC ddsd;
    memset(&ddsd, 0, sizeof(ddsd));
    ddsd.dwSize = sizeof(ddsd);

    //¼­ÆäÀ̽º¸¦ Àá±Þ´Ï´Ù
    surface->Lock(NULL, &ddsd, DDLOCK_WAIT |
    DDLOCK_SURFACEMEMORYPTR, NULL);

    char     *p=(char *) ddsd.lpSurface; //Á»ó°¢ÀÇ »öÀ» Åõ°ú »öÀ¸·Î ÇÕ´Ï´Ù
    DWORD transparent=*(DWORD *) p;

    ¼Ò½º´Â ÀÌ·¸°Ô µÇ°ÚÁö¿ä.

    ¡áó¸®ÀÇ È帧
    LPBgp     =(WORD*) ddsds.lpSurface//Á»ó°¢ÀÇ »öÀ» Åõ°ú»öÀ¸·Î ÇÕ´Ï´Ù

    for(int y=0;y<32;y++)
    {
        Chatop = (BYTE*) LpCha;
        Bgtop = (BYTE*) LpBg;

        for(int x=0;x<32;x++){//ij¸¯ÅÍ »çÀÌÁî°¡ 32*32À̹ǷΠ±× ·çÇÁ

        if(*LPBgp != *LpCha)
        {
            //¾ËÆÄ ºê·£µå ó¸®
            red_1 = *LpBg & Rmask;
            red_2 = *LpCha & Rmask;
            red_3 = ((red_1 + red_2)/2);

            blue_1 = *LpBg & Bmask;
            blue_2 = *LpCha & Bmask;
            blue_3 = ((blue_1 + blue_2)/2);

            green_1 = *LpBg & Gmask;
            green_2 = *LpCha & Gmask;
            green_3 = ((green_1 + green_2)/2);

            *LpBg = (WORD)((red_3 & Rmask) |
            (green_3 & Gmask)|(blue_3 & Bmask));
        }

        LpBg++;
        LpCha++;
        //¸¶Áö¸·
    }

    LpBg = (WORD*)(Bgtop+ddsd.lPitch);
    LpCha = (WORD*)(Chatop+ddsds.lPitch);

    }

    Àû»ö ¹®ÀÚÀÇ ºÎºÐÀÌ Ãß°¡µÇ¾ú½À´Ï´Ù.

    if(transparent != *LpCha)
    {

    ÀÇ Ã³¸®´Â Åõ°ú ÇÏ´Â Ä®¶ó °ª(transparent)°ú ij¸¯ÅÍÀÇ Çȼ¿ Ä®¶ó °ªÀ»
    ºñ±³Çؼ­ ¡¸°°Áö ¾ÊÀ» ¶§¡¹if¾ÈÀ» ó¸®ÇÕ´Ï´Ù.
    µ¿ÀÏÇÒ ¶§´Â ±×´ë·Î Æ÷ÀÎÅͰ¡ ³ª°©´Ï´Ù.
    °á·ÐÀûÀ¸·Î ¹é ¹öÆÛ´Â ¾Æ¹«°Íµµ º¯È­°¡ ¾ø°í ±× ºÎºÐÀº Åõ°ú µÈ ÇüŰ¡ µË´Ï´Ù.

    ÄÚµå
    ³»¿ëÀº ÀüȸÀÇ ¼Ò½ºÀÇ ¾ËÆÄ ºê·£µå ÇÔ¼ö¿Í ¾Æ·¡ÀÇ Ã³¸®¸¦ ¹Ù²ã ÁØ´Ù¸é ¾Æ¹«·± ¹®Á¦°¡ ¾øÀ» °ÍÀÔ´Ï´Ù.

    //ÀÌ ÇÔ¼ö´Â ¼­ÆäÀ̽º¸¦ Àá±Ù(·Ï) ¸Þ¸ð¸®¸¦ Çϳª¾¿ ÂüÁ¶Çϸ鼭
    //´ë»óÀÇ ¼­ÆäÀ̽º¿¡ ¹¦È­ ÇØ ³ª°£´Ù.
    //Blt¸¦ »ç¿ëÇÏ´Â ¹æ¹ý°ú ºñ±³Çϸ顤¡¤¡¤½ºÇǵå´Â ºÒ¸í

    BOOL LockBlt(void)
    {
        DWORD Rmask//¸¶½ºÅ© µ¥ÀÌÅÍ
        DWORD Bmask;
        DWORD Gmask;
        DDPIXELFORMAT     pixel;

        WORD     *LpBg//¹è°æÀÇ ¸Ê(¹é ¹öÆÛ)ÀÇ Æ÷ÀÎÅÍ
        WORD     *LpCha//¹è°æ¿¡ °ÅµìÇϴ ij¸¯ÅÍ ¼­ÆäÀ̽ºÀÇ Æ÷ÀÎÅÍ
        BYTE        *Chatop//Åõ°ú ´ë»óÀÇ Ã¹¹øÂ° Çȼ¿ÀÇ ÁÖ¼Ò

        BYTE        *Bgtop;
        WORD     *LPBgp;

        DDSURFACEDESC2 ddsd;     //lockÇÒ ¶§ÀÇ µ¥ÀÌÅ͸¦ °Ý³³ÇÏ´Â ±¸Á¶Ã¼
        DDSURFACEDESC2 ddsds;     //lockÇÒ ¶§ÀÇ µ¥ÀÌÅ͸¦ °Ý³³ÇÏ´Â ±¸Á¶Ã¼

        DWORD     red_1, red_2, red_3; //red
        DWORD     green_1, green_2, green_3;        //green
        DWORD     blue_1, blue_2, blue_3;             //blue

        ZeroMemory(&ddsd, sizeof(ddsd));         //µ¥ÀÌÅÍ ±¸Á¶Ã¼¸¦ Á¦·Î Ŭ¸®¾î
        ddsd.dwSize = sizeof(ddsd);                    //±¸Á¶Ã¼ÀÇ »çÀÌÁ °Ç³×ÁØ´Ù

        ZeroMemory(&ddsds, sizeof(ddsds));        //µ¥ÀÌÅÍ ±¸Á¶Ã¼¸¦ Á¦·Î Ŭ¸®¾î
        ddsds.dwSize = sizeof(ddsds); //±¸Á¶Ã¼ÀÇ »çÀÌÁ °Ç³×ÁØ´Ù

        pixel.dwSize=sizeof(pixel);
        if(sprite->GetPixelFormat(&pixel)!=DD_OK) return FALSE;

        Rmask=pixel.dwRBitMask;
        Bmask=pixel.dwBBitMask;
        Gmask=pixel.dwGBitMask;
        //Ãʱâ ó¸®

        if(pixel.dwRGBBitCount!=16) return false;
        //Ä®¶ó ¸ðµå°¡ 16ºñÆ® ÀÌ¿ÜÀÏ ¶§ 󸮸¦ ÁßÁö

        if(BackSurface->Lock(NULL, &ddsd, DDLOCK_WAIT | DDLOCK_SURFACEMEMORYPTR, NULL) == DD_OK)
        {
            if(sprite->Lock(NULL, &ddsds, DDLOCK_WAIT | DDLOCK_SURFACEMEMORYPTR , NULL) == DD_OK)
            {
                //¾ç¼­ÆäÀ̽º¸¦ Àá±Ù´Ù

                LpBg = (WORD*) ddsd.lpSurface;
                //ÁÖ¼Ò¸¦ Ãëµæ(Àá±Ù ¹é ¹öÆÛ)
                LpCha = (WORD*) ddsds.lpSurface;
                //ÁÖ¼Ò¸¦ Ãëµæ(Àá±Ù ¿ÀÇÁ¼­ÆäÀ̽º)


                LPBgp     =(WORD*) ddsds.lpSurface;
                //Á»ó°¢ÀÇ »öÀ» Åõ°ú»öÀ¸·Î

                //DWORD *transparent=(DWORD *) p;
                //Ppixel¿¡´Â Àá±Ù ¼­ÆäÀ̽ºÀÇ Á»óù¹øÂ° µµÆ®ÀÇ Á¤º¸¿¡ ÁÖ¼Ò°¡
                // µé¾î°£´Ù

                for(int y=0;y<32;y++)
                {
                    Chatop             = (BYTE*) LpCha;
                    Bgtop = (BYTE*) LpBg;

                    for(int x=0;x<32;x++)
                    {
                        //ij¸¯ÅÍ »çÀÌÁî°¡ 32*32À̹ǷΠ±× ·çÇÁ
                        if(*LPBgp != *LpCha)
                        {
                            //¾ËÆÄ ºê·£µå ó¸®

                            red_1 = *LpBg & Rmask;
                            red_2 = *LpCha & Rmask;
                            red_3 = ((red_1 + red_2)/2);

                            blue_1 = *LpBg & Bmask;
                            blue_2 = *LpCha & Bmask;
                            blue_3 = ((blue_1 + blue_2)/2);

                            green_1 = *LpBg & Gmask;
                            green_2 = *LpCha & Gmask;
                            green_3 = ((green_1 + green_2)/2);

                            *LpBg = (WORD)((red_3 & Rmask) | (green_3 & Gmask)|(blue_3 & Bmask));
                        }

                        LpBg++;
                        LpCha++;
                    }
                    
                    LpBg = (WORD*)(Bgtop+ddsd.lPitch);
                    LpCha = (WORD*)(Chatop+ddsds.lPitch);
                }

            }
            else
                return FALSE;
        }
        else
            return FALSE;

        //¼­ÆäÀ̽ºÀÇ Unlock
        if(BackSurface->Unlock(NULL)!=DD_OK)    return FALSE;
        if(sprite->Unlock(NULL)!=DD_OK)            return FALSE;

        return TRUE;
    }


    Comment


    ÀÔ·ÂÇÏ3 1283577919



    Locations of visitors to this page