¡Ô RPG °­ÁÂ

 ¡å PC¿Í NPCÀÇ ±¸ºÐ

N/A

¼Ò½ºÙí


PC(Player Character)¿Í NPC(Non-Player Character)¸¦ ±¸ºÐÇÏ´Â °¡Àå Å« ±âÁØÀº »ç¿ëÀÚ¿¡ ÀÇÇØ Á¶ÀÛÀÌ °¡´ÉÇÑ Ä³¸¯ÅÍÀΰ¡ ÇÏ´Â °ÍÀÌ´Ù. PC´Â ´ëºÎºÐ »ç¿ëÀÚÀÇ ÀÔ·ÂÀ» ¹Þ¾Æ ±×¿¡ ¸Â´Â ÇൿÀ» ÇÏ°Ô µÇ¸ç NPC´Â ÀÚüÀûÀÎ ÆÇ´ÜÀ¸·Î ÇൿÇÑ´Ù. ÇÏÁö¸¸ ±× ÀÌ¿ÜÀÇ Çൿ ¹æ½ÄÀº ¸ðµÎ °°¾Æ¾ß ÇÑ´Ù. ¡°¿À¸¥ÂÊÀ¸·Î ¿òÁ÷¿©¶ó¡±¶ó´Â ¸í·ÉÀ» ¹ÞÀ¸¸é PC³ª NPC³ª ¸ðµÎ ¿À¸¥ÂÊÀ¸·Î ¿òÁ÷¿©¾ß ÇÏ¸ç ¡°Àü¹æ¿¡ °ø°ÝÀ» Ç϶󡱶ó´Â ¸í·É¿¡ ¶È°°ÀÌ ÇöÀç ÀåºñµÈ ¹«±â·Î °ø°ÝÇØ¾ß ÇÒ °ÍÀÌ´Ù. (¾î¶² ¹«±â¸¦ ¾î¶»°Ô »ç¿ëÇ϶ó°í ÇÏ´Â ¼¼ºÎ ¸í·ÉÀÌ ÇÊ¿ä ¾ø´Ù.) Áï, ¸í·ÉÀº ÇϳªÀÌ°í ÀÌ·± ¸í·ÉÀ» ¹Þ´Â °´Ã¼´Â °¢°¢ ´Ù¸¦ ¼ö°¡ ÀÖ´Ù´Â °ÍÀÌ´Ù.

±×·¸´Ù¸é ÇÁ·Î±×·¡¹ÖÀÇ ±¸Çö¿¡¼­´Â ¾î¶»°Ô ÇØ¾ß Çϴ°¡? ¹æ¹ýÀº ¿©·¯ °¡Áö°¡ ÀÖ°ÚÁö¸¸ ±× Áß¿¡ °¡Àå °£´ÜÇÑ ¹æ¹ýÀÌ NPCŬ·¡½º¸¦ »ó¼Ó ¹Þ¾Æ¼­ PC¸¦ ±¸¼ºÇÏ°í, PCÀÇ ¸ÞÀÎ Çൿ ÇÔ¼ö¸¦ ÀçÁ¤ÀÇÇÏ´Â °ÍÀÌ´Ù. ÀϹÝÀûÀ¸·Î´Â PC°¡ NPCÀÇ ¼Ó¼ºÀ» ¸ðµÎ Æ÷ÇÔÇÏ¸ç °Å±â¿¡´Ù°¡ Ãß°¡ ¼Ó¼ºÀÌ ºÙµµ·Ï ±¸¼ºµÇ´Â °ÍÀÌ ´ëºÎºÐÀ̱⠶§¹®ÀÌ´Ù.

