¡Ô ÀÏ¹Ý °­ÁÂ

 ¡å ÄÚµå ³»ÀÇ ÁÖ¼®¿¡ ´ëÇÑ ´Ü»ó

N/A

N/A

ÇÁ·Î±×·¥ÀÇ ÁÖ¼®¿¡ ´ëÇÑ ³ªÀÇ »ý°¢Àº ÀÌ·¸´Ù.

³ª´Â ¿ø·¡ ÁÖ¼®À̶ó´Â °ÍÀº ÇÊ¿ä¾ø´Ù°í ÁÖÀåÇØ¿Ô´Ù. ÀÌ ÁÖÀåÀº Ç×»ó ÀϹÝÀûÀÎ »ó½Ä°ú´Â »ó¹ÝµÇ±â ¶§¹®¿¡ ¹Ý´ë ÀÇ°ßÀ» ¸¹ÀÌ µè´Â´Ù. ȸ»ç¿¡¼­´Â ȸ»çÀÇ ÀϹÝÀûÀÎ ·êÀ» µû¶ó ÁÖ´Â °ÍÀÌ ¸Â´Ù°í »ý°¢Çϱ⿡ ȸ»ç¿¡¼­ »ý»êÇÑ Äڵ忡´Â ±âº»ÀûÀÎ ÁÖ¼®À» ºÙÀÌ°í´Â ÀÖÁö¸¸ °³ÀÎÀûÀÎ ÇÁ·ÎÁ§Æ®¿¡´Â ÁÖ¼®À» µû·Î ºÙÀÌÁö ¾Ê´Â´Ù.

// 0¿¡¼­ 100±îÁöÀÇ ÇÕÀ» ±¸ÇÑ´Ù.
 
// Çհ踦 ÀúÀåÇÒ º¯¼ö
int total = 0;
 
for (int i = 1; i <= 100; i++)
    total += i; 
 
// °è»êÇÑ Çհ踦 Ãâ·ÂÇÑ´Ù.
printf("total = %d\n", total);

À§ÀÇ Äڵ忡¼­ ÁÖ¼®Àº Çϳªµµ ÇÊ¿ä ¾ø´Ù°í »ý°¢ÇÑ´Ù. ¼Ò½º´Â ±× ¾ð¾îÀÇ ¸Å´º¾óµµ ¾Æ´Ï°í ¾Ë°í¸®Áò ¼­Àûµµ ¾Æ´Ï´Ù. À§ÀÇ ÄÚµå¿Í º¯¼ö¸íÀ» º¸°íµµ ¹Ù·Î ³»¿ëÀ» ÆľÇÇÏÁö ¸øÇÏ¸é µµ¸®¾î ±×°Ô ´õ ¹®Á¦°¡ ÀÖ´Â °ÍÀÌ ¾Æ´Ò±î? ÁÖ¼®À» ³ÖÁö ¾ÊÀ½À¸·Î¼­ ¾ò´Â À̵æÀº ÇÑ ÆäÀÌÁö¿¡¼­ º¼ ¼ö ÀÖ´Â  ¼Ò½º ÄÚµåÀÇ ¾çÀÌ ¸¹ÀÌ ¶§¹®¿¡ µµ¸®¾î ¼Ò½º¸¦ Àаí Çؼ®Çϴµ¥ ´«ÀÌ ÆíÇÏ°í ºÐ¼® ½Ã°£ÀÌ ´ÜÃàµÈ´Ù´Â °ÍÀÌ´Ù.

ÇÁ·Î±×·¡¹ÖÀ» ÇÔ¿¡ À־ »ó½Ä¿¡¼­ ¹þ¾î³ªÁö ¾Ê´Â ÄÚµå·Î ±¸ÇöÀ» ÇÑ´Ù¸é ±»ÀÌ ÁÖ¼®À» ´Þ ÇÊ¿ä°¡ ¾ø´Ù°í »ý°¢ÇÑ´Ù. ¾Æ·¡ÀÇ Äڵ带 º¸ÀÚ. (±Û ¾²¸é¼­ ¿¡µðÅÍ »ó¿¡¼­ ÄÚµùÇÑ °ÍÀ̹ǷΠ»ç¼ÒÇÑ syntax error³ª logicÀÇ ¹®Á¦°¡ ÀÖÀ» ¼ö ÀÖ´Ù... -_-;;;)

bool CGameMain::SendItem(int actor, int actee, int itemId)
{
    CPlayer* pActorInst = CPlayer::GetPlayerInstance(actor);
    CHECK_FAILED(pActorInst)
 
    CInventory* pInventory = pActorInst->GetInventory();
    ASSERT(pInventory)
 
    int itemIndex = pInventory->SearchFor(itemId);
    if (itemIndex > 0)
    {
        CPlayer* pActeeInst = CPlayer::GetPlayerInstance(actee);
        CHECK_FAILED(pActeeInst)
 
        TItem item = pInventory->PickOut(itemIndex);
        pActeeInst->GetInventory()->Add(item);
    }
 
    return true;
}

