35-1-´Ù.µ¥Å©¿Í Ç÷¹À̾î

°ÔÀÓÀ» ±¸¼ºÇÏ´Â °¡Àå ¿øÀÚÀûÀÎ ´ÜÀ§ÀÎ Ä«µå¿Í Ä«µåÀÇ ÁýÇÕÀ» °ü¸®Çϴ Ŭ·¡½º°¡ ¿Ï¼ºµÇ¾ú´Ù. ÇÏÁö¸¸ ÀÌ µÑÀº ½ÇÁ¦ °ÔÀÓ¿¡ Á÷Á¢ÀûÀ¸·Î µîÀåÇÏÁö´Â ¾Ê´Âµ¥ ÀÌÁ¦ °ÔÀÓ¿¡ ¹Ù·Î »ç¿ëÇÏ´Â ½ÇüµéÀ» Ŭ·¡½º·Î ¸¸µé¾î º¸ÀÚ. ÀÌ ´Ü°è¿¡¼­´Â È­ÅõÆÇÀÇ ¸ð¾ç°ú ¿î¿ë ±ÔÄ¢À» Àß »ó»óÇØ °¡¸é¼­ Ŭ·¡½º¸¦ µðÀÚÀÎÇØ¾ß ÇÑ´Ù.

µ¥Å©

µ¥Å©´Â Ä«µå¸¦ ½×¾Æ ³õ´Â °÷À̸ç ÈçÈ÷ ´ã¿äÀÇ Áß¾Ó¿¡ µÚÁý¾î¼­ ³õ¿©Áø´Ù. ¿©±â¼­ Ä«µå¸¦ ÇÑÀ徿 ²¨³» Ç÷¹À̾°Ô ³ª´©¾î Áֱ⵵ ÇÏ°í ´ã¿ä¿¡µµ ÆÐ¸¦ ±ò¾Æ ³õÀ¸¸ç À§¿¡¼­ºÎÅÍ ¼ø¼­´ë·Î ÇÑÀ徿 µÚÁý¾î °¡¸ç °ÔÀÓÀÌ ÁøÇàµÈ´Ù. µ¥Å©ÀÇ Ä«µå¸¦ ´Ù µÚÁýÀ¸¸é °ÔÀÓÀÌ Á¾·áµÈ´Ù. µ¥Å©´Â Ä«µåÀÇ ÁýÇÕÀ̹ǷΠ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·Î °Ë»öÇÏ¿© ÀÌ Ä«µåµéÀÌ ¸ðµÎ Á¸ÀçÇϸé Á¤ÇØÁø Á¡¼ö¸¦ °¢°¢ ´õÇÑ´Ù. ÃÖÁ¾ÀûÀ¸·Î ±¸ÇØÁø Á¡¼ö¸¦ ¸®ÅÏÇϸé Á¡¼ö °è»êÀÌ ¿Ï·áµÈ´Ù.

¿©±â±îÁö ¿©·¯ °¡Áö Ŭ·¡½ºµéÀ» Á¦ÀÛÇØ ¿Ô´Âµ¥ Ŭ·¡½º°£ÀÇ °èÃþ °ü°è¸¦ ±×¸²À¸·Î ±×·Á º¸¸é ´ÙÀ½°ú °°´Ù. »ó¿ë ¶óÀ̺귯¸®¿¡ ºñÇØ ¾ÆÁÖ °£´ÜÇÑ ±¸Á¶·Î µÇ¾î ÀÖ´Ù.

°ÔÀÓÀ» ¹Ù¶óº¸´Â ½Ã°¢¿¡ µû¶ó À̿ʹ ´Ù¸¥ µðÀÚÀÎÀÌ ³ª¿Ã ¼öµµ ÀÖ´Ù. ÀÌ °èÃþÀ» Àß Á¤¸®ÇØ ³õ°í ´ÙÀ½ ½Ç½À ´Ü°è·Î ³Ñ¾î°¡µµ·Ï ÇÏÀÚ.