// int代表一张牌, // 低16位代表牌的数字 1-13 A-K // 高16位代表花色 1-4 黑红梅方 class PokerInfo { public: PokerInfo(); ~PokerInfo(); void clear(); void RandomPoker(); void randPokerType(bool notSameType = false); void randPokerPoint(INT32 index); INT32 GetLongPoker() { return m_longPoker; } INT32 GetHuPoker() { return m_huPoker; } INT32 GetLongPokerPoint() { return m_longPoker & 0xFFFF; } INT32 GetHuPokerPoint() { return m_huPoker & 0xFFFF; } void SetLHDInfo(INT64 longGold, INT64 heGold, INT64 huGold); private: INT32 m_longPoker; INT32 m_huPoker; INT64 m_allLongGold; INT64 m_allHuGold; INT64 m_allHeGold; };
PokerInfo::PokerInfo() { m_longPoker = 0; m_huPoker = 0; m_allLongGold = 0; m_allHuGold = 0; m_allHeGold = 0; } PokerInfo::~PokerInfo(){} void PokerInfo::clear() { m_longPoker = 0; m_huPoker = 0; } void PokerInfo::SetLHDInfo(INT64 longGold, INT64 heGold, INT64 huGold) { m_allLongGold = longGold; m_allHuGold = huGold; m_allHeGold = heGold; } void PokerInfo::randPokerType(bool notSameType) { INT32 pokerTypeLong = rand() % 4 + 1; INT32 pokerTypeHu = rand() % 4 + 1; if (notSameType) { while (pokerTypeLong == pokerTypeHu) { pokerTypeHu = rand() % 4 + 1; } } m_longPoker = m_longPoker & 0xFFFF; m_huPoker = m_huPoker & 0xFFFF; m_longPoker = m_longPoker + (pokerTypeLong << 16); m_huPoker = m_huPoker + (pokerTypeHu << 16); } void PokerInfo::randPokerPoint(INT32 index) { INT32 pokerLongPoint = 0; INT32 pokerHuPoint = 0; while (true) { pokerLongPoint = rand() % 13 + 1; pokerHuPoint = rand() % 13 + 1; if (index == 1) { if (pokerLongPoint > pokerHuPoint) { break; } } else if (index == 2) { pokerLongPoint = pokerHuPoint; break; } else { if (pokerLongPoint < pokerHuPoint) { break; } } } m_longPoker = m_longPoker & 0xFFFF0000; m_huPoker = m_huPoker & 0xFFFF0000; m_longPoker = m_longPoker + pokerLongPoint; m_huPoker = m_huPoker + pokerHuPoint; } void PokerInfo::RandomPoker() { clear(); randPokerPoint(1); randPokerType(); }
根据控制确定
void CGSGameRoom::RandomPoker() { m_pokerInfo.clear(); INT32 result = ClacResult(); //根据控制计算龙和虎那个牌大 m_pokerInfo.randPokerPoint(result); m_pokerInfo.randPokerType(result == 2 ? true : false); m_awardRecords.push_back(result); while (m_awardRecords.size() > 18) { m_awardRecords.erase(m_awardRecords.begin()); } }
策略是根据血池和玩家下注配牌的,没有人押注系统随机发牌 8:1:8
INT32 CGSGameRoom::ClacResult() { INT32 plan = 0; if (0 == g_cGSGameHallInstance.SelectPlan(4, plan)) { //选择具体策略 WYYTools_LogMgr->Warning("CGSGameRoom::ClacResult select plan = 0"); } INT64 n64AllSumGolds = 0; INT64 n64AllTigerGolds = 0; INT64 n64AllDragonGolds = 0; for (auto iter = m_GameUserBets.begin(); iter != m_GameUserBets.end(); iter++) { if ( UserIDInRobotVec(iter->first) ) { continue; } n64AllSumGolds += iter->second.sumGolds; n64AllTigerGolds += iter->second.tigerGolds; n64AllDragonGolds += iter->second.dragonGolds; } INT64 n64AllGolds = n64AllSumGolds + n64AllTigerGolds + n64AllDragonGolds; INT64 planGolds = n64AllGolds * plan / 10000; INT64 allWinDragonGolds = n64AllDragonGolds + n64AllDragonGolds; INT64 allWinTigerGolds = n64AllTigerGolds + n64AllTigerGolds; INT64 allWinSumGolds = n64AllSumGolds * 9 + n64AllDragonGolds + n64AllTigerGolds; if (allWinDragonGolds == 0 && allWinTigerGolds == 0 && allWinSumGolds== 0) { INT32 randIcon = rand() % 17; if (randIcon < 8) { return 1; }else if (randIcon == 8) { return 2; }else { return 3; } } INT64 absWinSumGolds = abs(allWinSumGolds - planGolds); INT64 absWinDragonGolds = abs(allWinDragonGolds - planGolds); INT64 absWinTigerGolds = abs(allWinTigerGolds - planGolds); if (absWinDragonGolds <= absWinTigerGolds && absWinDragonGolds <= absWinSumGolds) { return 1; } if (absWinSumGolds <= absWinDragonGolds && absWinSumGolds <= absWinTigerGolds) { return 2; } if (absWinTigerGolds <= absWinDragonGolds && absWinTigerGolds <= absWinSumGolds) { return 3; } return 1; }
配置文件json:
[{ "threshold": 5000000, "info": [{ "plan": 82000, "weights": 0 }, { "plan": 60000, "weights": 0 }, { "plan": 50000, "weights": 0 }, { "plan": 30000, "weights": 0 }, { "plan": 10000, "weights": 200 }, { "plan": 9400, "weights": 300 }, { "plan": 7500, "weights": 500 }, { "plan": 6400, "weights": 1000 }, { "plan": 4500, "weights": 1000 }, { "plan": 3400, "weights": 500 }, { "plan": 1500, "weights": 500 }, { "plan": 0, "weights": 6000 }, { "plan": 0, "weights": 0 }, { "plan": 0, "weights": 0 }, { "plan": 0, "weights": 0 }] }, { "threshold": 8000000, "info": [{ "plan": 82000, "weights": 0 }, { "plan": 60000, "weights": 0 }, { "plan": 50000, "weights": 100 }, { "plan": 25000, "weights": 200 }, { "plan": 10000, "weights": 1500 }, { "plan": 9400, "weights": 500 }, { "plan": 7500, "weights": 500 }, { "plan": 6400, "weights": 600 }, { "plan": 4500, "weights": 600 }, { "plan": 3400, "weights": 2000 }, { "plan": 1500, "weights": 2500 }, { "plan": 0, "weights": 1500 }, { "plan": 0, "weights": 0 }, { "plan": 0, "weights": 0 }, { "plan": 0, "weights": 0 }] }, { "threshold": 10000000, "info": [{ "plan": 82000, "weights": 100 }, { "plan": 60000, "weights": 200 }, { "plan": 50000, "weights": 200 }, { "plan": 30000, "weights": 400 }, { "plan": 10000, "weights": 1200 }, { "plan": 9400, "weights": 300 }, { "plan": 7500, "weights": 500 }, { "plan": 6400, "weights": 800 }, { "plan": 4500, "weights": 800 }, { "plan": 3400, "weights": 2000 }, { "plan": 1500, "weights": 2500 }, { "plan": 0, "weights": 1000 }, { "plan": 0, "weights": 0 }, { "plan": 0, "weights": 0 }, { "plan": 0, "weights": 0 }] }, { "threshold": 15000000, "info": [{ "plan": 82000, "weights": 100 }, { "plan": 60000, "weights": 400 }, { "plan": 50000, "weights": 400 }, { "plan": 34000, "weights": 500 }, { "plan": 12000, "weights": 800 }, { "plan": 9000, "weights": 500 }, { "plan": 8100, "weights": 500 }, { "plan": 7200, "weights": 800 }, { "plan": 5500, "weights": 1000 }, { "plan": 3500, "weights": 2000 }, { "plan": 2200, "weights": 2000 }, { "plan": 0, "weights": 1000 }, { "plan": 0, "weights": 0 }, { "plan": 0, "weights": 0 }, { "plan": 0, "weights": 0 }] }, { "threshold": 20000000, "info": [{ "plan": 82000, "weights": 400 }, { "plan": 60000, "weights": 400 }, { "plan": 50000, "weights": 400 }, { "plan": 34000, "weights": 600 }, { "plan": 12000, "weights": 800 }, { "plan": 9000, "weights": 400 }, { "plan": 8100, "weights": 400 }, { "plan": 7200, "weights": 800 }, { "plan": 5500, "weights": 1000 }, { "plan": 3500, "weights": 1800 }, { "plan": 2200, "weights": 2000 }, { "plan": 0, "weights": 1000 }, { "plan": 0, "weights": 0 }, { "plan": 0, "weights": 0 }, { "plan": 0, "weights": 0 }] }, { "threshold": 25000000, "info": [{ "plan": 100000, "weights": 500 }, { "plan": 90000, "weights": 500 }, { "plan": 80000, "weights": 1000 }, { "plan": 70000, "weights": 500 }, { "plan": 55000, "weights": 1000 }, { "plan": 40000, "weights": 500 }, { "plan": 30000, "weights": 500 }, { "plan": 20000, "weights": 1000 }, { "plan": 15000, "weights": 500 }, { "plan": 5000, "weights": 500 }, { "plan": 2000, "weights": 500 }, { "plan": 0, "weights": 1000 }, { "plan": 0, "weights": 0 }, { "plan": 0, "weights": 0 }, { "plan": 0, "weights": 0 }] }]