°ÔÀÓÀ» ±¸¼ºÇÏ´Â °¡Àå ¿øÀÚÀûÀÎ ´ÜÀ§ÀÎ Ä«µå¿Í Ä«µåÀÇ ÁýÇÕÀ» °ü¸®Çϴ Ŭ·¡½º°¡ ¿Ï¼ºµÇ¾ú´Ù. ÇÏÁö¸¸ ÀÌ µÑÀº ½ÇÁ¦ °ÔÀÓ¿¡ Á÷Á¢ÀûÀ¸·Î µîÀåÇÏÁö´Â ¾Ê´Âµ¥ ÀÌÁ¦ °ÔÀÓ¿¡ ¹Ù·Î »ç¿ëÇÏ´Â ½ÇüµéÀ» Ŭ·¡½º·Î ¸¸µé¾î º¸ÀÚ. ÀÌ ´Ü°è¿¡¼´Â ÈÅõÆÇÀÇ ¸ð¾ç°ú ¿î¿ë ±ÔÄ¢À» Àß »ó»óÇØ °¡¸é¼ Ŭ·¡½º¸¦ µðÀÚÀÎÇØ¾ß ÇÑ´Ù.
µ¥Å©´Â Ä«µå¸¦ ½×¾Æ ³õ´Â °÷À̸ç ÈçÈ÷ ´ã¿äÀÇ Áß¾Ó¿¡ µÚÁý¾î¼ ³õ¿©Áø´Ù. ¿©±â¼ Ä«µå¸¦ ÇÑÀ徿 ²¨³» Ç÷¹À̾°Ô ³ª´©¾î Áֱ⵵ ÇÏ°í ´ã¿ä¿¡µµ ÆÐ¸¦ ±ò¾Æ ³õÀ¸¸ç À§¿¡¼ºÎÅÍ ¼ø¼´ë·Î ÇÑÀ徿 µÚÁý¾î °¡¸ç °ÔÀÓÀÌ ÁøÇàµÈ´Ù. µ¥Å©ÀÇ Ä«µå¸¦ ´Ù µÚÁýÀ¸¸é °ÔÀÓÀÌ Á¾·áµÈ´Ù. µ¥Å©´Â Ä«µåÀÇ ÁýÇÕÀ̹ǷΠCCardSetÀ¸·ÎºÎÅÍ »ó¼Ó¹Þ´Â´Ù. Áï CDeck°ú CCardSetÀº ÀüÇüÀûÀÎ IS A °ü°è¶ó°í ÇÒ ¼ö ÀÖÀ¸¸ç ´Ü¼øÇÑ Ä«µå ÁýÇÕ¿¡ ºñÇØ ¸î °¡Áö Ư¼öÇÑ µ¿ÀÛÀ» Ãß°¡·Î ´õ °¡Áø´Ù.
// ´ã¿ä Áß¾Ó¿¡ Ä«µå¸¦ ½×¾Æ ³õ´Â µ¥Å©
class CDeck : public CCardSet
{
public:
CDeck(int asx,int asy) : CCardSet(asx,asy) { ; }
void Shuffle() {
int i,n;
for (i=0;i<MaxCard;i++) {
do {
n=random(MaxCard);
} while (Card[n].Name[0] != NULL);
Card[n]=HwaToo[i];
Num++;
}
}
SCard Pop() { return RemoveCard(Num-1); }
bool IsEmpty() { return Num==0; }
bool IsNotLast() { return Num > 1; }
void Draw(bool bFlip) {
gotoxy(sx,sy);
cout << "??? " << (bFlip ? Card[Num-1].Name:" ");
}
};
ºÎ¸ð Ŭ·¡½ºÀÎ CCardSet¿¡ Ä«µå ÁýÇÕÀ» Ç¥ÇöÇϱâ À§ÇØ ÇÊ¿äÇÑ ¸â¹öµé(Card, Num, sx, sy)ÀÌ ¸ðµÎ Á¤ÀǵǾî ÀÖÀ¸¹Ç·Î CDeck°¡ Ãß°¡·Î ¸â¹ö¸¦ °¡Áú ÇÊ¿ä´Â ¾ø´Ù. »ý¼ºÀÚ´Â Ãâ·ÂµÉ À§Ä¡¸¸ Àü´Þ¹Þ¾Æ ºÎ¸ð Ŭ·¡½ºÀÇ »ý¼ºÀÚ¸¦ È£ÃâÇÏ¸ç ¼ÒÀ¯ÇÑ Ä«µå°¡ ¾ø´Â ºó »óÅ·Π»ý¼ºµÈ´Ù. µ¥Å©¿¡ Ä«µå¸¦ ³Ö´Â µ¿ÀÛÀº Shuffle ¸â¹ö ÇÔ¼ö°¡ ´ã´çÇÑ´Ù.
ShuffleÀº Ä«µå¸¦ Ãß°¡Ç쵂 ¿¹Ãø ºÒ°¡´ÉÇϵµ·Ï ¹«ÀÛÀ§·Î Ä«µå¸¦ ¹èÄ¡ÇÑ´Ù. HwaToo ¹è¿¿¡ ÀÖ´Â Ä«µåµéÀ» ¼ø¼´ë·Î ÇÑÀ徿 ²¨³» µ¥Å©ÀÇ ÀÓÀÇ À§Ä¡¿¡ ¸¶±¸ÀâÀÌ·Î Áý¾î ³Ö´Â °ÍÀÌ´Ù. À̶§ ÀÌ¹Ì Ä«µå¸¦ ³ÖÀº À§Ä¡¿¡´Â Áߺ¹Çؼ ³ÖÁö ¸»¾Æ¾ß ÇϹǷΠ³¼ö·Î À§Ä¡¸¦ °í¸¦ ¶§ ºó ÀÚ¸®ÀÎÁö¸¦ ¹Ýµå½Ã Á¡°ËÇØ¾ß ÇÑ´Ù. ÀÌ ºóÄ ÆÇÁ¤À» À§ÇØ Card ¹è¿ÀÇ ¸ðµç Ä«µå°¡ ºó Ä«µå·Î ÃʱâȵǾî ÀÖÀ¸¸ç ±×·¡¼ SCard Ŭ·¡½ºÀÇ µðÆúÆ® »ý¼ºÀÚ°¡ ¾²·¹±â¸¦ Ä¡¿ö ³õ´Â °ÍÀÌ´Ù.
ºÎ¸ð Ŭ·¡½ºÀÎ CCardSet¿¡´Â Ä«µå¸¦ »ðÀÔÇÏ´Â InsertCard¶ó´Â ÇÔ¼ö°¡ ÀÌ¹Ì Á¤ÀǵǾî ÀÖ¾î ÀÌ ÇÔ¼ö·Î Ä«µå¸¦ »ðÀÔÇÒ ¼öµµ ÀÖ´Ù. ±×·¯³ª InsertCard´Â Ä«µå¸¦ ¼ø¼´ë·Î Á¤·ÄÇØ¼ »ðÀÔÇϱ⠶§¹®¿¡ µ¥Å©ÀÇ Ä«µå¸¦ ÃʱâÈÇÏ´Â ¸ñÀûÀ¸·Î´Â ÀûÇÕÇÏÁö ¾Ê´Ù. µ¥Å©ÀÇ Ä«µåµéÀº ¼ø¼¸¦ ¿¹ÃøÇÒ ¼ö ¾ø¾î¾ß ÇϹǷΠ»ó¼Ó¹ÞÀº InsertCard ÇÔ¼ö¸¦ ¾µ ¼ö ¾ø°í ShuffleÀ̶ó´Â º°µµÀÇ ÇÔ¼ö·Î Ãʱâȸ¦ ÇÑ´Ù. HwaToo ¹è¿¿¡´Â Ä«µåµéÀÌ ¸¶Ä¡ ÈÅõ¸¦ óÀ½ »ê °Íó·³ °¡Áö·±È÷ Á¤·ÄµÇ¾î ÀÖÁö¸¸ µ¥Å©¿¡ µé¾î°¥ ¶§´Â ¸¶±¸ ¼¯¿©¼ µé¾î°£´Ù.
µ¥Å©´Â ÀÏ´Ü ÃʱâȵǸé À§¿¡¼ºÎÅÍ ¼ø¼´ë·Î Ä«µå¸¦ ÇÑÀ徿 »©³»±â¸¸ ÇÑ´Ù. ±×·¡¼ Ä«µå¸¦ »© ³»´Â Pop ÇÔ¼ö¸¸ ÀÖ°í ´Ù½Ã Ä«µå¸¦ »ðÀÔÇÏ´Â Push ÇÔ¼ö´Â Çʿ䰡 ¾ø´Ù. °í½ºÅé °ÔÀÓ¿¡¼ µ¥Å©¿¡ Ä«µå¸¦ ´Ù½Ã ¹Ý³³ÇÏ´Â °æ¿ì´Â Àý´ë·Î ¾ø±â ¶§¹®ÀÌ´Ù. Pop ÇÔ¼ö´Â CCardSetÀ¸·ÎºÎÅÍ »ó¼Ó¹ÞÀº RemoveCard ÇÔ¼ö·Î Num-1¹ø, Áï ¸¶Áö¸· Ä«µå¸¦ ÇÑ Àå Á¦°ÅÇÏ¸é¼ ÀÌ Ä«µå¸¦ ¸®ÅÏÇÑ´Ù. ÀÌ·¸°Ô »©³½ Ä«µå´Â Ç÷¹À̾ ´ã¿ä¿¡°Ô·Î º¸³»Áú °ÍÀÌ´Ù.
µ¥Å©°¡ Ä«µå¸¦ ¼¯°í ÇÑÀ徿 »©³»´Â °úÁ¤Àº ½ÇÁ¦·Î ¿ì¸®°¡ °í½ºÅé °ÔÀÓÀ» ÇÏ´Â °úÁ¤À» ±×´ë·Î ¸ðµ¨¸µÇß´Ù°í ÇÒ ¼ö ÀÖ´Ù. ½Ç°ÔÀÓ¿¡¼´Â Ä«µåµéÀ» ¹Ù´Ú¿¡ ³õ°í ¸¶±¸ ¹®Áö¸£°Å³ª Áý¾î µç »óÅ¿¡¼ ŹŹŹ Ä¡¸é¼ ÃʱâÈÇϴµ¥ ÀÌ °úÁ¤À» ShuffleÀÌ ±×´ë·Î Èä³»³»´Â °ÍÀÌ´Ù. Ä«µå°¡ ¼¯ÀÌ¸é ´ÙÀ½À¸·Î ÀÌ Ä«µå¸¦ Ç÷¹À̾î¿Í ´ã¿ä¿¡ ÇÑÀ徿 ¹èºÐÇϴµ¥ ÀÌ µ¿ÀÛÀº Pop ÇÔ¼ö°¡ ´ã´çÇÑ´Ù.
IsEmpty¿Í IsNotLast ÇÔ¼ö´Â µ¥Å©¿¡ ³²¾Æ ÀÖ´Â Ä«µå °³¼ö¸¦ Á¶»çÇÑ´Ù. IsEmpty´Â ³²Àº Ä«µå °³¼ö°¡ 0ÀÏ ¶§ true¸¦ ¸®ÅÏÇϴµ¥ °ÔÀÓ ³¡ ÆÇÁ¤À» À§ÇØ »ç¿ëµÈ´Ù. µ¥Å©¿¡ Ä«µå°¡ ÇÑ Àåµµ ³²¾Æ ÀÖÁö ¾ÊÀ¸¸é ½ÂºÎ¿¡ »ó°ü¾øÀÌ °ÔÀÓÀ» ³¡³»¾ß ÇÑ´Ù. IsNotLast´Â ¸¶Áö¸· ÆÇÀÎÁö ¾Æ´ÑÁö¸¦ Á¶»çÇϴµ¥ ³²Àº Ä«µå°¡ 1 Ãʰú, Áï µÎ Àå ÀÌ»óÀ̶ó¸é ¾ÆÁ÷Àº ¸·ÆÇÀÌ ¾Æ´Ï´Ù. ¼³»ç, ½Ï¾µÀÌ, µû´Ú µîÀÇ ±ÔÄ¢µéÀº ¸·ÆÇ¿¡´Â ÀüºÎ ÀÎÁ¤µÇÁö ¾Ê´Âµ¥ ÀÌ ÇÔ¼ö·Î ¸·ÆÇ ¿©ºÎ¸¦ Á¶»çÇÏ¿© ÀÌ ±ÔÄ¢ÀÇ Àû¿ë ¿©ºÎ¸¦ Á¶»çÇÑ´Ù. ¸·ÆÇ¿¡´Â ÂÊÀÌ ¾ÆÁÖ ÀÚÁÖ ÀϾ¸ç °¡Àå ¸¶Áö¸·¿¡´Â Ç×»ó ½Ï¾µÀÌÀÏ ¼ö¹Û¿¡ ¾ø±â ¶§¹®ÀÌ´Ù.
¸·ÆÇÀÌ ¾Æ´Ï¶ó´Â Á¶°ÇÀº µ¥Å©°¡ ºñÁö ¾Ê¾Ò´Ù´Â Á¶°Ç°ú´Â È®½ÇÈ÷ ´Ù¸£¹Ç·Î !IsEmpty() Á¶°ÇÀ» ¾µ ¼ö´Â ¾ø´Ù. óÀ½ ½ÃÀÛÇÑ »ç¶÷(¼±)ÀÌ ¸¶Áö¸· Ä«µå¸¦ µÑ ¶§´Â µ¥Å©¿¡ ¾ÆÁ÷ ÇÑ ÀåÀÌ ³²¾Æ ÀÖÀ¸¸ç µÚ¿¡ ½ÃÀÛÇÑ »ç¶÷ÀÌ ¸¶Áö¸· Ä«µå¸¦ µÑ ¶§´Â µ¥Å©°¡ ºñ°Ô µÇ´Âµ¥ µÎ °æ¿ì ¸ðµÎ ¸·ÆÇÀ¸·Î ÀÎÁ¤ÇØ¾ß ÇÑ´Ù. ±×·¡¼ ¸·ÆÇÀÎÁö¸¦ Á¶»çÇÏ´Â º°µµÀÇ ÇÔ¼ö¸¦ ¸¸µé¾î µÎ¾ú´Ù.
Draw ÇÔ¼ö´Â ȸ鿡 µ¥Å©¸¦ ±×¸°´Ù. µ¥Å©´Â Ä«µå¸¦ ¿©·¯ Àå °¡Áö°í ÀÖ±â´Â ÇÏÁö¸¸ ¸ðµÎ Æ÷°³Á® ÀÖ°í ´ë°³ÀÇ °æ¿ì µÚÁý¾îÁ® ÀÖÀ¸¹Ç·Î Ä«µå¸¦ ÀÏÀÏÀÌ Ãâ·ÂÇÒ ÇÊ¿ä¾øÀÌ ???¸¸ Ãâ·ÂÇÏ¸é µÈ´Ù. ´Ü, µ¥Å©¿¡¼ Ä«µå ÇÑÀåÀ» ¸· µÚÁý¾úÀ» ¶§¸¸ ÀÌ Ä«µå°¡ ¹«¾ùÀÎÁö È®ÀÎÇϱâ À§ÇØ ¿·¿¡ µÚÁýÀº Ä«µå ÇÑ ÀåÀ» Ãâ·ÂÇÑ´Ù. Draw ÇÔ¼öÀÇ bFlipÀμö´Â Á¦ÀÏ ÀÀåÀ» µÚÁý¾î º¸¿©ÁÙ °ÍÀΰ¡ ¾Æ´Ñ°¡¸¦ ÁöÁ¤ÇÑ´Ù.
µ¥Å©ÀÇ ±â´ÉÀº ´Ù¸¥ °Íµé¿¡ ºñÇØ ºñ±³Àû °£´ÜÇÑ ÆíÀÌ´Ù. Ãâ·Â Çüŵµ ´Ü¼øÇϰí Ä«µå¸¦ ¹«ÀÛÀ§·Î ¼¯¾î¼ °¡Áö°í ÀÖ´Ù°¡ Pop ¿äûÀÌ ÀÖÀ» ¶§¸¶´Ù ÇÑ À徿 »© Áֱ⸦ °ÔÀÓÀÌ ³¡³¯ ¶§±îÁö ¹Ýº¹Çϱ⸸ ÇÏ¸é µÈ´Ù. ±×·¡¼ Ŭ·¡½º ±æÀ̵µ ª°í ÀÌÇØÇϱ⵵ ¾ÆÁÖ ½±´Ù.
CPlayer´Â °ÔÀÓÀ» ÇÏ´Â Ç÷¹À̾ Ãß»óÈÇÑ Å¬·¡½ºÀÌ´Ù. °ÔÀÓ¿¡ Âü¿©ÇÏ´Â »ç¶÷Àº ÃÖÃÊ ÀÏÁ¤ °³¼öÀÇ Ä«µå(¸Â°íÀÇ °æ¿ì 10Àå, 3¸í °í½ºÅéÀÇ °æ¿ì 7Àå)¸¦ ¹Þ°í ÀÌ Ä«µåµéÀ» ÇÑ À徿 ³» °¡¸ç °ÔÀÓÀ» ÁøÇàÇÑ´Ù. CPlayer Ŭ·¡½º´Â Ç÷¹À̾ ¹ÞÀº Ä«µåÀÇ ÁýÇÕÀ» °ü¸®ÇÑ´Ù. Ç÷¹À̾ Ä«µå¸¦ ¿©·¯ Àå °¡Áö¹Ç·Î CCardSetÀ¸·ÎºÎÅÍ »ó¼Ó¹Þ´Â´Ù.
// °ÔÀÓÀ» ÇÏ´Â Ç÷¹À̾î
class CPlayer : public CCardSet
{
public:
CPlayer(int asx,int asy) : CCardSet(asx,asy) { ; }
void Draw(bool MyTurn) {
int i,x;
for (i=0,x=sx;i<Num;i++,x+=CardGap) {
gotoxy(x,sy);
cout << Card[i];
if (MyTurn) {
gotoxy(x,sy+1);
cout << '[' << i+1 << ']';
}
}
}
};
Ãß°¡ ¸â¹ö´Â ¾ø°í »ý¼ºÀÚ´Â CDeck¿Í ¸¶Âù°¡Áö·Î À§Ä¡¸¸ ÃʱâÈÇÑ´Ù. ¸â¹ö ÇÔ¼ö´Â Ç÷¹À̾îÀÇ ÆÐ¸¦ ±×¸®´Â Draw¹Û¿¡ ¾ø´Ù. Ä«µåÀÇ ÆÐ¸¦ ¼ø¼´ë·Î ȸ鿡 ³ª¿Ç쵂 ÀÚ±â Â÷·Ê(MyTurn)ÀÏ ¶§´Â ³¾ Ä«µå¸¦ ÀԷ¹ޱâ À§ÇØ °¢ Ä«µå ¾Æ·¡ÂÊ¿¡ ÀÏ·Ã ¹øÈ£¸¦ Ãâ·ÂÇÑ´Ù. 10°³ÀÇ Ä«µå¸¦ °¡Áö°í ÀÖÀ» ¶§ Draw ÇÔ¼öÀÇ Ãâ·Â °á°ú´Â ´ÙÀ½°ú °°´Ù.
Űº¸µå·ÎºÎÅÍ ³¾ Ä«µå¸¦ ÀÔ·Â¹Þ¾Æ¾ß Çϱ⠶§¹®¿¡ ÀÏ·Ã ¹øÈ£¸¦ ¾µ ¼ö¹Û¿¡ ¾ø´Ù. ÀÚ±â Â÷·Ê°¡ ¾Æ´Ò ¶§´Â ¼±Åà ¹øÈ£¸¦ Ãâ·ÂÇÏÁö ¾Ê°í Ä«µå¸¸ Ãâ·ÂÇÑ´Ù. Ä«µåµéÀº »ðÀÔÇÒ ¶§ºÎÅÍ InsertCard¿¡ ÀÇÇØ Á¤·ÄµÇ¾î ÀÖÀ¸¹Ç·Î ¼ø¼´ë·Î Ãâ·ÂÇϱ⸸ ÇÏ¸é ¿À¸§Â÷¼øÀ¸·Î Á¤·ÄµÈ´Ù.
´ã¿ä´Â ȸé Áß¾Ó¿¡ À§Ä¡ÇÏ¸ç ½ÇÁ¦·Î °ÔÀÓÀÌ ÁøÇàµÇ´Â °÷ÀÌ´Ù. ÀÌ °÷¿¡ µ¥Å©°¡ ÀÖ°í ÆîÃÄ ³õÀº Ä«µåµéÀÌ Àִµ¥ Ç÷¹À̾î´Â ÀÚ½ÅÀÌ °¡Áø Ä«µåÁß ´ã¿äÀÇ Ä«µå¿Í ÀÏÄ¡ÇÏ´Â °ÍÀ» ³»°í´Â µÎ Ä«µå¸¦ ¸Ô´Â´Ù. ´ã¿äÀÇ Æ¯Â¡À» Àß °üÂûÇØ º¸¸é Ç÷¹À̾î¿Í À¯»çÇÑ Á¡À» ¸¹ÀÌ ¹ß°ßÇÒ ¼ö Àִµ¥ ÀÏÁ¤ °³¼öÀÇ Ä«µå¸¦ °¡Áø´Ù´Â Á¡ÀÌ µ¿ÀÏÇϰí Ä«µå¸¦ Á¤·ÄÇØ¼ Ãâ·ÂÇÏ´Â ¹æ½Äµµ µ¿ÀÏÇÏ´Ù. ±×·¡¼ CPlayer·ÎºÎÅÍ »ó¼Ó ¹Þ¾Ò´Ù.
// °ÔÀÓÀÌ ÁøÇàµÇ´Â ´ã¿ä
class CBlanket: public CPlayer
{
public:
CBlanket(int asx,int asy) : CPlayer(asx,asy) { ; }
void Draw() {
CPlayer::Draw(false);
}
void DrawSelNum(int *pSame) {
int n;
int *p;
for (n=1,p=pSame;*p!=-1;p++,n++) {
gotoxy(sx+*p*CardGap,sy-1);
cout << '[' << n << ']';
}
}
void DrawTempCard(int idx,SCard C) {
gotoxy(sx+idx*CardGap,sy+1);
cout << C;
}
};
±×·¯³ª ´ã¿ä°¡ Á÷Á¢ °ÔÀÓ¿¡ Âü¿©ÇÏ´Â °ÍÀº ¾Æ´Ï¹Ç·Î »ç¿ëÀÚ°¡ ´ã¿äÀÇ Ä«µå¸¦ Á÷Á¢ÀûÀ¸·Î ¼±ÅÃÇÒ ÇÊ¿ä´Â ¾ø´Ù. ±×·¡¼ ´ã¿äÀÇ Draw ÇÔ¼ö´Â ºÎ¸ð Ŭ·¡½ºÀÇ Draw ÇÔ¼ö¸¦ ±×´ë·Î ºÎ¸£µÇ ¼±ÅÃÀ» À§ÇÑ ÀÏ·Ã ¹øÈ£¸¦ Ãâ·ÂÇÏÁö ¾ÊÀ¸¸ç MyTurn Àμö´Â Ç×»ó falseÀÌ´Ù.
´ë½Å ´ã¿ä´Â Ç÷¹À̾ ºñÇØ µÎ °¡Áö Ãâ·ÂÀÌ ´õ ÇÊ¿äÇÏ´Ù. »ç¿ëÀÚ°¡ Ä«µå¸¦ ³ÂÀ» ¶§ ´ã¿ä¿¡ ¼ýÀÚ°¡ ÀÏÄ¡ÇÏ´Â Ä«µå°¡ µÎ °³ ÀÖ´Ù¸é µÑ Áß ¾î¶² Ä«µå¸¦ ¸ÔÀ» °ÍÀÎÁö¸¦ ¼±ÅÃ¹Þ¾Æ¾ß ÇÑ´Ù. Ä«µå¸¦ ¼±ÅÃÇÏ´Â ¹æ¹ýÀÌ Å°º¸µå»ÓÀ̹ǷΠÀÏÄ¡ÇÏ´Â Ä«µå¿¡ ´ëÇØ¼¸¸ ÀÏ·Ã ¹øÈ£¸¦ Ãâ·ÂÇØ¾ß ÇÑ´Ù. DrawSelNum ÇÔ¼ö°¡ ÀÌ Ãâ·ÂÀ» ´ã´çÇÑ´Ù. ¿¹¸¦ µé¾î 8ÀÌ µÎ Àå ±ò·Á ÀÖ´Â »óÅ¿¡¼ Ç÷¹À̾ 8À» ³Â´Ù¸é ¾î¶² Ä«µå¸¦ ¸Ô°í ½ÍÀºÁö ¼±ÅÃ¹Þ¾Æ¾ß Çϴµ¥ À̸¦ À§ÇØ 8¹ø Ä«µå À§ÂÊ¿¡ ÀÏ·Ã ¹øÈ£¸¦ Ãâ·ÂÇÑ´Ù.
Ç÷¹À̾î´Â ÀÌ µÎ Ä«µå Áß ¸Ô°í ½ÍÀº Ä«µåÀÇ ÀÏ·Ã ¹øÈ£¸¦ ´©¸¥´Ù. µ¥Å©¿¡¼ µÚÁýÀº Ä«µåÀÇ °æ¿ìµµ ¸¶Âù°¡Áö 󸮰¡ ÇÊ¿äÇÏ´Ù.
Ç÷¹À̾ Ä«µå¸¦ ¸ÔÀ¸¸é ³½ Ä«µå¸¦ Àá½Ã ´ã¿ä¿¡ ¿Ã·Á ³õ¾Æ¾ß ÇÑ´Ù. ÀÌ Ä«µå°¡ È®½ÇÈ÷ Ç÷¹À̾îÀÇ °ÍÀÌ µÉ °ÍÀΰ¡ ¾Æ´Ñ°¡´Â µ¥Å©ÀÇ Ä«µå±îÁö µÚÁý¾î ºÁ¾ß ¾Ë ¼ö ÀÖÀ¸¹Ç·Î ¾ÆÁ÷ ¸ÔÀº °ÍÀ¸·Î È®Á¤Çؼ´Â ¾ÈµÈ´Ù. Àß ¾Ë´Ù½ÃÇÇ °í½ºÅé¿¡´Â ¼³»ç¶ó´Â ±ÔÄ¢ÀÌ ÀÖ¾î ¸ÔÀº °É µµ·Î ³» ³ö¾ß ÇÏ´Â °æ¿ìµµ ÀÖ´Ù. ±×·¡¼ ÀÓ½ÃÀûÀ¸·Î Ç÷¹À̾îÀÇ Ä«µå¸¦ ´ã¿ä¿¡ Àá½Ã ±×·Á ³õ´Âµ¥ ÀÌ Ã³¸®´Â DrawTempCard ÇÔ¼ö°¡ ´ã´çÇÑ´Ù. ¿¹¸¦ µé¾î ±ò·Á ÀÖ´Â 5¿À Ä«µå¸¦ 5ÇÇ Ä«µå¸¦ ³»¼ ¸Ô¾ú´Ù¸é ȸ鿡 ´ÙÀ½°ú °°ÀÌ Ç¥½ÃµÈ´Ù.
º° ´Ù¸¥ ÀÏÀÌ ¾øÀ¸¸é ÀÌ µÎ Ä«µå¸¦ Ç÷¹À̾ ¸Ô°Ô µÈ´Ù´Â Ç¥½ÄÀÌ´Ù. ÀÌ·± Áß°£ °úÁ¤À» Ãâ·ÂÇÏÁö ¾ÊÀ¸¸é Ç÷¹À̾î´Â °ÔÀÓÀÌ ¾î¶»°Ô ÁøÇàµÇ°í ÀÖ´ÂÁö¸¦ ¸íÈ®È÷ ¾ËÁö ¸øÇÒ °ÍÀÌ´Ù.
CPlayerPae Ŭ·¡½º´Â Ç÷¹À̾ °ÔÀÓÁß¿¡ ¸ÔÀº ÆÐ¿Í Á¡¼ö¸¦ °ü¸®ÇÑ´Ù. CPlayer°¡ ¸ÔÀº ÆÐ¸¦ °ü¸®Çϵµ·Ï ¸ðµ¨¸µÇÒ ¼öµµ ÀÖÁö¸¸ °ÔÀÓ¿¡ Âü¿©ÇÏ´Â Ä«µå¿Í ÀÌ¹Ì ¸ÔÀº Ä«µå´Â ½Çü°¡ ´Ù¸£¹Ç·Î º°µµÀÇ Å¬·¡½º·Î ºÐ¸®ÇÏ´Â °ÍÀÌ ÇÕ¸®ÀûÀÌ´Ù. Ä«µåÀÇ ÁýÇÕÀÎ °ÍÀº µ¿ÀÏÇϹǷΠCCardSetÀ¸·ÎºÎÅÍ »ó¼Ó¹Þ´Â´Ù.
// Ç÷¹À̾ ¸ÔÀº Ä«µåÀÇ ÁýÇÕ
class CPlayerPae : public CCardSet
{
private:
int nGo;
public:
int OldScore;
CPlayerPae(int asx,int asy) : CCardSet(asx,asy) { OldScore=6;nGo=0; }
void Reset() { CCardSet::Reset();OldScore=6;nGo=0; }
int GetGo() { return nGo; }
void IncreaseGo() { nGo++; }
void Draw();
SCard RemovePee();
int CalcScore();
};
void CPlayerPae::Draw() {
int i,kind;
int x[4]={sx,sx,sx,sx},py=sy+3;
for (i=0;i<Num;i++) {
kind=Card[i].GetKind();
if (kind < 3) {
gotoxy(x[kind],sy+kind);
x[kind]+=CardGap;
} else {
gotoxy(x[3],py);
x[3]+=CardGap;
if (x[3] > 75) {
x[3]=sx;
py++;
}
}
cout << Card[i];
}
gotoxy(sx+20,sy);
cout << "Á¡¼ö:" << CalcScore() << "Á¡, " << nGo << "°í";
}
SCard CPlayerPae::RemovePee() {
int idx;
idx=FindFirstCard("ÇÇ");
if (idx != -1) {
return RemoveCard(idx);
}
return SCard();
}
int CPlayerPae::CalcScore() {
int i,kind,n[4]={0,};
int NewScore;
static int gscore[]={0,0,0,3,4,15};
for (i=0;i<Num;i++) {
kind=Card[i].GetKind();
n[kind]++;
}
NewScore=gscore[n[0]];
if (n[0] == 3 && FindFirstCard("B±¤") != -1) NewScore--;
if (n[1] >= 5) NewScore += (n[1]-4);
if (n[2] >= 5) NewScore += (n[2]-4);
if (n[3] >= 10) NewScore += (n[3]-9);
if
(FindFirstCard("8½Ê")!=-1 && FindFirstCard("5½Ê")!=-1
&& FindFirstCard("2½Ê")!=-1) NewScore += 5;
if
(FindFirstCard("1¿À")!=-1 && FindFirstCard("2¿À")!=-1
&& FindFirstCard("3¿À")!=-1) NewScore += 3;
if (FindFirstCard("4¿À")!=-1
&& FindFirstCard("5¿À")!=-1 && FindFirstCard("7¿À")!=-1)
NewScore += 3;
if
(FindFirstCard("9¿À")!=-1 && FindFirstCard("J¿À")!=-1
&& FindFirstCard("6¿À")!=-1) NewScore += 3;
return NewScore;
}
»ó¼Ó¹ÞÀº Ä«µåÀÇ ÁýÇÕ ¿Ü¿¡µµ ÀÌÀü Á¡¼ö¿Í °í ȸ¼ö¸¦ ¸â¹ö·Î °¡Áö´Âµ¥ ÀÌÀü Á¡¼öÀÎ OldScore´Â ¿ÜºÎ¿¡¼µµ ÀÚÁÖ ÂüÁ¶Çϰí Á¡¼ö°¡ Ãß°¡·Î ¹ß»ýÇßÀ» ¶§ °»½ÅÇØ¾ß ÇϹǷΠ°ø°³µÇ¾î ÀÖÁö¸¸ °í ȸ¼ö´Â ¹Ýµå½Ã 1¾¿ Áõ°¡ÇØ¾ß ÇÑ´Ù´Â ±ÔÄ¢ÀÌ ÀÖ¾î ¼û°ÜÁ® ÀÖ´Ù. ¿ÜºÎ¿¡¼´Â GetGoÇÔ¼ö·Î ÇöÀç °í ȸ¼ö¸¦ Á¶»çÇϰųª ¶Ç´Â IncreaseGo ÇÔ¼ö·Î °í ȸ¼ö¸¦ Áõ°¡½Ãų ¼ö¸¸ ÀÖ´Ù. ÇѲ¨¹ø¿¡ µÎ ¹ø °í´Â °ÔÀÓ ±ÔÄ¢»ó ºÒ°¡ÇÏ¸ç °í ȸ¼ö°¡ °¨¼ÒÇÏ´Â Àϵµ ¾ø´Ù.
»ý¼ºÀÚ´Â À§Ä¡¸¦ ÃʱâÈÇϰí OldScore´Â 6Á¡À¸·Î, °í ȸ¼ö´Â 0¹øÀ¸·Î ÃʱâÈÇÑ´Ù. OldScore°¡ 6Á¡À¸·Î ÃʱâȵǴ ÀÌÀ¯´Â ¸Â°í¿¡¼ ÃÖÃÊ·Î °í, ½ºÅéÀ» ¼±ÅÃÇÒ ¼ö ÀÖ´Â ÃÖ¼Ò Á¡¼ö°¡ 7Á¡À̱⠶§¹®ÀÌ´Ù. main¿¡¼´Â ÇöÀç Á¡¼ö¿Í ÀÌÀü Á¡¼ö¸¦ ºñ±³ÇØ º¸°í ÀÌÀü Á¡¼öº¸´Ù ´õ ¸¹Àº Á¡¼ö¸¦ ȹµæÇßÀ» ¶§¸¸ °í, ½ºÅéÀ» ¼±ÅÃÇÒ ±âȸ¸¦ Á¦°øÇÑ´Ù. 3Á¡À̳ª 5Á¡Àº ¾ò¾îºÁ¾ß ¾ÆÁ÷ ±âº»ÀÌ ¾ÈµÇ¹Ç·Î Á¡¼ö¸¦ Á» ´õ ¸ð¾Æ¾ß Çϴµ¥ ÀÌ ºñ±³¸¦ À§ÇØ OldScore´Â ÃÖ¼Ò ±âº» Á¡¼öº¸´Ù Çϳª ´õ ÀÛÀº Á¡¼ö·Î ÃʱâȵǾî ÀÖ´Â °ÍÀÌ´Ù.
¶Ç °í½ºÅé¿¡´Â ÀÌ·± ±ÔÄ¢ÀÌ ÀÖ´Ù. °í¸¦ Çߴµ¥ »ó´ë¹æÀÌ ÇǸ¦ »¯µé¾î°¡ Á¡¼ö°¡ ÁÙ¾î µé¾ú´Ù¸é »¯±ä Á¡¼ö¸¦ ¹úÃæÇϰí Ãß°¡ Á¡¼ö¸¦ ´õ ³»¾ß¸¸ °í, ½ºÅéÀ» ¼±ÅÃÇÒ ¼ö ÀÖ´Ù. °í¸¦ ÇÑ »óȲ¿¡¼ Ãß°¡ Á¡¼ö¸¦ ³»Áö ¸øÇÏ°í »ó´ë¹æÀÌ ¸ÕÀú ½ºÅéÀ» ÇØ ¹ö¸®¸é ÀÌ »óȲÀ» µ¶¹ÚÀ̶ó°í Çϸç ÇԺηΠ°í¸¦ ºÎ¸£Áö ¸øÇϵµ·Ï ÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. OldScore¸¦ À¯ÁöÇÏ´Â °ÍÀº ÀÌ ±ÔÄ¢À» À§ÇؼÀ̱⵵ Çѵ¥ ÀÌÀüÀÇ ÃÖ°í Á¡¼ö¸¦ °¡Áö°í ÀÖ¾î¾ß ´ÙÀ½ °í, ½ºÅé ±âȸ¸¦ ºÎ¿©ÇÒ ½ÃÁ¡À» Á¤È®ÇÏ°Ô ÆÇ´ÜÇÒ ¼ö ÀÖ´Ù.
Draw ÇÔ¼ö´Â ¸ÔÀº ÆÐ¸¦ ȸ鿡 Ãâ·ÂÇϴµ¥ Ä«µå Á¾·ùº°·Î º¸±â ÁÁ°Ô Ãâ·ÂÇÑ´Ù. 0ºÎÅÍ Num Á÷Àü±îÁö ·çÇÁ¸¦ µ¹¸ç ÁýÇÕ³»ÀÇ Ä«µå¸¦ Àû´çÇÑ À§Ä¡¿¡ »Ñ¸®´Âµ¥ ½ÇÁ¦ °í½ºÅéÆÛ(GoStoper)µéÀÌ ´ã¿ä¿¡ ¸ÔÀº ÆÐµéÀ» Á¤·ÄÇÏ´Â ¹æ½ÄÀ» ºñ½ÁÇÏ°Ô Èä³»³Â´Ù. Ç÷¹À̾ ´ã¿äÀÇ Ä«µå¿Í´Â ´Þ¸® ¼ö°¡ ¾ÆÁÖ ¸¹À» ¼ö ÀÖÀ¸¹Ç·Î ¿©·¯ ÁÙ¿¡ ³ª´©¾î Ãâ·ÂÇØ¾ß Çϸç ÀÌ¿ÕÀ̸é Á¤·Ä±îÁö ÇÏ¸é ´õ º¸±â ÁÁ´Ù. Draw ÇÔ¼öÀÇ Ãâ·Â °á°ú´Â ´ÙÀ½°ú °°´Ù.
Ãâ·ÂÀÇ ±âÁØ ÁÂÇ¥´Â ÀÏ´Ü (sx, sy)Àε¥ ÀÌ ÁÂÇ¥¸¦ Á»ó´ÜÀ¸·Î ÇÏ¿© ±¤, ½Ê, ¿À°¡ °¢°¢ ÇÑ ÁÙ¾¿ Ãâ·ÂµÇ°í ÇÇ´Â ¿©·¯ ÁÙ¿¡ Ãâ·ÂµÉ ¼ö ÀÖ´Ù. ±¤Àº ¸¹ÀÌ ¸ð¾Æ ºÃÀÚ ´Ù¼¸ °³¹Û¿¡ ¾ÈµÇ¹Ç·Î Â¥Åõ¸® °ø°£À» Ȱ¿ëÇÏ¿© Á¡¼ö¿Í °í ȸ¼ö±îÁöµµ ±× ¿·¿¡ Ãâ·ÂÇÑ´Ù. Ä«µå ÁýÇÕÀº Á¾·ù·Î Á¤·ÄµÇ¾î ÀÖÁö ¾Ê°í ¼ýÀÚ ¿ì¼±À¸·Î Á¤·ÄµÇ¾î ÀÖÀ¸¹Ç·Î ¾î¶² Á¾·ùÀÇ Ä«µå°¡ ¾ðÁ¦ ³ª¿Ã Áö´Â ¾Ë ¼ö ¾ø´Ù. ±×·¡¼ 4 Á¾·ùÀÇ xÁÂÇ¥¸¦ °¢°¢ À¯ÁöÇϱâ À§ÇØ int x[4] ¹è¿À» ¼±¾ðÇßÀ¸¸ç ÃÖÃÊ sx¿¡¼ ½ÃÀÛÇß´Ù°¡ Ä«µå°¡ ³ª¿Ã ¶§¸¶´Ù CardGap¸¸Å ¿À¸¥ÂÊÀ¸·Î À̵¿ÇÑ´Ù.
±¤, ½Ê, ¿À´Â ÇÑ ÁÙ¿¡ ¸ðµÎ Ãâ·ÂµÇ¹Ç·Î yÁÂÇ¥°¡ sy, sy+1, sy+2·Î °íÁ¤ÀûÀÌÁö¸¸ ÇÇ´Â ¿©·¯ ÁÙ¿¡ Ãâ·ÂµÉ ¼ö Àֱ⠶§¹®¿¡ py¶ó´Â º¯¼ö·Î yÁÂÇ¥¸¦ º°µµ °ü¸®ÇÑ´Ù. Çǰ¡ ÀÏÁ¤ °³¼ö ÀÌ»ó ÃâÇöÇßÀ¸¸é ´ÙÀ½ ÁÙ¿¡ °è¼Ó Ãâ·ÂÇϴµ¥ À̸¦ À§ÇØ py´Â 1 Áõ°¡Çϰí x[3]Àº ´Ù½Ã sx·Î µ¹¾Æ°¡ ¿ÞÂÊ ¾Æ·¡¿¡¼ºÎÅÍ ´Ù½Ã Ãâ·ÂÇÑ´Ù. ÀÏÁ¾ÀÇ °³ÇàÀ» ÇÏ´Â °ÍÀÌ´Ù. ÀÌ ÇÔ¼ö´Â ±æÀ̰¡ ±×´ÙÁö ±æÁö´Â ¾ÊÁö¸¸ CÄÚµåÀÇ ¼öÁØÀ¸·Î Ä¡¸é Áß±Þ ÀÌ»óÀÇ ³À̵µ¸¦ °¡Áö°í ÀÖ¾î ÆÐÅÏÀ» Àß ±â¾ïÇØ µÑ¸¸ÇÏ´Ù.
RemovePee ÇÔ¼ö´Â ÇÇ ÇÑ ÀåÀ» Á¦°ÅÇÑ´Ù. °í½ºÅé¿¡´Â »ó´ë¹æÀÌ ¼¼ ÀåÀ» ÇѲ¨¹ø¿¡ µå½Ã°Å³ª ÂÊ, µû´Ú µîÀ» ÇßÀ» ¶§ ÇǸ¦ »ó³³ÇÏ´Â ±ÔÄ¢ÀÌ ÀÖÀ¸¹Ç·Î ¸ÔÀº °É µµ·Î ³» ³ö¾ß ÇÒ Çʿ䵵 ÀÖ´Ù. ´Ü, ÁÙ °Ô ¾øÀ¸¸é ¾î¿ ¼ö ¾øÀÌ °£ÀýÈ÷ ÁÖ°í ½Í¾îµµ »¯±âÁö ¾Ê¾Æµµ »ó°ü¾ø´Ù. ÇǸ¦ ÁÖ·Á¸é ÀÏ´Ü Çǰ¡ ÀÖ´ÂÁö ã¾Æ ºÁ¾ß Çϴµ¥ À̶§´Â CCardSet ÇÔ¼öÀÇ FindFirstCard ÇÔ¼ö·Î "ÇÇ"¶ó´Â ¹®ÀÚ¿À» °¡Áø Ä«µå°¡ ÁýÇÕ ³»¿¡ ÀÖ´ÂÁö¸¦ º¸¸é µÈ´Ù.
ÀÖ´Ù¸é ±× Ä«µå¸¦ Á¦°ÅÇÔ°ú µ¿½Ã¿¡ ¸®ÅÏµÇ¾î ³ª¿À´Â Ä«µå¸¦ ´Ù½Ã ¸®ÅÏÇÏ¸é µÈ´Ù. ÀÌ·¸°Ô ¸®ÅÏµÈ Ä«µå´Â »ó´ë¹æÀÇ ¸ÔÀº ÆÐ¿¡ »ðÀ﵃ °ÍÀÌ´Ù. ¸¸¾à ¾ø´Ù¸é SCard()¸¦ ¸®ÅÏÇϴµ¥ ÀÌ ±¸¹®Àº SCardÀÇ µðÆúÆ® »ý¼ºÀÚ·Î Àӽà īµå¸¦ »ý¼ºÇÏ´Â ¹®ÀåÀÌ´Ù. SCardÀÇ µðÆúÆ® »ý¼ºÀÚ°¡ ºó Ä«µå¸¦ ¸¸µéµµ·Ï µÇ¾î ÀÖÀ¸¹Ç·Î ÀÌ ¸®ÅϹ®Àº °ð ¹è°¶ó´Â ¶æÀ̸ç InsertCard ÇÔ¼ö ¼±µÎ¿¡¼ ºó Ä«µåÀÌ¸é ¾Æ¹« °Íµµ ÇÏÁö ¾Êµµ·Ï µÇ¾î ÀÖ´Ù.
CalcScore ÇÔ¼ö´Â À̸§ÀÌ ÀǹÌÇϵíÀÌ Á¡¼ö¸¦ °è»êÇϴµ¥ °í½ºÅé °ÔÀÓÀÇ Á¡¼ö ±ÔÄ¢´ë·Î ¸ÔÀº Ä«µå ¼ö¿Í Á¾·ù¿¡ µû¶ó °è»êÇÏ¸é µÈ´Ù. ¸ÕÀú °¢ Á¾·ùº°·Î Á¡¼ö°¡ ºÎ¿©µÇ¹Ç·Î Á¾·ùº°·Î ¸î ÀåÀ̳ª ¸ð¾Ò´ÂÁö n ¹è¿¿¡ °³¼ö¸¦ ¼öÁýÇÑ´Ù. ³¡±îÁö ·çÇÁ¸¦ µ¹¸ç n ¹è¿¿¡¼ GetKind °¡ ¸®ÅÏÇϴ ÷ÀÚÀÇ ¿ä¼Ò¸¦ Áõ°¡½Ã۱⸸ ÇÏ¸é µÈ´Ù. ±¤Àº ¸ðÀº °³¼ö¿¡ µû¶ó Á¡¼ö°¡ Â÷µî ºÎ¿©µÇ´Âµ¥ 3ÀåÀ̸é 3Á¡, 4ÀåÀ̸é 4Á¡, 5ÀåÀ̸é 15Á¡ÀÌ´Ù. ÀÌ Á¡¼öÇ¥¸¦ gscore ·è¾÷ Å×ÀÌºí¿¡ ÀÛ¼ºÇØ ³õ°í n[0]·Î ¼±ÅÃÇÏ¸é ±¤Á¡¼ö¸¦ ¹Ù·Î ±¸ÇÒ ¼ö ÀÖ´Ù. ´Ü, B±¤ÀÌ Æ÷ÇÑµÈ »ï±¤Àº 2Á¡À¸·Î °è»êÇØ¾ß ÇÑ´Ù.
±¤Á¡¼ö¸¦ ¸ÕÀú °è»êÇÑ ÈÄ ½Ê, ¿À, ÇÇÀÇ Ãʰú °³¼ö ±âÁØÀ¸·Î Á¡¼ö¸¦ Áõ°¡½ÃŲ´Ù. ½Ê, ¿À´Â 5ÀåºÎÅÍ 1Á¡, ÇÇ´Â 10ÀåºÎÅÍ 1Á¡À¸·Î °è»êÇß´Ù. ´ÙÀ½Àº ƯÁ¤ Ä«µåµéÀ» ¸ð¾ÒÀ» ¶§ÀÇ Á¡¼ö¸¦ ´õÇϴµ¥ û´Ü, È«´Ü, ÃÊ´Ü, °íµµ¸®°¡ ÀÖ´Ù. FindFirstCard·Î °Ë»öÇÏ¿© ÀÌ Ä«µåµéÀÌ ¸ðµÎ Á¸ÀçÇϸé Á¤ÇØÁø Á¡¼ö¸¦ °¢°¢ ´õÇÑ´Ù. ÃÖÁ¾ÀûÀ¸·Î ±¸ÇØÁø Á¡¼ö¸¦ ¸®ÅÏÇϸé Á¡¼ö °è»êÀÌ ¿Ï·áµÈ´Ù.
¿©±â±îÁö ¿©·¯ °¡Áö Ŭ·¡½ºµéÀ» Á¦ÀÛÇØ ¿Ô´Âµ¥ Ŭ·¡½º°£ÀÇ °èÃþ °ü°è¸¦ ±×¸²À¸·Î ±×·Á º¸¸é ´ÙÀ½°ú °°´Ù. »ó¿ë ¶óÀ̺귯¸®¿¡ ºñÇØ ¾ÆÁÖ °£´ÜÇÑ ±¸Á¶·Î µÇ¾î ÀÖ´Ù.
°ÔÀÓÀ» ¹Ù¶óº¸´Â ½Ã°¢¿¡ µû¶ó À̿ʹ ´Ù¸¥ µðÀÚÀÎÀÌ ³ª¿Ã ¼öµµ ÀÖ´Ù. ÀÌ °èÃþÀ» Àß Á¤¸®ÇØ ³õ°í ´ÙÀ½ ½Ç½À ´Ü°è·Î ³Ñ¾î°¡µµ·Ï ÇÏÀÚ.