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