1. PC¿Í NPCÀÇ ±¸ºÐ

    ¸¸¾à ¸ÞÀÎ Çൿ ÇÔ¼ö°¡ DoAction()À̶ó°í ÇÑ´Ù¸é ´ÙÀ½°ú °°ÀÌ ¸ÞÀÎ ·çÇÁ¸¦ ±¸¼ºÇÒ ¼ö ÀÖ´Ù.


    01:  // Ŭ·¡½º Á¤ÀÇ
    02:  class CNonPlayerChar
    03:  {
    04:  public:
    05:     virtual int DoAction();
    06:  };
    07:  
    08:  int CNonPlayerChar::DoAction()
    09:  {
    10:     // AI¿¡ ÀÇÇØ Çൿ ÆÐÅÏ °áÁ¤
    11:  }
    12:  
    13:  class CPlayerChar : public CNonPlayerChar
    14:  {
    15:  public:
    16:     int DoAction();
    17:  };
    18:  
    19:  int CPlayerChar::DoAction()
    20:  {
    21:     // »ç¿ëÀÚÀÇ ÀԷ¿¡ ÀÇÇØ Çൿ ÆÐÅÏ °áÁ¤
    22:  }
    23:  
    24:  // °ÔÀÓ ½Ã½ºÅÛ¿¡ Á¤ÀÇµÈ Ä³¸¯ÅÍ ¸®½ºÆ®
    25:  CNonPlayerChar* Characters[100];
    26:  
    27:  // PCÀÇ »ý¼º ¹æ¹ý
    28:  Characters[0] = new CPlayerChar();
    29:  
    30:  // NPCÀÇ »ý¼º ¹æ¹ý
    31:  Characters[1] = new CNonPlayerChar ();
    32:  
    33:  // ¸ÞÀÎ ·çÇÁ ¾È¿¡¼­ ½ÇÇàµÇ´Â Àü ij¸¯ÅÍ Çൿ ÇÔ¼ö
    34:  for (int i = 99; i >=0; i--)
    35:  {
    36:     if (Characters[i])
    37:     {
    38:        Characters[i]->DoAction();
    39:        Characters[i]->Show();
    40:     }
    41:  }

    ÀÌ·¸°Ô Çϸé PC¿Í NPC¸¦ ±¸ºÐÇÏÁö ¾Ê°íµµ ÇϳªÀÇ ·çÇÁ¿¡¼­ Àü ij¸¯ÅÍÀÇ Çൿ ÇÔ¼ö¸¦ ¸ðµÎ ºÎ¸¦ ¼ö ÀÖ´Ù. Âü°í·Î ·çÇÁ¸¦ 99ºÎÅÍ 0±îÁö °Å²Ù·Î µ¹¸®´Â °ÍÀº 0¹ø ij¸¯ÅÍÀÎ ÁÖÀΰøÀÌ °¡Àå ³ªÁß¿¡ Ãâ·ÂµÇ¾î ij¸¯Å͵é Áß¿¡¼­´Â °¡Àå À§ÂÊ¿¡ ÂïÈ÷µµ·Ï Çϱâ À§Çؼ­´Ù.

    ÄÚµå ¸¶Áö¸·ÀÇ Ä³¸¯ÅÍ ¸ÞÀÎ ·çÇÁ´Â ºñ´Ü ·ÑÇ÷¹À× °ÔÀÓ»Ó¸¸ ¾Æ´Ï¶ó ½´Æà °ÔÀÓ¿¡¼­µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÁÖÀΰø ij¸¯ÅÍ, Àû ij¸¯ÅÍ, ±×¸®°í źȯ °°Àº ±âŸ ¿ÀºêÁ§Æ®µé±îÁöµµ ¸ðµÎ ÇϳªÀÇ °´Ã¼·ÎºÎÅÍ »ó¼ÓÀ» ¹Þ°Ô µÇ¸é À§ÀÇ ±¸Á¶¸¦ ±×´ë·Î °¡Á®°¡¼­ ¾µ ¼ö ÀÖ´Ù. ¹°·Ð ½´Æÿ¡¼­´Â Ãæµ¹¿¡ ÀÇÇÑ ¼Ò¸êÀÌ ÀÖÀ¸¹Ç·Î DoAction() ¸â¹ö ÇÔ¼ö¿¡ ÀÚ½ÅÀÌ ¼Ò¸êµÇ´ÂÁö ¾Æ´ÑÁö¸¦ ¸®ÅÏ °ªÀ¸·Î Áà¾ß ÇÒ °ÍÀÌ´Ù.

    Áï ´ÙÀ½°ú °°Àº ±¸Á¶¸¦ °¡Áö´Â °ÍÀÌ °¡Àå ¹Ù¶÷Á÷ÇÏ´Ù.


    01:  // ¸ÞÀÎ ·çÇÁ ¾È¿¡¼­ ½ÇÇàµÇ´Â Àü ij¸¯ÅÍ Çൿ ÇÔ¼ö
    02:  for (int i = MAX_CHARACTER; i >=0; i--)
    03:  {
    04:     if (Characters[i])
    05:     {
    06:        if (Characters[i]->DoAction())
    07:        {
    08:           Characters[i]->Show();
    09:        }
    10:        else
    11:        {
    12:           delete Characters[i];
    13:           Characters[i] = NULL;
    14:        }
    15:     }
    16:  }


    ¸â¹ö ÇÔ¼öÀÎ DoAction()¿¡¼­ ±× ij¸¯ÅÍÀÇ °íÀ¯ ÇൿÀ» ÇÏ°í Ãѵ¹ üũ µîÀ» ÇÑ ÈÄ °´Ã¼ ¼Ò¸ê¿¡ ´ëÇÑ Á¤º¸¸¦ ¸®ÅÏ °ªÀ¸·Î ÁÖ°Ô µÇ´Âµ¥, ¿©±â¼­´Â TRUEÀÏ ¶§ °´Ã¼°¡ °è¼Ó À¯È¿ÇÔÀ» ³ªÅ¸³»°í FALSEÀÏ ¶§ °´Ã¼°¡ ¼Ò¸êÇØ¾ß ÇÔÀ» ³ªÅ¸³½´Ù. µû¶ó¼­ °´Ã¼°¡ °è¼Ó À¯ÁöµÇ°í ÀÖÀ» ¶§´Â ±× ij¸¯Å͸¦ È­¸é¿¡ Ãâ·ÂÇØ ÁÖ°í ±×·¸Áö ¾ÊÀ» ¶§´Â ¼Ò¸êÀÇ °úÁ¤À» °ÅÄ£´Ù. (ºÎ°¡ÀûÀ¸·Î °´Ã¼ÀÇ ¼Ò¸êÀÚ¿¡¼­ ¼Ò¸ê¿ë ¿ÀºêÁ§Æ®¸¦ Ãß°¡·Î »ý¼ºÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î ÆÄÆí°ú °°Àº¡¦)