Äڵ带 ÀÐÀ¸¸é¼­ Âß ³»·Á°£´Ù¸é Äڵ忡¼­ ´ÙÀ½°ú °°Àº º¸ÀÌÁö ¾Ê´Â ÁÖ¼®À» ÀÐÀ» ¼ö ÀÖ´Ù.

1. ÀÌ ÇÔ¼ö´Â CgameMainÀ̶õ classÀÇ public member functionÀ̸ç itemÀ» sendÇÏ´Â ±â´ÉÀ» ÇÏ¿© ±× ¼º°ø ¿©ºÎ¸¦ boolÇüÀ¸·Î µ¹·ÁÁØ´Ù. °¢ ÆĶó¹ÌÅÍ´Â Çൿ ÁÖüÀÚ, Çǵ¿ÀÚ, sendÇÒ itemÀÇ idÀÌ´Ù.
(ÁÖ. public, protected, privateÀÇ ÇÔ¼ö ¸í¸í¹ýÀº ¼­·Î ±¸ºÐµÇ°Ô ÇÑ´Ù)

2. CPlayer¶ó´Â classÀÇ static functionÀÎ GetPlayerInstance()´Â player id¸¦ ¹Þ¾Æ¼­ player instance¸¦ CPlayer* ¶Ç´Â ±× ÈÄ¼Õ °´Ã¼ ÇüÀ¸·Î ³Ñ°ÜÁØ´Ù.
(ÁÖ. ÀϹÝÀûÀ¸·Î ¾ÕÀÌ ´ë¹®ÀÚ 'C'·Î ½ÃÀÛÇÏ´Â °ÍÀº namespace°¡ ¾Æ´Ñ classÀ̹ǷΠstatic class¿¡ ´ëÇÑ °ÍÀÓÀ» ¾È´Ù.)

3. CHECK_FAILED()´Â macroÀ̸ç pActorInst°¡ ºñÁ¤»óÀûÀÎ °ªÀÏ ¶§ ÇÔ¼ö¸¦ Áß´ÜÇÏ´Â ±â´ÉÀ» ÇÑ´Ù. ¾Æ¸¶ ÀÌ°ÍÀÌ ÄÄÆÄÀÏ ¿¡·¯°¡ ¾øÀ¸´Ï return false;·Î Áß´ÜÇÏ´Â °ÍÀ¸·Î ¿¹»óµÇ¸ç ºñÁ¤»óÀûÀ̶ó´Â ÆÇ´ÜÀ» Çϱâ À§ÇÑ ¹æ¹ýÀº ±¸Ã¼ÀûÀ¸·Î ¾Ë ÇÊ¿ä´Â ¾øÁö¸¸, debug ¸ðµå¿¡¼­´Â NULL °Ë»ç ÈÄ player list¸¦ Á÷Á¢ traversÇÑ´Ùµç Çؼ­ °Ë»çÇÒ ¼öµµ ÀÖ°í, release ¸ðµå¶ó¸é NULL °Ë»ç Á¤µµ¸¸ ÇÒ °Í °°´Ù.
(ÁÖ. ÀϹÝÀûÀ¸·Î ´ë¹®ÀÚ·Î ¾²¸ç ubder-score·Î ´Ü¾î¸¦ ±¸ºÐÇÏ´Â °ÍÀº macro¸¦ Ç¥ÇöÇÏ´Â ¹æ½ÄÀÌ´Ù.)

4. GetInventory()¶ó´Â Inventory¸¦ GetÇÏ´Â °ÍÀε¥ Æ÷ÀÎÅÍ ÇüÀ» ¸®ÅÏÇÏ°í ÀÖÀ¸¹Ç·Î InventoryÀÇ ³»¿ëÀ» º¹»çÇÏÁö´Â ¾Ê°í ´ÜÁö ÁÖ¼Ò¸¸ µ¹·ÁÁØ´Ù. ±×¸®°í ±× ¾Æ·¡¿¡´Â assertionÀ» ÅëÇØ °ªÀÇ À¯È¿¼ºÀ» ÆÇ´ÜÇÏ°í ÀÖÀ¸¹Ç·Î ÀÌ ÇÔ¼ö´Â Ç×»ó NULLÀÌ ¾Æ´Ñ °ª¸¸ µ¹·ÁÁÖ°Ô µÇ¾î ÀÖ´Ù. ¾Æ¸¶µµ CPlayer´Â Ç×»ó À¯È¿ÇÑ inventory¸¦ º¸À¯ÇÏ°í ÀÖ´Ù´Â Àǹ̰¡ µÈ´Ù.

