- °³¿ä
- ½ºÅ©¸³Æ® ½Ã½ºÅÛÀÌ Å¬¶óÀÌ¾ðÆ®¿¡ ÀÖÀ» ¶§ ¹ß»ýÇÏ´Â ¹®Á¦
- ½ºÅ©¸³Æ® ½Ã½ºÅÛÀÌ ¼¹ö¿¡ ÀÖÀ» ¶§ ¹ß»ýÇÏ´Â ¹®Á¦
- ºí·¯Å· ¹®Á¦
- ´Ù¼ö¸¦ »ó´ë·Î ÇÑ ½ºÅ©¸³Æ®
- ½ÇÇà ¼º´É ¹®Á¦
- ·ç¾Æ(LUA)¸¦ »ç¿ëÇÑ ¼¹ö»çÀÌµå ½ºÅ©¸³Æ®
- Âü°í
1 °³¿ä
Ŭ¶óÀ̾ðÆ®/¼¹ö ȯ°æ¿¡¼ ¾î¶»°Ô ½ºÅ©¸³Æ®¸¦ Àß »ç¿ëÇÒ ¼ö ÀÖÀ»±î?
ÀϹÝÀûÀΠŬ¶óÀÌ¾ðÆ® only, Áï ÀԷ°ú 󸮰¡ °°Àº ¸Ó½Å¿¡¼ ÀÌ·ç¾îÁö´Â °æ¿ìÀÇ ½ºÅ©¸³Æ® ¸ð¾çÀ» »ý°¢ÇØ º¸ÀÚ.
°ÔÀÓÀÌ ½ÃÀ۵Ǿî À¯Àú°¡ ÀÚ½ÅÀÇ À̸§À» ÀÔ·ÂÇϸé NPC°¡ À̸§°ú ÇÔ²² Àλñ¸»À» ÇÏ´Â ½ºÅ©¸³Æ®!
$USERNAME = gets();
greeting = "¾È³çÇϼ¼¿ä. " + $USERNAME + " ¾¾";
say(greeting);
ÀÌ·± ½ºÅ©¸³Æ®¸¦ Ŭ¶óÀ̾ðÆ®/¼¹ö ȯ°æ¿¡¼ ¾²°íÀÚ ÇÑ´Ù¸é ¾î¶² ¹®Á¦°¡ ¹ß»ýÇϴ°¡?
2 ½ºÅ©¸³Æ® ½Ã½ºÅÛÀÌ Å¬¶óÀÌ¾ðÆ®¿¡ ÀÖÀ» ¶§ ¹ß»ýÇÏ´Â ¹®Á¦
½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÑ °á°ú°ªÀÌ ¾î¶»°Ôµç À¯ÀúÀÇ µ¥ÀÌÅͰª¿¡ ¿µÇâÀ» ¹ÌÄ¡´Â °æ¿ì, Ŭ¶óÀÌ¾ðÆ®´Â À̸¦ ¼¹ö¿¡´Ù º¯°æÇ϶ó°í ¾Ë¸± °ÍÀÌ´Ù. ¹®Á¦´Â ¼¹ö¿¡´Â ½ºÅ©¸³Æ® ½Ã½ºÅÛÀÌ Á¸ÀçÇÏÁö ¾Ê±â ¶§¹®¿¡, Ŭ¶óÀÌ¾ðÆ®°¡ º¸³»¿Â °ªÀÌ Á¤»óÀûÀÎ °ÍÀÎÁö¸¦ °Ë»çÇÒ ¹æ¹ýÀÌ ¾ø´Ù´Â °ÍÀÌ´Ù. ±×·¸´Ù°í ½ºÅ©¸³Æ® ÀÚü¸¦ À¯ÀúÀÇ µ¥ÀÌÅͰª¿¡ ¿µÇâÀ» ¹ÌÄ¡Áö ¸øÇϵµ·Ï ¼³°èÇÑ´Ù¸é ¾µ¸ð¾ø´Â ½ºÅ©¸³Æ®°¡ µÇ¾î¹ö¸°´Ù.
±×¸®°í Ŭ¶óÀÌ¾ðÆ®°¡ ½ºÅ©¸³Æ® ½Ã½ºÅÛÀ» °¡Áö°í ÀÖÀ» °æ¿ì, ´Ù¼öÀÇ Å¬¶óÀÌ¾ðÆ®¿¡ µ¿½Ã¿¡ ¿µÇâÀ» ¹ÌÄ¡¸ç ±× °á°ú°ªÀ» ÃëÇØ¾ßÇÏ´Â ½ºÅ©¸³Æ®´Â ½ÇÇàÀÌ °ï¶õÇÏ´Ù. ÀÌ ¹®Á¦´Â ¾î¶»°Ô ÇØ º¼ ¼ö°¡ ¾ø´Â ¹®Á¦´Ù.
À§ÀÇ ¹®Á¦Á¡µéÀ» °í·ÁÇØºÃÀ» ¶§ ½ºÅ©¸³Æ® ½Ã½ºÅÛÀ» Ŭ¶óÀÌ¾ðÆ®¿¡ µÎ´Â °ÍÀº À̸ðÀú¸ð·Î ¹®Á¦°¡ ¸¹Àº °Í °°´Ù.
3 ½ºÅ©¸³Æ® ½Ã½ºÅÛÀÌ ¼¹ö¿¡ ÀÖÀ» ¶§ ¹ß»ýÇÏ´Â ¹®Á¦
3.1 ºí·¯Å· ¹®Á¦
Ŭ¶óÀÌ¾ðÆ® only ȯ°æ¿¡¼´Â À§ ¿¹Á¦ÀÇ gets() ÇÔ¼ö°¡ ÀÓÀÇÀÇ ¹®ÀÚ¿À» ¸®ÅÏÇϱâ Àü±îÁö ȸéÀÌ Á¤Áö, Áï ºí·¯Å·µÇ¾îµµ º° ¹®Á¦°¡ ¾ø´Ù. ÇÏÁö¸¸ ¼¹ö¿¡¼ À¯Àú ÇÑ ¸íÀÇ ÀÔ·ÂÀ» ¹Þ¾ÆµéÀ̱â À§ÇØ Àüü ½Ã½ºÅÛÀÌ Á¤ÁöÇÑ´Ù¸é ¸»ÀÌ ¾È µÈ´Ù. ÀÌ ¹®Á¦¸¦ ÇØ°áÇϱâ À§Çؼ´Â...
½ºÅ©¸³Æ® ½Ã½ºÅÛÀÌ Preemptive Multi-tasking ¶Ç´Â ±× ºñ½ÁÇÑ ¹æ¹ýÀ» Áö¿øÇؾßÇÑ´Ù. ±×·± ±â´ÉÀÌ ¾ø´Ù¸é ½ºÅÃÀÇ ¼¼À̺ê/·Îµå ±â´É°ú ½ºÅ©¸³Æ®¸¦ ÆÄÀÏ Áß°£¿¡¼ºÎÅÍ ½ÇÇàÇÒ ¼ö ÀÖ´Â ±â´ÉÀÌ¶óµµ ÀÖ¾î¾ßÇÑ´Ù.
À¯ÀúÀÇ ÀÔ·Â ÀÚü´Â ¾îÂ÷ÇÇ ¹®ÀÚ¿À̳ª ¼ýÀÚ µîÀÇ °£´ÜÇÑ Æ÷¸ËÀ¸·Î¸¸ ÀÌ·ç¾îÁö±â ¶§¹®¿¡ º°·Î ¹®Á¦°¡ ¾È µÈ´Ù. ÀÌ·± ÀÔ·ÂÀ» ¹Þ¾ÆµéÀÏ ¼ö ÀÖ´Â ¹öÆÛ¸¦ °¢ Ŭ¶óÀÌ¾ðÆ® º°·Î ¸¸µé¾îµÐ´Ù.
½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÏ´Â µµÁß¿¡ À¯ÀúÀÇ ÀÔ·ÂÀ» ÇÊ¿ä·Î ÇÏ´Â ÇÔ¼ö¸¦ ¸¸³ª¸é ½ºÅ©¸³Æ® ½Ã½ºÅÛÀº ½ÇÇàÀ» ¸ØÃß°í, ¼¹ö ÂÊÀ¸·Î ¸®ÅÏÇÑ´Ù. ¼¹ö´Â À¯Àú¿¡°Ô ÀÔ·ÂÀÌ ÇÊ¿äÇÏ´Ù´Â ÆÐŶÀ» ³¯¸®°í, ÆÐŶÀÌ ¿À±â Àü±îÁö ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÏÁö ¾Ê´Â´Ù. À¯Àú·ÎºÎÅÍ ÆÐŶÀÌ ³¯¾Æ¿À¸é ¹öÆÛ¸¦ ä¿ì°í, ´Ù½Ã ½ºÅ©¸³Æ®¸¦ ¾Æ±î Áß´ÜÇß´ø ÁöÁ¡¿¡¼ºÎÅÍ Àç½ÇÇàÇÑ´Ù.
3.2 ´Ù¼ö¸¦ »ó´ë·Î ÇÑ ½ºÅ©¸³Æ®
¼¹ö¿¡ ½ºÅ©¸³Æ® ½Ã½ºÅÛÀÌ Á¸ÀçÇÏ´Â °æ¿ì, ´Ù¼öÀÇ Å¬¶óÀÌ¾ðÆ®¿¡°Ô µ¿½Ã¿¡ ¿µÇâÀ» ¹ÌÄ¡´Â ½ºÅ©¸³Æ®¸¦ ¸¸µé ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î "ÀÓÀÇÀÇ ¹æ ¾È¿¡ ÀÖ´Â ¸ðµç Ŭ¶óÀÌ¾ðÆ®µé¿¡°Ô ¹®Á¦¸¦ ³»°í, ´äÀ» Á¦ÀÏ »¡¸® ¸ÂÃá Ŭ¶óÀÌ¾ðÆ®¸¦ Á¦¿ÜÇÑ ´Ù¸¥ À̵鿡°Ô ¹úÄ¢À» ³»¸°´Ù." °°Àº ½ºÅ©¸³Æ® ¸»ÀÌ´Ù.
À̰ÍÀº À§ÀÇ ½Ã½ºÅÛÀÌ ±¸ÇöµÇ¾î ÀÖ´Ù¸é ±×·¸°Ô ¾î·Á¿ï °Í °°Áö´Â ¾ÊÀ» °Í °°´Ù.
3.3 ½ÇÇà ¼º´É ¹®Á¦
¼±Á¡Çü ¸ÖƼŽºÅ·ÀÌ °¡´ÉÇÑ ½ºÅ©¸³Æ® ½Ã½ºÅÛÀÌ ÀÖ´Ù°í ÇØµµ, ÀÌ°É ¼¹ö¿¡¼ ¾µ ¼ö ÀÖ´ÂÁö´Â ¸íÈ®ÇÏÁö ¾Ê´Ù. ¾î¶² ±â´ÉÀ» ÇÏ´Â ¼¹ö³Ä¿¡ µû¶ó ´Ù¸£°ÚÁö¸¸, ÀϹÝÀûÀÎ °ÔÀÓ ¼¹öÀÏ °æ¿ì Àû¾îµµ 1000¸í ÀÌ»óÀÇ Å¬¶óÀÌ¾ðÆ®°¡ Á¢¼ÓÇØ ÀÖ´Ù°í »ý°¢ÇÑ´Ù¸é ¿Ø¸¸ÇÑ ½ºÅ©¸³Æ® ½Ã½ºÅÛÀº Á¦´ë·Î ¼º´ÉÀÌ ³ª¿ÀÁö ¾ÊÀ» °ÍÀÌ´Ù. ÀÌ ¹®Á¦´Â Áö±ÝÀ¸·Î¼´Â ½ºÅ©¸³Æ® ½Ã½ºÅÛÀ» Ŭ¶óÀÌ¾ðÆ®¿¡ ³»¸®´Â ¼ö ¹Û¿¡ ¾ø´Ù°í »ý°¢ÇÑ´Ù.
4 ·ç¾Æ(LUA)¸¦ »ç¿ëÇÑ ¼¹ö»çÀÌµå ½ºÅ©¸³Æ®
·ç¾Æ°¡ 5.0ºÎÅÍ ´ÙÇàÈ÷µµ coroutineÀ̶ó´Â °ÍÀ» Á¦°øÇؼ ¼±Á¡Çü ¸ÖƼŽºÅ· ºñ½ÁÇÑ °ÍÀ» ¸¸µé ¼ö ÀÖ°Ô µÇ¾ú´Ù. À̷μ ½ºÅ©¸³Æ® ½Ã½ºÅÛÀÌ ¼¹ö¿¡ ÀÖÀ» ¶§ ¹ß»ýÇÏ´Â °¡Àå Áß´ëÇÑ ¹®Á¦ÀÎ ºí·¯Å· ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ°Ô µÇ¾ú´Ù. ´ÙÀ½ÀÇ ¼Ò½º¸¦ º¸ÀÚ.
systemQuestion = ""
systemAnswer = ""
LUAVM_INPUT_BUFFER = {}
function ask(...)
local i = 1
while i <= arg.n do
if i == 1 then
systemQuestion = arg[i]
else
systemAnswer = systemAnswer + "|" + arg[i]
end
i = i + 1
end
while true do
-- ¹öÆÛ¿¡ µé¾îÀÖ´Â À¯Àú ÀÔ·ÂÀÌ ¾ø´Ù¸é
-- Ŭ¶óÀÌ¾ðÆ®¿¡°Ô ÆÐŶÀ» º¸³»¶ó°í ¾Ë·ÁÁÖ°í
-- ½ÇÇàÀ» ÁßÁöÇÑ´Ù.
if (table.getn(LUAVM_INPUT_BUFFER) == 0) then
POST_INPUT_REQUEST()
coroutine.yield("")
-- ¹öÆÛ¿¡ ÀÔ·ÂÀÌ ÀÖ´Ù¸é ¸®ÅÏÇÏ¸é µÈ´Ù.
-- ¸®ÅÏÇϱâ Àü¿¡ ¹öÆÛ¿¡¼ Áö¿ö¾ßÇÑ´Ù.
else
local return_value = LUAVM_INPUT_BUFFER[1]
table.remove(LUAVM_INPUT_BUFFER, 1)
return return_value
end
end
return ""
end coroutine.yield("")¶ó´Â ºÎºÐÀÌ º¸À̴µ¥ ÀÌ´Â ·ç¾Æ VMÀÇ ½ÇÇàÀ» ÁßÁöÇϰí C/C++ ÂÊÀ¸·Î ½ÇÇà ÄÁÅØ½ºÆ®¸¦ µ¹·ÁÁØ´Ù. ÀÌ ÇÔ¼ö¸¦ ÀÌ¿ëÇϸé À¯ÀúÀÇ ÀÔ·ÂÀ» ÀúÀåÇÏ´Â ¸®½ºÆ®°¡ Â÷ ÀÖÀ» °æ¿ì¿¡´Â À̸¦ ÀÌ¿ëÇØ ½ºÅ©¸³Æ®¸¦ °è¼Ó ½ÇÇàÇÏ°í ¾Æ´Ò °æ¿ì¿¡´Â À¯Àú¿¡°Ô ÀÔ·ÂÀ» ¿ä±¸ÇÏ´Â ÆÐŶÀ» º¸³¾ ¼ö ÀÖ°Ô µÇ´Â °ÍÀÌ´Ù. POST_INPUT_REQUEST ÇÔ¼ö°¡ ÀÌ ¿ªÇÒÀ» ÇÏ´Â C ÇÔ¼ö´Ù.
int POST_INPUT_REQUEST(lua_State* L)
{
LuaVM* pLuaVM = LuaVM::getLuaVM(L);
AssertRead(pLuaVM);
MSGQuestion msgQuestion;
msgQuestion.setQuestion(LuaAPI::getLuaString(L, "systemQuestion"));
Tokenizer t("|", "", false);
t.tokenize(LuaAPI::getLuaString(L, "systemAnswer"));
for (size_t i=0; i<t.size(); i++)
{
msgQuestion.enqueueAnswer(t.at(i));
}
pLuaVM->getClient()->sendPacket(&msgQuestion);
return 0;
}
5 Âü°í
SeriousMoin v1 (koMoinMoin 1.0a4 Modified)