2. Çൿ ÇÔ¼ö ¿À¹ö¶óÀ̵ù

    Çൿ ÇÔ¼ö¸¦ ¿À¹ö¶óÀ̵ù(overriding)ÇÏ´Â ¹æ¹ýÀº ¾ð¾î¿¡ µû¶ó¼­ Á¶±ÝÀº ´Ù¸£´Ù. ¸¸¾à MS Windows¿ë °ÔÀÓ¸¸À» ¸¸µç´Ù¸é C++ÀÇ ¹®¹ý Áß¿¡¼­ °¡»ó(virtual) ÇÔ¼ö¸¦ ÀÌ¿ëÇؼ­ ÀÌ°ÍÀ» ±¸ÇöÇÏ¸é µÇÁö¸¸, ¹Ì´Ï °ÔÀӱ⳪ ±âŸ C++ÀÇ Áö¿øÀÌ ¹ÌºñÇÑ ÀÓº£µðµå ½Ã½ºÅÛ(Embedded system)¿¡¼­ °ÔÀÓÀ» ¸¸µé ¶§´Â CÀÇ ¹®¹ýÀÎ ÇÔ¼öÇü º¯¼ö¸¦ ÅëÇØ ±¸ÇöÇØ¾ß ÇÏ´Â °æ¿ìµµ ÀÖ´Ù.

    ±× ´ÙÀ½ ºÎºÐÀº ´ÙÀ½ ÁÖ¿¡³ª ¾µ·Ã´Ù. ¿öµå ¹®¼­ÀÇ Æ¯Á¤ Æ÷¸ËÀ¸·Î µÇ¾î ÀÖ´Â °ÍÀ» htmlÀÇ ÀÌ Æ÷¸ËÀ» ¿Å±â´Â ÀÛ¾÷ÀÌ ³Ê¹« ³ë°¡´Ù´Ù.