Playing_Cards.h
上传用户:may_xy
上传日期:2007-08-09
资源大小:1519k
文件大小:5k
源码类别:

游戏

开发平台:

C/C++

  1. // Playing_Cards.h: interface for the CPlaying_Cards class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. //
  5. //牌型数据结构;
  6. class CCardsType
  7. {
  8. public:
  9. int m_nTypeNum;
  10. int m_nTypeValue;
  11. public:
  12. CCardsType();
  13. };
  14. /* 牌型及牌值定义
  15.      牌型(Cards_Type)   牌值(Cards_Value)           牌数:
  16. 单牌:  1 CCard.Value(面值)           1
  17. 一对:  2 CCard.Value(面值) 2
  18. 三张:  3 CCard.Value(面值) 3
  19. 三带一:  31 三张的Card.Value(面值) 4
  20. 四张:  4 CCard.Value(面值) 4
  21. 单顺:  5 最小牌的Card.Value(面值)    5
  22. 三带一对:  32 三张的Card.Value(面值) 5
  23. 单顺:  6 最小牌的Card.Value(面值)    6
  24. 双顺:  222 最小牌的Card.Value(面值)    6
  25. 三顺:      33 最小牌的Card.Value(面值)    6
  26. 四带二单:  411 四张的Card.Value(面值) 6  
  27. 单顺:  7 最小牌的Card.Value(面值)    7
  28. 单顺:  8 最小牌的Card.Value(面值)    8
  29. 双顺  2222 最小牌的Card.Value(面值)    8
  30. 三顺带二单:  3311 最小三张的Card.Value(面值)  8
  31. 四带二对:  422 四张的Card.Value(面值) 8
  32. 单顺:  9 最小牌的Card.Value(面值)    9
  33. 三顺:  333 最小三张的Card.Value(面值)  9
  34. 单顺:  10 最小牌的Card.Value(面值)    10
  35. 双顺:  22222 最小牌的Card.Value(面值)    10
  36. 三顺带二对:  3322 最小三张的Card.Value(面值)  10
  37. 单顺:  11 最小牌的Card.Value(面值)    11
  38. 单顺:  12 最小牌的Card.Value(面值)    12
  39. 双顺:  222222 最小对牌的Card.Value(面值)  12
  40. 三顺:  3333 最小三张的Card.Value(面值)  12
  41. 三顺带三:  333111 最小三张的Card.Value(面值)  12
  42. 双顺  2222222 最小对牌的Card.Value(面值)  14
  43. 三顺带三对:  333222 最小三张的Card.Value(面值)  15
  44. 三顺:  33333 最小三张的Card.Value(面值)  15
  45. 双顺  22222222 最小对牌的Card.Value(面值)  16
  46. 三顺带四单:  33331111 最小三张的Card.Value(面值)  16
  47. 双顺  222222222 最小对牌的Card.Value(面值)  18
  48. 三顺  333333 最小三张的Card.Value(面值)  18
  49. 双顺  2222222222 最小对牌的Card.Value(面值)  20
  50. 三顺带五单:  3333311111 最小三张的Card.Value(面值)  20
  51. 三顺带四对:  33332222 最小三张的Card.Value(面值)  20
  52. */
  53. class CCard
  54. {
  55. public:
  56. int m_nColor;  //花色;
  57. int m_nValue;  //面值;
  58. public:
  59. CCard();
  60. };
  61. class CPlayingCards  
  62. {
  63. public:
  64. int m_nCardsTable[17]; //记录未出牌的表;
  65. int m_nCardsCounter;  //未出的牌的数量;
  66. CCard m_cCards[20];  //未出的牌;
  67. int m_nDiscardedCounter;  //已经出的牌数量;
  68. CCard m_cDiscarded[20];     //已经出的牌;
  69. CCardsType m_cDiscardingType;   //刚出牌的牌型和大小;
  70. int m_nDiscardingCardsTable[17];     //记录出牌类型的扫描表;Scan_Cards_Table[3]记录3的数量,以此类推;
  71. int m_nDiscardingCounter;  //刚出的牌的数量;
  72. CCard m_cDiscarding[20];    //刚出的牌;
  73. int m_nChoosingCardsCounter;   //选择要出的牌型;
  74. CCard m_cChoosingCards[20];   //选择要出的牌数组;
  75. const CCard m_cBLANK_CARD;      //表示空白牌的常量;
  76. private:
  77. int Is2();   //判断是否是一对牌; 
  78. int Is3();   //判断是否是三张;
  79. int IsBomb();   //判断是否是四张(炸弹); 
  80. int IsSeries();   //判断是否是单顺(拖拉机),此函数适合5-12张牌情况; 
  81. int IsDoubleSeries(); //判断是否是双顺;此函数适合6-20张牌情况;
  82. int IsThreeSeries();  //判断是否是三顺;此函数适合6-18张牌情况;
  83. int Is31();   //判断是否是三带一单;
  84. int Is32();       //判断是否是三带一对;
  85. int Is411();   //判断是否是四带两单;
  86. int Is3311();   //判断是否是三顺带两单;
  87. int Is422();   //判断是否是四带两对;
  88. int Is3322();   //判断是否是三顺带两对;
  89. int Is333111();   //判断是否是三顺带三单;
  90. int Is333222();   //判断是否是三顺带三对;
  91. int Is33331111();   //判断是否是三顺带四单;
  92. int Search1(CCardsType& cCardsType);   //寻找单牌出;
  93. int Search2(CCardsType& cCardsType);   //寻找对牌出;
  94. int Search3(CCardsType& cCardsType);   //寻找三张出;
  95. int SearchBomb(CCardsType& cCardsType);   //寻找炸弹出;
  96. int Search31(CCardsType& cCardsType);     //寻找三带1出;
  97. int Search32(CCardsType& cCardsType);     //寻找三带2出;
  98. int Search411(CCardsType& cCardsType);    //寻找四带2单;
  99. int Search422(CCardsType& cCardsType); //寻找四带两对;
  100. int Search3311(CCardsType& cCardsType); //寻找三顺带两单;
  101. int Search3322(CCardsType& cCardsType); //寻找三顺带两对;
  102. int Search222(CCardsType& cCardsType); //寻找双顺;
  103. int Search2222(CCardsType& cCardsType); //寻找双顺;
  104. //拖拉机(单顺)
  105. int Search5(CCardsType& cCardsType);    //寻找5单顺出;
  106. int Search6(CCardsType& cCardsType);    //寻找6单顺出;
  107. int Search7(CCardsType& cCardsType);    //寻找7单顺出;
  108. int Search8(CCardsType& cCardsType);    //寻找8单顺出;
  109. int Search9(CCardsType& cCardsType);    //寻找9单顺出;
  110.  //寻找大于等于10单顺出;
  111. int SearchBeyond10(CCardsType& cCardsType,int nLong);
  112. BOOL AI_Patch1();                       //工人智能补丁1;
  113. public:
  114. CPlayingCards();
  115. virtual ~CPlayingCards();
  116. void New();
  117. void ScanToTable();
  118. int AccountCardsValue();  //计算牌值; 
  119. int CleanUp();    //整理牌数据结构;
  120. int CheckChoosing(); //检查出牌的逻辑合法性;
  121. int DirectChoose(); //直接选择出牌;
  122. int CompareChoose(CCardsType&); //比较大小后决定不要或者出牌; 
  123. };