5. inventory¿¡¼­ ÁÖ¾îÁø item id¿¡ ´ëÇÑ ½ÇÁ¦ item index °ªÀ» ã´Â´Ù. if¹®ÀÇ ¾²ÀÓ»õ¸¦ ºÁ¼­´Â ÀÌ À妽º°¡ 0 ÀÌ»óÀ϶§¸¸ ãÀº °ÍÀ¸·Î »ý°¢µÈ´Ù.

6. 2.¿¡¼­ ÇÑ °Í°ú °°Àº ¹æ¹ýÀ¸·Î Çǵ¿ÀÚ¿¡ ´ëÇÑ instance¸¦ ¾ò¾î ¿Â´Ù.

7. Inventory¿¡¼­ ÁöÁ¤µÈ ±× item¸¦ »©³½´Ù. »©³»´Â(pick out) ÇൿÀ̹ǷΠÇൿ ÁÖüÀÚÀÇ inventory¿¡¼­´Â ±× itemÀÌ Çϳª ºüÁö°Ô µÈ´Ù.

8. »©³½ itemÀ» Çǵ¿ÀÚÀÇ inventory¿¡ Ãß°¡ÇÑ´Ù.

9. ÀüüÀûÀÎ µ¿ÀÛÀ» Á¤¸®Çϸé actor¿¡°Ô itemIdÀÇ itemÀÌ ÀÖÀ¸¸é ±×°ÍÀ» actee¿¡°Å ³Ñ°Ü ÁÖ´Â ÀÏ·ÃÀÇ °úÁ¤ÀÌ´Ù.

±×¸®°í Á» ´õ ¼÷·ÃµÇ¸é ¾Æ·¡¿Í °°Àº Äڵ嵵 À§¿Í ¶È°°Àº ¼Óµµ·Î ÀÐÀ» ¼ö ÀÖÀ» °ÍÀÌ´Ù.

bool CGameMain::SendItem(int actor, int actee, int itemId)
{
    CInventory* pInventory =
                CPlayer::GetPlayerInstance(actor)->GetInventory();

    int itemIndex;
    if ((itemIndex = pInventory->SearchFor(itemId)) > 0)
    {
        TItem item = pInventory->PickOut(itemIndex);
        CPlayer::GetPlayerInstance(actee)->GetInventory()->Add(item);
    }
 
    return true;
}

¿©±â¿¡¼­´Â CPlayerÀÇ instance¸¦ CPlayer::GetPlayerInstance()¸¦ ÅëÇØ ¹ÞÀ¸¸é¼­ NULL °Ë»ç¸¦ ÇÏÁö ¾Ê´Â´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. NULL °Ë»ç¸¦ ÇÏÁö ¾Ê¾Æ¼­ ÇÁ·Î±×·¥¿¡ ÀÌ»óÀÌ »ý±â´Â °æ¿ì´Â CPlayer::GetInventory()¸¦ ã´Ù°¡ ¹®Á¦°¡ »ý±â°Å³ª ±× ÇÔ¼ö ¾È¿¡¼­ thisÀÇ ¹«¾ùÀΰ¡¸¦ ÂüÁ¶ÇÒ ¶§À̱⠶§¹®¿¡ ±× µÎ ¹®Á¦°¡ ¾Æ¿¹ ¹ß»ýÇÏÁö ¾Ê°Ô Çصθé À§¿Í °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×·± ¾ÈÀü ÀåÄ¡¸¦ ÇßÀ» °æ¿ì¿¡´Â ù ÁÙÀÇ pInventoryµµ NULLÀÌ µé¾î ¿Ã ¼ö ÀÖ´Ù. (CPlayer°¡ instance°¡ NULLÀÏ °æ¿ì CPlayer::GetInventory()µµ NULLÀÌ µ¹¾Æ¿À°Ô ÇØ¾ß ÇϹǷÎ) µû¶ó¼­ CInventoryµµ NULL °´Ã¼¿¡ ´ëÇÑ È£Ãâ¿¡ ´ëºñÇÏ°Ô ¸¸µé¾îÁ® ÀÖÀ» °ÍÀÌ¶ó ¿¹»óÇÒ ¼ö ÀÖ´Ù.

±×¸®°í ÄÚµù ½ºÅ¸ÀÏ¿¡ ´ëÇÑ Â÷ÀÌ°¡ Àִµ¥

    int itemIndex = pInventory->SearchFor(itemId);
    if (itemIndex > 0)

ÀÌ·¸°Ô µÇ¾ú´ø ºÎºÐÀÌ ¾Æ·¡Ã³·³ µÇ¾î ÀÖ´Ù.

    int itemIndex;
    if ((itemIndex = pInventory->SearchFor(itemId)) > 0)

À§ÂÊÀÇ Äڵ带 Çؼ®Çϸé ÀÌ·¸°Ô µÈ´Ù.

