诸暨麻将添加redis
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 
 
 
 
 

123 Zeilen
3.2 KiB

  1. #ifndef _ANDROIDAI_H_
  2. #define _ANDROIDAI_H_
  3. #pragma once
  4. #include "GameLogic.h"
  5. class CAndroidAIBase
  6. {
  7. public:
  8. CAndroidAIBase();
  9. ~CAndroidAIBase();
  10. //设置牌
  11. void SetCardData( const BYTE cbCardData[],BYTE byCardCount, tagWeaveItem wi[MAX_WEAVE], BYTE cbWeaveCount );
  12. //获取最差牌
  13. BYTE GetBadlyCard();
  14. //获取最大分
  15. int GetMaxScore();
  16. //思考
  17. virtual void Think()=NULL;
  18. protected:
  19. //组合是否是边
  20. bool IsEdge( BYTE byCard1,BYTE byCard2 );
  21. //搜索相同牌
  22. bool SearchSameCard( BYTE byCardData,BYTE &byIndex1,BYTE &byIndex2 );
  23. //搜索连牌
  24. bool SearchLinkCard( BYTE byCardData,BYTE &byIndex1,BYTE &byIndex2 );
  25. //搜索两只同牌
  26. bool SearchSameCardRemain( BYTE byCardData,BYTE &byIndex,BYTE byStart );
  27. //搜索有卡连牌
  28. bool SearchLinkCardRemain( BYTE byCardData,BYTE byLinkType,BYTE &byIndex,BYTE byStart );
  29. //搜索牌
  30. BYTE FindIndex( BYTE byCardData,BYTE byStart = 0 );
  31. //在移除最佳三只后搜索牌
  32. BYTE FindIndexRemain( BYTE byCardData,BYTE byStart = 0 );
  33. public:
  34. //移除牌
  35. bool RemoveCard( BYTE byCardIndex );
  36. //移除牌值
  37. bool RemoveCardData( BYTE byCardData );
  38. protected:
  39. BYTE m_byCardData[MAX_COUNT]; //原始牌
  40. BYTE m_byCardCount; //原始牌数
  41. bool m_bSelect[MAX_COUNT]; //牌是否被选择
  42. BYTE m_byThreeCard[MAX_COUNT]; //三张牌组合
  43. BYTE m_byThreeCount; //三张牌组合数
  44. BYTE m_byGoodThreeCard[MAX_COUNT]; //最佳三张牌组合
  45. BYTE m_byGoodThreeCount; //最佳三张牌组合数
  46. BYTE m_byTwoCard[MAX_COUNT]; //两只牌组合
  47. BYTE m_byTwoCount; //两只牌组合数
  48. BYTE m_byGoodTwoCard[MAX_COUNT]; //最佳两只牌组合
  49. BYTE m_byGoodTwoCount; //最佳两只牌组合数
  50. BYTE m_byRemainThree[MAX_COUNT]; //移去最佳三只组合后的牌
  51. BYTE m_byRemainThreeCount; //移去最佳三只组合后的牌数
  52. BYTE m_byRemainTwo[MAX_COUNT]; //移去最佳三只组合及两只组合后的牌
  53. BYTE m_byRemainTwoCount; //移去最佳三只组合及两只组合后的牌数
  54. int m_nMaxScoreThree; //最佳三只牌组合分数
  55. int m_nMaxScoreTwo; //最佳两只牌组合分数
  56. int m_nActionScore; //模拟操作得分
  57. int m_nScoreThree; //临时三只牌组合分数
  58. int m_nScoreTwo; //临时两只牌组合分数
  59. bool m_bHaveJiang; //是否有将
  60. BYTE m_byBadlyCard; //最差牌
  61. //胡牌限制条件
  62. BYTE m_cbColorCount; //花色数目
  63. BYTE m_cbColor[4]; //花色数目
  64. BYTE m_cbMinColorCount; //最少花色
  65. };
  66. class CAndroidAI:public CAndroidAIBase
  67. {
  68. public:
  69. CAndroidAI(void);
  70. ~CAndroidAI(void);
  71. //思考
  72. virtual void Think();
  73. //从最佳三只牌组合中搜索最差牌
  74. BYTE GetBadlyIn3Card();
  75. //从最佳两只牌组合中搜索最差牌
  76. BYTE GetBadlyIn2Card();
  77. //设置禁止出的牌
  78. void SetEnjoinOutCard( const BYTE cbEnjoinOutCard[],BYTE cbEnjoinOutCount );
  79. //模拟操作
  80. void SetAction( BYTE byActionMask,BYTE byActionCard );
  81. //重置得分
  82. void ResetScore();
  83. protected:
  84. //加权
  85. int AddScore( BYTE byCardData );
  86. //分析三只
  87. void AnalyseThree();
  88. //分析两只
  89. void AnalyseTwo();
  90. //分析单只
  91. void AnalyseOne();
  92. //从两只组合中分析
  93. void SearchTwo();
  94. //判断牌是否禁止出
  95. bool IsEnjoinOutCard( BYTE byCard );
  96. protected:
  97. BYTE m_byEnjoinOutCard[MAX_COUNT]; //禁止出的牌
  98. BYTE m_byEnjoinOutCount; //禁止出的牌数
  99. };
  100. #endif