°ÔÀÓ¿¡¼ÀÇ ÀΰøÁö´É Ãß¼¼
Á¦¸ñ : °ÔÀÓÀ» ÅëÇØ¼ º» Game AI
ÀÛ¼ºÀÚ : ÀÓ¿µÀÏ
AI¿¡ ´ëÇØ¼ °ü½ÉÀ» °¡Áö°í ÀÖ´Â ºÐµéÀº ¸¹À» °ÍÀÌ´Ù. °ø»ó°úÇмҼ³À̳ª SF¿µÈ¿¡¼ ÀÚÁÖ ´Ù·ç¾îÁö´Â ¼ÒÀçÀ̱⵵ ÇÏ°í ¿ØÁö ½Åºñ·Ó°Ô±îÁö ´À²¸Áö´Â ºÐµéµµ ÀÖÀ» °ÍÀÌ´Ù. ³ª ¶ÇÇÑ ÀÌ·± ȯ»óÀ» ÂѾƼ Áö±ÝÀº Game AI¿¡ Àü³äÇϰí ÀÖ´Ù. Game¿¡¼µµ AI´Â Á¡Á¡ ´õ Áß¿äÇÑ ºñÁßÀ» Â÷ÁöÇϰí ÀÖ´Ù. »ç½Ç Ãʱâ Game AI´Â °ÅÀÇ ÀüºÎ°¡ hard coding(if¹® µîÀ¸·Î ó¸®)·Î ó¸®ÇÏ´Â °ÍÀÌ ´ëºÎºÐ À̾ú´Ù. ÇÏÁö¸¸ ÀÌÁ¦´Â Á» ´õ ü°èÀûÀ̰í ÇмúÀûÀÎ Ãø¸éÀ¸·Î Á¢±ÙÇϰí ÀÖ´Ù. ÀÌÀü±îÁö AI´Â ÇмúÀûÀÎ ¿¬±¸ºÐ¾ßÀÇ ÀüÀ¯¹°Ã³·³ ¾î·Æ°Ô¸¸ ´À²¸Á³Áö¸¸ Á¡Â÷ ¿ì¸® »ýȰ°ú Áö±Ý ¾ê±âÇÏ·Á´Â Game¿¡¼µµ Á¡Á¡ AI¿ä¼Ò°¡ Àû¿ëµÇ°í ÀÖ´Ù.
Game¿¡¼ AI°¡ µé¾î°¡´Â ºÎºÐÀº ÀÏ´ÜÀº À¯Àú°¡ Á¶ÀÛÇÏÁö ¾Ê´Â NPC(Non-Player Character)¸¦ Control ÇÏ´Â µ¥¿¡ ±âº»ÀûÀ¸·Î Àû¿ëµÇ°í ÀÖ´Ù. ¿¹Àü¿¡ ³ª¿Ô´ø °£´ÜÇÑ 2D Game¿¡¼´Â ´Ü¼øÇÑ ·£´ý ¾Ë°í¸®Áòµµ ¸¹ÀÌ »ç¿ëµÇ¾úÁö¸¸ Áö±ÝÀÇ Game¿¡¼´Â ´Ù¾çÇÑ À帣¸¦ ¼ÒÈÇÒ ¼ö ÀÖ´Â ÀûÀýÇÑ AI ±â¹ýµéÀÌ Àû¿ëµÇ°í ÀÖ´Ù.
ÇØ¿Ü °ÔÀÓµéÀ» º¸¸é ÀΰøÁö´ÉÀÇ ºñÁßÀÌ ´Ã°í ÀÖ´Ù´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù. Çϵå¿þ¾îÀÇ ¹ßÀü¿¡ µû¸¥ °Íµµ ÀÖÀ» °ÍÀÌ°í °ÔÀÓ¿¡¼ÀÇ Àç¹Ì¿ä¼Ò·Î¼ ÀΰøÁö´ÉÀÇ Á߿伺ÀÌ ³ô¾ÆÁö°í ÀÖ´Â °Íµµ ÇϳªÀÇ ÀÌÀ¯ÀÏ °ÍÀÌ´Ù.
°ÔÀÓ¿¡¼ÀÇ CPU Á¡À¯À²À» ¿¹·Î µé¸é 2000 GDC¿¡¼ ¹ßÇ¥µÈ °á°ú¿¡¼ 1997³âµµ¿¡´Â °ÅÀÇ ¸î %¿¡ Áö³ªÁö ¾Ê´ø °ÍÀÌ 2000³â µé¾î¼¸é¼ °ÅÀÇ 30%¿¡ À°¹ÚÇϰí ÀÖ´Ù. ÀÌ·± Á¶»ç°á°ú¸¦ º¸¸é ÀÌÀü¿¡ 3D Engine¿¡ ÅõÀÚÇÏ´ø CPU Á¡À¯À²À» Çϵå¿þ¾îÀÇ ¹ßÀü°ú °ÔÀÓ¿¡¼ÀÇ AIÀÇ Á߿伺¿¡ ÀÇÇØ¼ AI ÂÊÀ¸·Î ºñÁßÀ» ½Ç¾î ÁÖ°í ÀÖ´Ù°í »ý°¢µÈ´Ù.
±×¸®°í AI¸¦ Àü´ãÇÏ´Â °³¹ßÀÚ¸¦ µÎ´Â °æ¿ì°¡ ¿¹Àü¿¡´Â 20%Á¤µµ¿¡ ±×ÃÆÁö¸¸ ÇöÀç´Â 80%Á¤µµÀÇ °³¹ß»ç°¡ AI Àü´ã °³¹ßÀÚ¸¦ µÎ°í ÀÖ´Â ½ÇÁ¤ÀÌ´Ù. ±¹³»¿¡¼´Â ¾ÆÁ÷ Ŭ¶óÀÌ¾ðÆ®¿¡ Æ÷ÇÔµÈ Á¤µµ·Î ÀνÄÇϰí ÀÖÁö¸¸ ÀÌ´ë·ÎÀÇ Ãß¼¼¶ó¸é ¹Ù²ð °ÍÀÌ ºÐ¸íÇÏ´Ù°í º»´Ù.
°ÔÀÓ¿¡¼ÀÇ AI´Â ¾î¶² ÇÑ µÎ °¡ÁöÀÇ ¾Ë°í¸®ÁòÀ¸·Î ±¸ÇöµÇ±â´Â Èûµé´Ù. °ÔÀÓÀÇ ¼öÁذú À帣¿¡ µû¶ó ´Ù¸£°ÚÁö¸¸ ¿©·¯ °¡ÁöÀÇ AI ±â¹ýµéÀ» Á¶ÇÕÇØ¼ ÇϳªÀÇ °ÔÀÓ¿¡ ÇÊ¿äÇÑ AI¸¦ Àû¿ëÇÒ ¼ö ÀÖ´Â °ÍÀÌ´Ù.
±×·³ ÃÖ±Ù °ÔÀÓµéÀ» ÅëÇØ¼ °ÔÀÓ¿¡ »ç¿ëµÈ AI ±â¹ýµéÀ» ¼Ò°³ÇÏ°í °£´ÜÇÑ ¼³¸íÀ» ÇØ º¸µµ·Ï ÇϰڴÙ.
Black & White
ÇÇÅÍ ¸ô¸®´º°¡ ÆÄǽ·¯½º µîÀÇ °ÔÀÓÀ» °ÅÃļ ÃÖ±Ù¿¡ ³»³õÀº ÈÁ¦ÀÛ. God °ÔÀÓÀÇ Ã¢½ÃÀڷμ ÀÌ °ÔÀÓ¿¡¼´Â ƯÈ÷ Å©¸®ÃÄÀÇ ÀΰøÁö´ÉÀÌ µ¸º¸ÀδÙ. ÀÌ °ÔÀÓ¿¡¼´Â A-Life(Artificial Life Àΰø»ý¸í) ±â¼úÀÌ µµÀԵǾú´Âµ¥ Å©¸®ÃÄ ÀÚ½ÅÀÇ ¿å±¸¿Í »óÅ¿¡ µû¶ó À¯ÀúÀÇ Çൿ¿¡ ´ëÇÑ ¹ÝÀÀÀÌ ´ÙÀ̳ª¹ÍÇÏ°Ô ³ªÅ¸³´Ù. ´õ ³î¶ó¿î °ÍÀº À¯Àú°¡ Å©¸®Ãĸ¦ °¡¸£Ä¥ ¼ö ÀÖ´Ù´Â Á¡ÀÌ´Ù. ¾î¶² ÇൿÀ» Å©¸®ÃÄ¿¡°Ô ¹Ýº¹Çؼ º¸¿© ÁÖ¾úÀ» °æ¿ì ±× ÇൿÀ» ¶È°°ÀÌ µû¶ó ÇÏ´Â °Í°ú ĪÂù°ú ¹úÀ» º´ÇàÇÔÀ¸·Î½á ¼±°ú ¾Ç ¾ç ¹æÇâÀ¸·Î ±³À°ÀÌ °¡´ÉÇÏ´Ù.