1. Inventory¿¡¼­ itemId¿¡ ÇØ´çÇÏ´Â item index¸¦ ¾ò´Â´Ù.
2. ±× item index°¡ 0º¸´Ù Å©´Ù¸é if ¹®ÀÌ trueÀÌ´Ù.

¾Æ·¡ÂÊ Äڵ带 Çؼ®Çغ¸¸é ÀÌ·¸°Ô µÈ´Ù.

1. item index°¡ 0º¸´Ù Å©´Ù¸é if ¹®ÀÌ trueÀÌ´Ù.
2. ±×·±µ¥ item index´Â inventory¿¡¼­ itemId¿¡ ÇØ´çÇÏ´Â indexÀÌ´Ù.

À§ ÂÊÀº ¿µ¾î·Î º¸¸é I look at a book. it is thick. ÀÌ°í ¾Æ·¡ ÂÊÀº I look at a book which is thick. À¸·Î »ý°¢ÇÒ ¼ö ÀÖ´Ù. À§ ÂÊÀº Ç×»ó 2-pass¸¦ °ÅÃÄ¾ß Àüü¸¦ ÀÌÇØÇÒ ¼ö ÀÖÁö¸¸ ¾Æ·¡ ÂÊÀº ù¹ø ° pass¿¡¼­ ÃÖÁ¾ °á°ú°¡ ³ª¿À°í ´õ ÀÚ¼¼È÷ ¾Ë°í ½Í´Ù¸é µÎ¹ø ° passÀÇ ³»¿ëÀ» ºÁµµ µÈ´Ù. Äڵ带 Àд »ç¶÷Àº 'item index°¡ 0º¸´Ù Å©¸é Á¶°Ç¹®À» µé¾î°¡´Â±¸³ª'¶ó°í¸¸ ¾Ë°í ½ÍÀ» ¶§µµ ÀÖ°í ±× °úÁ¤À» ´õ ÀÚ¼¼È÷ ¾Ë°í ½ÍÀº »ç¶÷µµ ÀÖ´Ù. ƯÈ÷ if ¹®ÀÌ trueÀÏ ¶§ ³»ºÎ ¾Ë°í¸®Áò¸¸ ÀаíÀÚ ÇÏ´Â »ç¶÷Àº ÀڱⰡ ´ú °ü½ÉÀÖ´Â ºÎºÐÀº °£·«ÇÏ°Ô¸¸ ÀÌÇØÇصµ µÇ´Â °ÍÀÌ´Ù.

ÇÏÁö¸¸ ÁÖ¼®À» ²À ³Ö¾î¾ß ÇÏ´Â ºÎºÐµµ ÀÖ´Ù. ÁÖ·Î ÇÑ ÇÔ¼ö°¡ 2-4°³ÀÇ ÆÄÆ®·Î ³ª´©¾îÁ® ÀÖÀ» ¶§ 'ÀÌ ºí·ÏÀÇ ÄÚµå´Â ÀÌ·± ÀÏÀ» Çϱâ À§ÇÑ °ÍÀÌ´Ù'¶ó´Â °ÍÀ» °£´ÜÇÏ°Ô ±âÀÔÇØ µÎ¸é ÀÚ½ÅÀÌ ÇÊ¿äÇÑ ºÎºÐ°ú ÇÊ¿ä ¾ø´Â ºÎºÐÀ» °¡·Á¼­ »¡¸® ¼Ò½º¸¦ ÀÌÇØÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¶ÇÇÑ Áö³ªÄ¡°Ô ¾Ë°í¸®Áò ÀûÀÎ ºÎºÐÀ̳ª ÀÌ¹Ì ÃÖÀûÈ­¸¦ Çؼ­ ÄÚµåÀÇ readability°¡ ¶³¾îÁ® ÀÖÀ» °æ¿ì¿¡´Â ²À ÁÖ¼®À» ½á µÎ´Â °ÍÀÌ ÁÁ´Ù. ³ªÀÇ °æ¿ì¿¡´Â ÃÖÀûÈ­ Çϱâ ÀüÀÇ ÄÚµå ÀÚü¸¦ ÁÖ¼®À¸·Î µÐ´Ù.

³ªÀÇ ÁÖÀåÀº, ÁÖ¼®À» ¸¹ÀÌ ³Ö´Âµ¥ µå´Â ³ë·Â°ú ½Ã°£À» ÁÙÀÌ°í, ÄÚµù ½ºÅ¸ÀÏ¿¡ ´ëÇÑ ÀÚüÀûÀÎ guide-lineÀ» µÎ¾î¼­ ¼Ò½º°¡ ½º½º·Î ÁÖ¼®ÀÌ µÇµµ·Ï ÇÏ´Â °ÍÀÌ´Ù.