Black & White ¿¡¼ »ç¿ëÇÑ belief/desire/intention architecture
À§ÀÇ ¾ÆÅ°ÅØÃĸ¦ »ìÆìº¸¸é Å©¸®ÃÄÀÇ ¿å¸Á°ú Àǰß, ¹ÏÀ½ µîÀÌ ÇൿÀ» °áÁ¤Çϴµ¥ ¿µÇâÀ» ÁØ´Ù. ƯÈ÷ Opinions¿¡ ÇØ´çÇÏ´Â Decision tree¸¦ ÀÌ¿ëÇØ¼ ±³À°ÀÇ È¿°ú¸¦ ±¸ÇöÇß´Ù. Black & White¿¡¼´Â Dynamically Building Decision Trees (´ÙÀ̳ª¹Í ÇÏ°Ô Á¦ÀÛµÈ °áÁ¤ Æ®¸®)¶ó´Â ¹æ½ÄÀ» ÀÌ¿ëÇߴµ¥ ÀϹÝÀûÀÎ Decision Tree ¹æ½ÄÀ» ÀÀ¿ëÇØ¼ Á» ´õ ´ÙÀ̳ª¹ÍÇÑ ÇüÅ·Π¹Ù²Ù¾ú´Ù.
¸ÕÀú Decision Tree ¹æ½ÄÀ» ¼³¸íÇÏÀÚ¸é °ÔÀÓ¿¡¼ ¾î¶² ³í¸®ÀûÀÎ °èȹÀ» Á» ´õ È¿À²ÀûÀ¸·Î ±¸ÇöÇϱâ À§ÇÑ ±¸Á¶ÀÌ´Ù. Hard coding(if ¹® µî)À¸·Î ó¸®ÇÒ ¼öµµ ÀÖÀ¸³ª Á» ´õ È¿À² ÀûÀÎ ±¸Á¶·Î ¸¸µé¾î¼ Äڵ带 Á÷Á¢ º¯°æÇÏÁö ¾Ê°íµµ ¿ÜºÎ¿¡¼ º¯°æ °¡´ÉÇÑ ±¸Á¶·Î ¸¸µå´Â °ÍÀÌ´Ù.
¾Æ·¡ÀÇ °èȹÀ» Decision Tree·Î ÀÛ¼ºÇÑ´Ù°í °¡Á¤Çغ¸ÀÚ.
Ç÷¹À̾ °¡±îÀÌ ÀÖ°í ¼Õ»óÁ¤µµ°¡ ÀûÀ¸¸é Ç÷¹À̾ °ø°ÝÇÑ´Ù.
Ç÷¹À̾ ¸Ö¸® ÀÖ°í ¿¬·á°¡ ¸¹À¸¸é Ç÷¹À̾ ÀÖ´ÂÁö ¼ö»öÇÑ´Ù.
À§ÀÇ °èȹÀ» Decision Tree·Î ³ªÅ¸³»¸é ´ÙÀ½°ú °°´Ù.

º¯°æ °¡´ÉÇÑ ÀÔ·Â ¿ä¼Ò
Distance : Ç÷¹À̾î¿Í NPC »çÀÌÀÇ °Å¸®
Fuel : ³²Àº ¿¬·á
Damage : ÇöÀç ¼Õ»ó Á¤µµ
Çൿ
Search : Ç÷¹ÀÌ¾î ¼ö»ö
Attack : Ç÷¹À̾ °ø°Ý
³ëµå ½ÇÇà ½Ã »ç¿ëÇÒ ¼ö ÀÖ´Â ±¸Á¶
typedef struct DECNODE_TYP
{
int operand1, operand2; // the first operands
int comp1; // the comparison operator
int operator; // the conjuctive operator
int operand3, operand4; // the second pair of operands
int comp2; // the comparison to perform
ACTION *act_true; // action lists for true and false
ACTION *act_false;
DECNODE_PTR *dec_true; // branches to take if true or false
DECNODE_PTR *dec_false;
} DECNODE, *DECNODE_PTR;
ÀÌ¿Í °°Àº Decision Tree´Â ´Ü¼øÇÑ ¹æ½ÄÀÌÁö¸¸ ÀÀ¿ëÇϱ⿡ µû¶ó¼ Æí¸®ÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
The Sims
EA¿¡¼ ³»³õÀº ½Ã¹Ä·¹ÀÌ¼Ç À帣ÀÇ °ÔÀÓÀÌ´Ù. Sim City½Ã¸®Áî·Î À¯¸íÇÑ Will Write°¡ ½ÉÇ÷À» ±â¿ï¿© ¸¸µç °ÔÀÓÀÌ´Ù. ¿ì¸®ÀÇ ½Ç»ýȰÀ» °ÔÀÓ¿¡ Àç¹ÌÀÖ°Ô ¿Å°Ü³õ¾Ò´Âµ¥ °¢ CharacterÀÇ ¿å±¸°¡ ÀÖ¾î¼ ±×°ÍµéÀ» Àß ÃæÁ·½ÃÄÑ ÁÖ¾î¾ßÁö Game Play¸¦ ¼øÁ¶·Ó°Ô ÇÒ ¼ö ÀÖ´Ù. Sims ¿¡¼
Ư¡ÀûÀÎ °ÍÀº ij¸¯ÅÍÀÇ ¿å±¸¿¡ ±â¹ÝÇÑ AI±â¹ýÀÌ »ç¿ëµÈ °Í°ú ¾î¶² Çൿ¿¡ ´ëÇÑ Á¤º¸µéÀ» °¢°¢ÀÇ ¿ÀºêÁ§Æ®°¡ °¡Áö°í ÀÖ´Â ¹æ½ÄÀÌ µ¶Æ¯ÇÏ´Ù. ¿å±¸ ±â¹ÝÀÇ AI ±â¹ýÀº Gamasutra¿¡µµ ¼Ò°³µÇ¾úÁö¸¸ ³»ºÎ»óÅ¿¡ ´ëÇÑ ¿å±¸ÇѰèÁ¡(threshold)À» Á¶ÀýÇØ¼ ÀûÀýÇÑ È¿°ú¸¦ ¾òÀ» ¼ö ÀÖ´Â ¹æ½ÄÀ¸·Î¼ »ý¹°ÀÇ Çൿ°ú À¯»çÇϵµ·Ï ±× ÇѰèÁ¡µéÀ» ÀûÀýÈ÷ Á¶ÀýÇÏ¸é¼ Àû¿ëÇß´Ù.
¿ÀºêÁ§Æ®°¡ À̺¥Æ®¸¦ ¹ß»ý½ÃŰ´Â ¹æ½ÄÀ» Will Write´Â ¡°smart terrain¡±À̶õ ¸»·Î Ç¥ÇöÀ» Çߴµ¥ ±× ºñÀ¯°¡ ÀûÀýÇÑ °Í °°´Ù. ÁÖü°¡ ¾Æ´Ï¶ó °´Ã¼ÀÎ ObjectµéÀÌ °¢°¢ ÁÖü°¡ ÇØ¾ß ÇÒ Çൿµé¿¡ ´ëÇÑ À̺¥Æ® Á¤º¸¸¦ ¹ß»ý½ÃŲ´Ù. ¸»ÇÏÀÚ¸é ¹è°íÇ ij¸¯ÅͰ¡ Áö³ª°¡¸é ³ÃÀå°í¿¡¼ ¡°²¨³» ¸Ô¾î¶ó¡±¶ó´Â ¸í·ÉÀ» ³»¸®´Â °Í°ú °°Àº ¹æ½ÄÀ̶ó°í ¸»ÇÒ ¼ö ÀÖ´Ù. ¾î¶»°Ô º¸¸é ¿ô±âÁö¸¸ ¾ÆÁÖ ÀûÀýÇÏ°Ô ±× È¿°ú¸¦ º¸°í ÀÖ´Ù°í ¸»ÇÒ ¼ö ÀÖ´Ù.
ÀÌ °ÔÀÓÀº A-Life ¿Í Fuzzy-State MachineÀ» ÀÌ¿ëÇÑ AI¸¦ ¼±º¸À̰í ÀÖ´Ù. ƯÈ÷ ÀÌ °ÔÀÓ¿¡¼´Â ¡°smart terrain¡±À̶ó´Â Will WriteÀÇ ¸»Ã³·³ °¢ ¿ÀºêÁ§Æ®µéÀÌ »óÅÂ¿Í ÇൿÀ» ¹ß»ý½ÃŰ´Â ¹æ½Ä. Áï object-oriented ¹æ½ÄÀ¸·Î °¢ ¿ÀºêÁ§Æ®°¡ ij¸¯ÅÍ¿¡°Ô ¿©·¯ °¡Áö Çൿ¿¡ ´ëÇÑ À̺¥Æ®¸¦ ¹ß»ý½ÃŰ´Â event-driven ¹æ½ÄÀÌ´Ù.
Black&White³ª The Sims¿¡ A-Life¶ó´Â ¸»ÀÌ ¾ð±ÞµÇ´Âµ¥ Á¶±Ý ¼³¸íÀ» ÇØº¸ÀÚ¸é Áö±Ý±îÁöÀÇ AI´Â À§¿¡¼ ¾Æ·¡·Î ±×·¯´Ï±î À§¿¡¼ °èȹÇÑ ´ë·Î ¾Æ·¡¿¡¼ ÇàÇØÁö´Â °èȹµÇÁö ¾ÊÀº ÇൿÀº ÀϾ ¼ö ¾ø´Â ¹æ½ÄÀε¥ A-Life ´Â ¹Ø¿¡¼ À§·Î¶ó´Â ¸»·Î Ç¥ÇöµÇ´Âµ¥ °¢°¢ÀÇ ¼¼ºÎÀûÀÎ ´Ü¼øÇÑ ±ÔÄ¢µéÀÌ ¸ð¿©¼ ÇϳªÀÇ Ä¿´Ù¶õ Ư¼ºÀ» ³ªÅ¸³»´Â °ÍÀ¸·Î Á¤ÇØÁÖÁö ¾ÊÀº ÇൿÀÌ Ã¢¹ßÀûÀ¸·Î ¹ß»ýÇϴ Ư¡À» °¡Áö°í ÀÖ´Ù. Á» ´õ ÀÚ¿¬ÀÇ »ý¹°À» Èä³»³½ ¹æ½ÄÀ̶ó°í ÇÒ ¼ö ÀÖ´Ù.
Half Life
Half Life´Â °ÔÀÓ Áß¿¡¼µµ ¸íÀÛÀ¸·Î ²ÅÈ÷´Â °ÔÀÓÀÌ´Ù. ÀÌ °ÔÀÓÀº ¹«¾ùº¸´Ù ½ºÅ丮¿Í ¿¬Ãâ·Î Ç÷¹À̾îµéÀ» »ç·ÎÀâ¾Ò´Ù. ÀÌ °ÔÀÓ ¶ÇÇÑ AI°¡ Game¿¡ Àç¹Ì¸¦ ´õÇØ ÁÖ°í Àִµ¥ ¸ó½ºÅͳª Ư¼öºÎ´ë¿øµéÀÌ ³ª¿Ã ¶§¸é Á¤¸» ¸¸¸¸ÇÑ »ó´ëµéÀÌ ¾Æ´Ï´Ù¶ó´Â ´À³¦À» ¹ÞÀ» ¼ö Àִµ¥ ±× µéÀÇ ¿òÁ÷ÀÓ ¶ÇÇÑ ¸ðµÎ AI·Î 󸮵Ǿú´Ù.
Half Life¿¡¼ Àû¿ëÇÑ ¹æ½ÄÀº ÀÏ·ÃÀÇ ÇൿµéÀ» Schedule·Î ¹¾î¼ ó¸®ÇÑ ¹æ½ÄÀε¥, À̰ÍÀº HFSM(Hierarchy Finite State Machine)À̶õ ¹æ¹ýÀ¸·Î º¼ ¼ö Àִµ¥ FSMÀ» °³³ä¿¡ µû¶ó °èÃþÀ» ³ª´©¾î ³õ¾Ò´Ù°í º¼ ¼ö ÀÖ´Ù. Çϳª ÇϳªÀÇ ±¸Ã¼ÀûÀÎ ÇൿµéÀ» Task State¶ó°í ÇÏ¸é ±× taskµéÀÌ ¿©·¯ °³ ¸ð¿©ÀÖ´Â State°¡ Schedule StateÀÎ °ÍÀÌ´Ù.
¿©±â¼ °£´ÜÇÏ°Ô State MachineÀ̶õ °³³äÀ» ¼Ò°³ÇÏÀÚ¸é StateµéÀ» ¾î¶² Á¶°Ç¿¡ µû¶ó ¿¬°áÇØ ³õÀº °ÍÀÌ´Ù. °¢°¢ÀÇ State¿¡´Â ¿©·¯ °¡Áö°¡ µé¾î°¥ ¼ö ÀÖ´Ù. ij¸¯ÅÍÀÇ ³»ºÎ»óŰ¡ µÉ ¼öµµ ÀÖ°í Çൿ ÆÐÅÏÀÌ µÉ ¼öµµ ÀÖ°í ½É¸® »óŰ¡ µÉ ¼öµµ ÀÖ´Ù. ÀÌ·± °¢°¢ÀÇ StateµéÀÌ ¾î¶² Á¶°Ç¿¡ µû¶ó ¿¬°áµÇ¾î ÀÖ´Â °ÍÀÌ State Machine ÀÌ´Ù.
State Machine Áß¿¡¼µµ À¯ÇÑÇÑ °³¼öÀÇ »óŸ¦ °¡Áø °ÍÀ» FSM(Finite State Machine)À̶ó°í Çϴµ¥, ÀÌ °ÍÀÇ ÇÑ ¿¹¸¦ µé¾î º¸°Ú´Ù.
¸ó½ºÅÍÀÇ »óÅÂÀüÀÌ ±ÔÄ¢
|
|
ÇöÀç »óÅÂ |
ÀÔ·Â |
Ãâ·Â »óÅÂ |
|
¨ç |
º¸Åë |
Ç÷¹ÀÌ¾î µîÀå |
ºÒÄè |
|
¨è |
º¸Åë |
Ç÷¹À̾îÀÇ °ø°Ý |
ÈïºÐ |
|
¨é |
ÈïºÐ |
¸ó½ºÅÍ ´Ùħ |
ºÐ³ë |
|
¨ê |
ÈïºÐ |
¸ó½ºÅÍ Ä¡·áµÊ |
º¸Åë |
|
¨ë |
ºÐ³ë |
¸ó½ºÅÍ ´Ùħ |
±¤ºÐ |
|
¨ì |
ºÐ³ë |
¸ó½ºÅÍ Ä¡·áµÊ |
ºÒÄè |
|
¨í |
±¤ºÐ |
¸ó½ºÅÍ ´Ùħ |
±¤ºÐ |
|
¨î |
±¤ºÐ |
¸ó½ºÅÍ Ä¡·áµÊ |
ºÐ³ë |
|
¨ï |
ºÒÄè |
Ç÷¹ÀÌ¾î ¶°³² |
º¸Åë |
|
¨ð |
ºÒÄè |
Ç÷¹À̾îÀÇ °ø°Ý |
ºÐ³ë |
|
¨ñ |
ºÒÄè |
¸ó½ºÅÍ Ä¡·áµÊ |
º¸Åë |
À§ÀÇ ÀüÀÌ ±ÔÄ¢À» FSMÀ¸·Î Ç¥ÇöÇϸé,

À§ÀÇ ¿¹¿¡¼ º¸µíÀÌ FSMÀº ÇöÀçÀÇ State¿¡¼ ÀԷ°ª¿¡ µû¶ó ´ÙÀ½ÀÇ State°¡ °áÁ¤µÇ´Â ÇüÅ·Πµ¿ÀÛÇÑ´Ù.
´ÙÀ½Àº FSMÀÇ ÇϳªÀÇ »óŸ¦ Ç¥ÇöÇÏ´Â µ¥ ¾²À̴ Ŭ·¡½º ÀÌ´Ù.
class FSMstate
{
unsigned m_usNumberOfTransistions; // ÀÌ »óŰ¡ ´ãÀ» ¼öÀÖ´Â »óÅÂÀüÀÌ// µéÀÇ °³¼ö
int *m_piInputs; // »óÅÂÀüÀ̸¦ À§ÇÑ ÀÔ·Â ¹è¿
int *m_piOutputState; // Ãâ·Â »óÅ ¹è¿
int m_iStateID; // ÀÌ »óÅÂÀÇ °íÀ¯ ID
public:
// »ý¼ºÀÚ´Â ÀÌ »óÅ¿¡ ´ëÇÑ ID¿Í ÀÌ »óŰ¡ Áö¿øÇÏ´Â »óÅ ÀüÀ̵éÀÇ °³¼ö¸¦ ¹Þ´Â´Ù.
FSMstate (int iStateID, unsigned usTransitions);
// ¼Ò¸êÀÚ´Â ÇÒ´çµÈ ¸ðµç ¹è¿µéÀ» ÇØÁ¦ÇÑ´Ù.
~FSMstate ();
// »óÅ ID¸¦ µ¹·ÁÁØ´Ù.
int GetID () { return m_iStateID; }
// ¹è¿¿¡ ÇϳªÀÇ »óÅ ÀüÀ̸¦ Ãß°¡ÇÑ´Ù.
void AddTransition (int iInput, int iOutputID);
// ¹è¿·ÎºÎÅÍ »óÅ ÀüÀ̸¦ Á¦°ÅÇÑ´Ù.
void DeleteTransition (int iOutputID);
// »óÅ ÀüÀ̸¦ ÀÏÀ¸Å°°í Ãâ·Â »óŸ¦ µ¹·ÁÁØ´Ù.
int GetOutput (int iInput);
}
Creature
³»°¡ óÀ½À¸·Î °ÔÀÓ ÀΰøÁö´É¿¡ ´ëÇØ¼ ´ë´ÜÇÏ´Ù°í ´À³¤ °ÔÀÓÀÌ´Ù.
ÀÌ °ÔÀÓ¿¡¼ÀÇ AI´Â Èä³»³»±â¸¦ ³Ñ¾î¼¼ ¸ðµ¨¸µ ¼öÁØ¿¡ °¡±õ´Ù°í ÇÒ ¼ö ÀÖ´Ù.
ÀÌ °ÔÀÓ¿¡¼´Â »ý¹°À» ¸ðµ¨¸µÇϱâ À§ÇÑ °®°¡Áö AI AlgorithmµéÀ» »ç¿ëÇϰí Àִµ¥, ÀÏ´Ü ÀÌ °ÔÀÓ¿¡¼´Â Characterµé °£¿¡ ±³¹èµµ °¡´ÉÇÏ´Ù´Â Á¡ÀÌ °¡Àå Èï¹Ì·Ó´Ù. ƯÈ÷ ÀÌ ±³¹è¶ó´Â °ÍÀ» ±¸ÇöÇϱâ À§ÇØ Genetic Algorithm(À¯ÀüÀÚ ¾Ë°í¸®Áò)À» »ç¿ëÇߴµ¥ ¿©±â¼ CharacterÀÇ ¿©·¯ °¡Áö Ư¡µéÀ» gene(À¯ÀüÀÚ)¿¡ ÀúÀåÇϰí ÀÌ Á¤º¸µéÀ» Genetic AlgorithmÀ» ÀÌ¿ëÇØ ±³¹èÇÒ ¶§ ÀûÀýÈ÷ ¼¯¾îÁÜÀ¸·Î½á ½ÇÁ¦ »ý¹°¿¡¼ º¼ ¼ö ÀÖ´Â ±³¹èÀÇ È¿°ú¸¦ ±¸ÇöÇß´Ù.
ÀÌ °ÔÀÓÀº ¾Õ¿¡¼µµ ¾ê±âÇßµíÀÌ »ý¹°À» ±¸ÇöÇÏ·Á°í ³ë·ÂÇß´Ù. °³¹ßÀÚ¿¡ µû¸£¸é ±³À°Àû È¿°úµµ ±â´ëÇÏ¸é¼ Á¦ÀÛÇß´Ù°í ÇÑ´Ù. ÃæºÐÈ÷ ±×·² °ÍÀÌ Ä³¸¯Å͵éÀº ³»ºÎ¿¡ °®°¡Áö ¿å±¸¿Í Áúº´, ¿µ¾ç¼Ò(ºñŸ¹Î µî)À» °¡Áö°í ÀÖ°í ±×°Í¿¡ µû¶ó ¿©·¯ °¡Áö ¹ÝÀÀµéÀ» ³ªÅ¸³½´Ù. ±×¸®°í Å©¸®Ãİ¡ »ç°í ÆÇ´ÜÇÒ ¶§ Àΰ£ÀÇ ³ú¸¦ Èä³»³½ Neural Net AlgorithmÀ» °£´ÜÇÏ°Ô Àû¿ëÇߴµ¥ ÀÌ ¶ÇÇÑ ±²ÀåÇÏ°Ô ´À²¸Áø´Ù. Neural Net(½Å°æ¸Á ÀÌ·Ð)Àº Àΰ£ÀÇ ³úÀÇ ÇнÀ, Ãß·Ð ¿ø¸®¸¦ Èä³»³½ ¾Ë°í¸®ÁòÀ¸·Î¼ ½ÇÁ¦ Çа迡¼´Â ÆÐÅÏÀνĿ¡ ÁÖ·Î »ç¿ëÇϰí ÀÖ´Ù.
Âü°í ÀÚ·á
1) ¡°GAME PROGRAMMING GEMS¡± Mark Deloura ¿Ü °øÀú/·ù±¤ ¿ª
-> FSM¿¡ ´ëÇÑ ³»¿ë ÂüÁ¶
2) ¡°tricks of the WINDOWS Game Programming Gurus¡± Andre LaMothe ÁöÀ½, ÀÌÁÖ¸® ¿ª, ºñ³Ê½Ã¾È °³¹ßÆÀ °¨¼ö
-> Decision Tree¿¡ ´ëÇÑ ³»¿ë ÂüÁ¶
3) http://www.gamasutra.com/features/index_ai.htm
-> Game AIÀÇ Ãß¼¼ ÂüÁ¶
-> Gameº° AIÀÇ Æ¯Â¡ ÂüÁ¶
5) http://www.gpgstudy.com/gpgiki/gpgiki.php/AILove.html
-> ¿å±¸±â¹Ý AI ³»¿ë ÂüÁ¶, Black & White AI ÂüÁ¶
6) ¡°Àΰø»ý¸í¡± ½ºÆ¼ºì ·¹ºñ ÁöÀ½, ±èµ¿±¤/°úÇм¼´ë ¿Å±è ÃâÆÇ»ç: »ç¹Î¼°¢
-> Àΰø»ý¸í¿¡ ´ëÇÑ ¼³¸í ÂüÁ¶
7) ¡°Game Developer¡± Magazine AUGUST 2001
-> Black & White AI ÂüÁ¶
8) http://www.creatures.co.uk/
-> Creature °ÔÀÓ AI ÂüÁ¶