zoukankan      html  css  js  c++  java
  • 带控制的抢庄牛牛


    // int代表一张牌, // 低16位代表牌的数字 1-13 A-K // 高16位代表花色 1-4 黑红梅方 // 1 .无牛 玩家手中无法用3张牌组成10的倍数。 1倍 // 2 .牛丁 玩家牌组一达成后,剩下两张牌相加后个位数为1。 1倍 // 3 .牛二 玩家牌组一达成后,剩下两张牌相加后个位数为2。 2倍 // 4 .牛三 玩家牌组一达成后,剩下两张牌相加后个位数为3。 3倍 // 5 .牛四 玩家牌组一达成后,剩下两张牌相加后个位数为4。 4倍 // 6 .牛五 玩家牌组一达成后,剩下两张牌相加后个位数为5。 5倍 // 7 .牛六 玩家牌组一达成后,剩下两张牌相加后个位数为6。 6倍 // 8 .牛七 玩家牌组一达成后,剩下两张牌相加后个位数为7。 7倍 // 9 .牛八 玩家牌组一达成后,剩下两张牌相加后个位数为8。 8倍 // 10 .牛九 玩家牌组一达成后,剩下两张牌相加后个位数为9。 9倍 // 11 .牛牛 玩家牌组一达成后,剩下两张牌相加后个位数为0。 10倍 // 12 .炸弹 玩家手中有四张牌都是一样的点数。 10倍 // 13 .金牛 玩家手中的五张牌都是J、Q、K的花牌牌型。 10倍 // 14 .五小牛 玩家手中的五张牌都<5,且加起来也≤10的牌型。10倍 enum enumPokerType { CATTLE_NONE = -1, CATTLE_0 = 0, CATTLE_1 = 1, CATTLE_2 = 2, CATTLE_3 = 3, CATTLE_4 = 4, CATTLE_5 = 5, CATTLE_6 = 6, CATTLE_7 = 7, CATTLE_8 = 8, CATTLE_9 = 9, CATTLE_CATTLE = 10, CATTLE_BOMB = 11, CATTLE_GOLD = 12, CATTLE_5SMALL = 13, }; struct stBanker { UINT32 userID; INT32 headID; INT64 bankerGolds; INT64 winGolds; INT32 remainNum; char niceName[64]; }; struct stOneGamePokerInfo { vector<INT32> m_banker; vector<INT32> m_tian; vector<INT32> m_di; vector<INT32> m_xuan; vector<INT32> m_huang; INT32 m_Bets[4]; }; class ALLPokerInfo { public: ALLPokerInfo(); ~ALLPokerInfo(); INT32 GetOnePokerType(INT32 poker); INT32 GetOnePokerPoint(INT32 poker); INT32 GetOnePokerPointBetween1And10(INT32 poker); void ShufflePoker(); void SelectPokerClear(); void SelectPokerLastThreeClear(); void Random2PokerInfo(); void RandomLast3PokerInfo(); void MatchingLast3PokerInfo(INT64 golds, INT64 tian, INT64 di, INT64 xuan, INT64 huang, bool isSystem = true); bool IsInSelectPokerInfo(INT32 pokerInfo); // in is true, not in is false INT32 PlayerCompareBankerPokerInfo(vector<INT32> vecPoker); void ComparePokerInfo(); enumPokerType GetPokerType(vector<INT32> vecPoker); bool GetPokerType5SmallCattle(vector<INT32> vecPoker); bool GetPokerTypeGoldCattle(vector<INT32> vecPoker); bool GetPokerTypeBombCattle(vector<INT32> vecPoker); INT32 GetPokerTypeCattleBetweenZeroAndTen(vector<INT32> vecPoker); stOneGamePokerInfo& GetGamePokerInfo() { return m_allSelectPokerInfo; } private: vector<INT32> m_allModulePoker; stOneGamePokerInfo m_allSelectPokerInfo; };

      

    ALLPokerInfo::ALLPokerInfo()
    {
    	m_allModulePoker.clear();
    	m_allSelectPokerInfo.m_banker.clear();
    	m_allSelectPokerInfo.m_tian.clear();
    	m_allSelectPokerInfo.m_di.clear();
    	m_allSelectPokerInfo.m_xuan.clear();
    	m_allSelectPokerInfo.m_huang.clear();
    	memset(m_allSelectPokerInfo.m_Bets, 0, sizeof(m_allSelectPokerInfo.m_Bets));
    
    	for (int i = 1; i <= 4; ++i)
    	{
    		for (int j = 1; j <= 13; ++j)
    		{
    			INT32	pokerInfo = (i << 16) + j;
    			m_allModulePoker.push_back(pokerInfo);
    		}
    	}
    }
    
    ALLPokerInfo::~ALLPokerInfo()
    {
    	m_allModulePoker.clear();
    	m_allSelectPokerInfo.m_banker.clear();
    	m_allSelectPokerInfo.m_tian.clear();
    	m_allSelectPokerInfo.m_di.clear();
    	m_allSelectPokerInfo.m_xuan.clear();
    	m_allSelectPokerInfo.m_huang.clear();
    }
    
    INT32	ALLPokerInfo::GetOnePokerType(INT32	poker)
    {
    	return	poker >> 16;
    }
    
    INT32	ALLPokerInfo::GetOnePokerPoint(INT32	poker)
    {
    	return	poker & 0xFFFF;
    }
    
    INT32	ALLPokerInfo::GetOnePokerPointBetween1And10(INT32	poker)
    {
    	INT32	pokerPoint = GetOnePokerPoint(poker);
    	if (pokerPoint > 10)
    	{
    		pokerPoint = 10;
    	}
    	return	pokerPoint;
    }
    
    void	ALLPokerInfo::ShufflePoker()
    {
    	for (INT32 i = m_allModulePoker.size() - 1; i > 0; --i)
    	{
    		swap(m_allModulePoker[rand() % i], m_allModulePoker[i]);
    	}
    }
    
    void	ALLPokerInfo::SelectPokerClear()
    {
    	m_allSelectPokerInfo.m_banker.clear();
    	m_allSelectPokerInfo.m_tian.clear();
    	m_allSelectPokerInfo.m_di.clear();
    	m_allSelectPokerInfo.m_xuan.clear();
    	m_allSelectPokerInfo.m_huang.clear();
    	memset(m_allSelectPokerInfo.m_Bets, 0, sizeof(m_allSelectPokerInfo.m_Bets));
    }
    
    void	ALLPokerInfo::SelectPokerLastThreeClear()
    {
    	while (m_allSelectPokerInfo.m_banker.size() > 2)
    	{
    		m_allSelectPokerInfo.m_banker.pop_back();
    	}
    	while (m_allSelectPokerInfo.m_tian.size() > 2)
    	{
    		m_allSelectPokerInfo.m_tian.pop_back();
    	}
    	while (m_allSelectPokerInfo.m_di.size() > 2)
    	{
    		m_allSelectPokerInfo.m_di.pop_back();
    	}
    	while (m_allSelectPokerInfo.m_xuan.size() > 2)
    	{
    		m_allSelectPokerInfo.m_xuan.pop_back();
    	}
    	while (m_allSelectPokerInfo.m_huang.size() > 2)
    	{
    		m_allSelectPokerInfo.m_huang.pop_back();
    	}
    }
    
    void	ALLPokerInfo::Random2PokerInfo()
    {
    	SelectPokerClear();
    	auto iter = m_allModulePoker.begin();
    	m_allSelectPokerInfo.m_banker.assign(iter, iter + 2);
    	m_allSelectPokerInfo.m_tian.assign(iter + 2, iter + 4);
    	m_allSelectPokerInfo.m_di.assign(iter + 4, iter + 6);
    	m_allSelectPokerInfo.m_xuan.assign(iter + 6, iter + 8);
    	m_allSelectPokerInfo.m_huang.assign(iter + 8, iter + 10);
    }
    
    void	ALLPokerInfo::RandomLast3PokerInfo()
    {
    	for (auto iter = m_allModulePoker.begin(); iter != m_allModulePoker.end(); iter++)
    	{
    		if (IsInSelectPokerInfo(*iter))
    		{
    			continue;
    		}
    
    		if (m_allSelectPokerInfo.m_banker.size() < 5)
    		{
    			m_allSelectPokerInfo.m_banker.push_back(*iter);
    			continue;
    		}
    		if (m_allSelectPokerInfo.m_tian.size() < 5)
    		{
    			m_allSelectPokerInfo.m_tian.push_back(*iter);
    			continue;
    		}
    		if (m_allSelectPokerInfo.m_di.size() < 5)
    		{
    			m_allSelectPokerInfo.m_di.push_back(*iter);
    			continue;
    		}
    		if (m_allSelectPokerInfo.m_xuan.size() < 5)
    		{
    			m_allSelectPokerInfo.m_xuan.push_back(*iter);
    			continue;
    		}
    		if (m_allSelectPokerInfo.m_huang.size() < 5)
    		{
    			m_allSelectPokerInfo.m_huang.push_back(*iter);
    			continue;
    		}
    
    		return;
    	}
    }
    
    INT32	ALLPokerInfo::PlayerCompareBankerPokerInfo(vector<INT32>	vecPoker)
    {
    	enumPokerType	playerType = GetPokerType(vecPoker);
    	enumPokerType	bankerType = GetPokerType(m_allSelectPokerInfo.m_banker);
    
    	INT32	maxType = 0;
    	if (playerType > bankerType)
    	{
    		maxType = playerType;
    	}
    	else if (playerType < bankerType)
    	{
    		maxType = -bankerType;
    	}
    	else
    	{
    		INT32	bankerPokerPoint = 0;
    		INT32	bankerPokerType = 0;
    
    		for (auto iter = m_allSelectPokerInfo.m_banker.begin(); iter != m_allSelectPokerInfo.m_banker.end(); iter++)
    		{
    			if (GetOnePokerPoint(*iter) > bankerPokerPoint)
    			{
    				bankerPokerPoint = GetOnePokerPoint(*iter);
    				bankerPokerType = GetOnePokerType(*iter);
    			}
    			else if (GetOnePokerPoint(*iter) == bankerPokerPoint)
    			{
    				if (bankerPokerType > GetOnePokerType(*iter)) 
    				{
    					bankerPokerType = GetOnePokerType(*iter);
    				}
    			}
    		}
    		INT32	playerPokerPoint = 0;
    		INT32	playerPokerType = 0;
    
    		for (auto iter = vecPoker.begin(); iter != vecPoker.end(); iter++)
    		{
    			if (GetOnePokerPoint(*iter) > playerPokerPoint)
    			{
    				playerPokerPoint = GetOnePokerPoint(*iter);
    				playerPokerType = GetOnePokerType(*iter);
    			}
    			else if (GetOnePokerPoint(*iter) == playerPokerPoint)
    			{
    				if (playerPokerType > GetOnePokerType(*iter))
    				{
    					playerPokerType = GetOnePokerType(*iter);
    				}
    			}
    		}
    
    		if (playerPokerPoint > bankerPokerPoint)
    		{
    			maxType = playerType;
    			if (0 == maxType)
    			{
    				maxType = 1;
    			}
    		}
    		else if (playerPokerPoint < bankerPokerPoint)
    		{
    			maxType = -bankerType;
    			if (0 == maxType)
    			{
    				maxType = -1;
    			}
    		}
    		else
    		{
    			if (playerPokerType < bankerPokerType)
    			{
    				maxType = playerType;
    				if (0 == maxType)
    				{
    					maxType = 1;
    				}
    			}
    			else
    			{
    				maxType = -bankerType;
    				if (0 == maxType)
    				{
    					maxType = -1;
    				}
    			}
    		}
    	}
    
    	if (abs(maxType) > 10)
    	{
    		maxType = maxType > 0 ? 10 : -10;
    	}
    
    	return maxType;
    }
    
    void	ALLPokerInfo::ComparePokerInfo()
    {
    	memset(m_allSelectPokerInfo.m_Bets, 0, sizeof(m_allSelectPokerInfo.m_Bets));
    	
    	m_allSelectPokerInfo.m_Bets[0] = PlayerCompareBankerPokerInfo(m_allSelectPokerInfo.m_tian);
    	m_allSelectPokerInfo.m_Bets[1] = PlayerCompareBankerPokerInfo(m_allSelectPokerInfo.m_di);
    	m_allSelectPokerInfo.m_Bets[2] = PlayerCompareBankerPokerInfo(m_allSelectPokerInfo.m_xuan);
    	m_allSelectPokerInfo.m_Bets[3] = PlayerCompareBankerPokerInfo(m_allSelectPokerInfo.m_huang);
    }
    
    void	ALLPokerInfo::MatchingLast3PokerInfo(INT64 golds, INT64 tian, INT64 di, INT64 xuan, INT64 huang, bool isSystem)
    {
    	const static INT32	loopCount = 100;
    	
    	static INT64	absMinGolds[loopCount];
    	memset(absMinGolds, 0, loopCount);
    	
    	static	stOneGamePokerInfo	absPokerInfo[loopCount];
    	for (INT32 i = 0; i < loopCount; i++)
    	{
    		absPokerInfo[i].m_banker.clear();
    		absPokerInfo[i].m_tian.clear();
    		absPokerInfo[i].m_di.clear();
    		absPokerInfo[i].m_xuan.clear();
    		absPokerInfo[i].m_huang.clear();
    		memset(absPokerInfo[i].m_Bets, 0, sizeof(absPokerInfo[i].m_Bets));
    	}
    
    	for (INT32 i = 0; i < loopCount; i++)
    	{
    		ShufflePoker();
    		SelectPokerLastThreeClear();
    		RandomLast3PokerInfo();
    		ComparePokerInfo();
    
    		if (isSystem)
    		{
    			absMinGolds[i] = abs(golds - m_allSelectPokerInfo.m_Bets[0] * tian - m_allSelectPokerInfo.m_Bets[1] * di - m_allSelectPokerInfo.m_Bets[2] * xuan - m_allSelectPokerInfo.m_Bets[3] * huang);
    		}
    		else 
    		{
    			absMinGolds[i] = abs(golds + m_allSelectPokerInfo.m_Bets[0] * tian + m_allSelectPokerInfo.m_Bets[1] * di + m_allSelectPokerInfo.m_Bets[2] * xuan + m_allSelectPokerInfo.m_Bets[3] * huang);
    		}
    		
    		absPokerInfo[i] = m_allSelectPokerInfo;
    	}
    
    	INT32	minIndex = 0;
    	INT64	minAbsGolds = absMinGolds[0];
    	for (INT32 i = 0; i < loopCount; i++)
    	{
    		if (minAbsGolds > absMinGolds[i])
    		{
    			minIndex = i;
    			minAbsGolds = absMinGolds[i];
    		}
    	}
    
    	m_allSelectPokerInfo = absPokerInfo[minIndex];
    }
    
    
    bool	ALLPokerInfo::IsInSelectPokerInfo(INT32 pokerInfo)
    {
    	for (auto iter = m_allSelectPokerInfo.m_banker.begin(); iter != m_allSelectPokerInfo.m_banker.end(); iter++)
    	{
    		if (*iter == pokerInfo)
    		{
    			return true;
    		}
    	}
    
    	for (auto iter = m_allSelectPokerInfo.m_tian.begin(); iter != m_allSelectPokerInfo.m_tian.end(); iter++)
    	{
    		if (*iter == pokerInfo)
    		{
    			return true;
    		}
    	}
    
    	for (auto iter = m_allSelectPokerInfo.m_di.begin(); iter != m_allSelectPokerInfo.m_di.end(); iter++)
    	{
    		if (*iter == pokerInfo)
    		{
    			return true;
    		}
    	}
    
    	for (auto iter = m_allSelectPokerInfo.m_xuan.begin(); iter != m_allSelectPokerInfo.m_xuan.end(); iter++)
    	{
    		if (*iter == pokerInfo)
    		{
    			return true;
    		}
    	}
    
    	for (auto iter = m_allSelectPokerInfo.m_huang.begin(); iter != m_allSelectPokerInfo.m_huang.end(); iter++)
    	{
    		if (*iter == pokerInfo)
    		{
    			return true;
    		}
    	}
    	
    	return false;
    }
    
    enumPokerType	ALLPokerInfo::GetPokerType(vector<INT32>	vecPoker)
    {
    	if(vecPoker.size() != 5) 
    	{
    		return CATTLE_NONE;
    	}
    
    	if (GetPokerType5SmallCattle(vecPoker))
    	{
    		return	CATTLE_5SMALL;
    	}
    
    	if (GetPokerTypeGoldCattle(vecPoker))
    	{
    		return	CATTLE_GOLD;
    	}
    
    	if (GetPokerTypeBombCattle(vecPoker))
    	{
    		return	CATTLE_BOMB;
    	}
    
    	return	enumPokerType(GetPokerTypeCattleBetweenZeroAndTen(vecPoker));
    }
    
    bool	ALLPokerInfo::GetPokerType5SmallCattle(vector<INT32>	vecPoker)
    {
    	INT32	allPokerPointSum = 0;
    	for (auto iter = vecPoker.begin(); iter != vecPoker.end(); ++iter)
    	{
    		INT32	poker = GetOnePokerPoint(*iter);
    		if (poker >= 5)
    		{
    			return false;
    		}	
    		allPokerPointSum += poker;
    	}
    
    	if (allPokerPointSum > 10) 
    	{
    		return false;
    	}
    
    	return true;
    }
    
    bool	ALLPokerInfo::GetPokerTypeGoldCattle(vector<INT32>	vecPoker)
    {
    	for (auto iter = vecPoker.begin(); iter != vecPoker.end(); ++iter)
    	{
    		if (GetOnePokerPoint(*iter) <= 10)
    		{
    			return false;
    		}	
    	}
    	return true;
    }
    
    bool	ALLPokerInfo::GetPokerTypeBombCattle(vector<INT32>	vecPoker)
    {
    	map<INT32, INT32>	mapPokerPointCount;
    	mapPokerPointCount.clear();
    
    	for (auto iter = vecPoker.begin(); iter != vecPoker.end(); ++iter)
    	{
    		auto iterFind = mapPokerPointCount.find(*iter);
    		if (iterFind == mapPokerPointCount.end())
    		{
    			mapPokerPointCount[*iter] = 0;
    		}
    
    		mapPokerPointCount[*iter] = mapPokerPointCount[*iter] + 1;
    	}
    
    	for (auto iter = mapPokerPointCount.begin(); iter != mapPokerPointCount.end(); ++iter)
    	{
    		if (4 == iter->second)
    		{
    			return true;
    		}
    	}
    
    	return false;
    }
    
    static	vector<vector<INT32>> FiveChooseThree(vector<INT32>	vecPoker)
    {
    	vector<vector<INT32>> allPokerPossibility;
    	allPokerPossibility.clear();
    
    	vector<INT32>	vecPoint;
    
    	vecPoint.clear();
    	vecPoint = vecPoker;
    	allPokerPossibility.push_back(vecPoint);
    
    	vecPoint.clear();
    	vecPoint.push_back(vecPoker[0]);
    	vecPoint.push_back(vecPoker[1]);
    	vecPoint.push_back(vecPoker[3]);
    	vecPoint.push_back(vecPoker[2]);
    	vecPoint.push_back(vecPoker[4]);
    	allPokerPossibility.push_back(vecPoint);
    
    	vecPoint.clear();
    	vecPoint.push_back(vecPoker[0]);
    	vecPoint.push_back(vecPoker[1]);
    	vecPoint.push_back(vecPoker[4]);
    	vecPoint.push_back(vecPoker[2]);
    	vecPoint.push_back(vecPoker[3]);
    	allPokerPossibility.push_back(vecPoint);
    
    	vecPoint.clear();
    	vecPoint.push_back(vecPoker[0]);
    	vecPoint.push_back(vecPoker[2]);
    	vecPoint.push_back(vecPoker[3]);
    	vecPoint.push_back(vecPoker[1]);
    	vecPoint.push_back(vecPoker[4]);
    	allPokerPossibility.push_back(vecPoint);
    
    	vecPoint.clear();
    	vecPoint.push_back(vecPoker[0]);
    	vecPoint.push_back(vecPoker[2]);
    	vecPoint.push_back(vecPoker[4]);
    	vecPoint.push_back(vecPoker[1]);
    	vecPoint.push_back(vecPoker[3]);
    	allPokerPossibility.push_back(vecPoint);
    
    	vecPoint.clear();
    	vecPoint.push_back(vecPoker[0]);
    	vecPoint.push_back(vecPoker[3]);
    	vecPoint.push_back(vecPoker[4]);
    	vecPoint.push_back(vecPoker[1]);
    	vecPoint.push_back(vecPoker[2]);
    	allPokerPossibility.push_back(vecPoint);
    
    	vecPoint.clear();
    	vecPoint.push_back(vecPoker[1]);
    	vecPoint.push_back(vecPoker[2]);
    	vecPoint.push_back(vecPoker[3]);
    	vecPoint.push_back(vecPoker[0]);
    	vecPoint.push_back(vecPoker[4]);
    	allPokerPossibility.push_back(vecPoint);
    
    	vecPoint.clear();
    	vecPoint.push_back(vecPoker[1]);
    	vecPoint.push_back(vecPoker[2]);
    	vecPoint.push_back(vecPoker[4]);
    	vecPoint.push_back(vecPoker[0]);
    	vecPoint.push_back(vecPoker[3]);
    	allPokerPossibility.push_back(vecPoint);
    
    	vecPoint.clear();
    	vecPoint.push_back(vecPoker[1]);
    	vecPoint.push_back(vecPoker[3]);
    	vecPoint.push_back(vecPoker[4]);
    	vecPoint.push_back(vecPoker[0]);
    	vecPoint.push_back(vecPoker[2]);
    	allPokerPossibility.push_back(vecPoint);
    
    	vecPoint.clear();
    	vecPoint.push_back(vecPoker[2]);
    	vecPoint.push_back(vecPoker[3]);
    	vecPoint.push_back(vecPoker[4]);
    	vecPoint.push_back(vecPoker[0]);
    	vecPoint.push_back(vecPoker[1]);
    	allPokerPossibility.push_back(vecPoint);
    
    	return	allPokerPossibility;
    }
    
    INT32	ALLPokerInfo::GetPokerTypeCattleBetweenZeroAndTen(vector<INT32>	vecPoker)
    {
    	INT32	maxCattle = 0;
    	vector<vector<INT32>> allPokerPossibility = FiveChooseThree(vecPoker);
    
    	for (auto iter = allPokerPossibility.begin(); iter !=  allPokerPossibility.end(); ++iter)
    	{
    		INT32	threeSum = GetOnePokerPointBetween1And10((*iter)[0]) + GetOnePokerPointBetween1And10((*iter)[1]) + GetOnePokerPointBetween1And10((*iter)[2]);
    		if (0 == threeSum % 10)
    		{
    			INT32	twoSum = GetOnePokerPointBetween1And10((*iter)[3]) + GetOnePokerPointBetween1And10((*iter)[4]);
    			if (twoSum == 10 || twoSum == 20)
    			{
    				maxCattle = 10;
    			}
    			else 
    			{
    				if (twoSum % 10 > maxCattle)
    				{
    					maxCattle = twoSum % 10;
    				}
    			}
    		}
    	}
    
    	return	maxCattle;
    }
    

    //状态机

    INT32	CGSGameRoom::OnGameRoomState(){
    	
    	TIME_SECOND tCurTime = WYYTools_Instance->GetCurSecond();
    	
    	if (m_eGameRoomState == eGameRoomState_Init) {
    		if (g_cGSGameHallInstance.GetModelStatus() == eModelStatus_Working) {
    			m_eGameRoomState = eGameRoomState_Send2Poker;
    			m_stateOutTime = tCurTime + c_n32Send2PokerTime;
    			GameRoomState_Send2Poker();
    		}
    	}
    	else if (m_eGameRoomState == eGameRoomState_Send2Poker) {
    		if (tCurTime >= m_stateOutTime) {
    			m_eGameRoomState = eGameRoomState_Beting;
    			m_stateOutTime = tCurTime + c_n32BetingTime;
    			NotifySceneUserState(NULL);
    		}
    	}
    	else if (m_eGameRoomState == eGameRoomState_Beting) {
    		if (tCurTime >= m_stateOutTime) {
    			m_eGameRoomState = eGameRoomState_SendLast3Poker;
    			m_stateOutTime = tCurTime + c_n32SendLast3PokerTime;
    			GameRoomState_SendLast3Poker();
    		}
    	}
    	else if (m_eGameRoomState == eGameRoomState_SendLast3Poker) {
    		if (tCurTime >= m_stateOutTime) {
    			m_eGameRoomState = eGameRoomState_Result;
    			m_stateOutTime = tCurTime + c_n32ResultTime;
    			GameRoomState_CalcResult();
    		}
    	}
    	else if (m_eGameRoomState == eGameRoomState_Result) {
    		if (tCurTime >= m_stateOutTime) {
    
    			// 0 = 不操作 1 = 询问补庄 2 = 换庄
    			INT32	bankerState = JudgeChangeBanker();
    			m_BankerTiaoZhengChips = 0;
    			if (1 == bankerState)
    			{
    				m_eGameRoomState = eGameRoomState_RoundBanker;
    				m_stateOutTime = tCurTime + c_n32RoundBanker;
    				GameRoomState_RoundBanker(bankerState);
    				
    			}
    			else if (2 == bankerState)
    			{
    				m_eGameRoomState = eGameRoomState_ChangeBanker;
    				m_stateOutTime = tCurTime + c_n32ChangeBanker;
    				GameRoomState_ChangeBanker();
    			}
    			else 
    			{	
    				m_eGameRoomState = eGameRoomState_ContinueBanker;
    				m_stateOutTime = tCurTime + c_n32IsContinueBanker;
    				GameRoomState_RoundBanker(bankerState);
    
    				//m_eGameRoomState = eGameRoomState_Send2Poker;
    				//m_stateOutTime = tCurTime + c_n32Send2PokerTime;
    				//GameRoomState_Send2Poker();
    			}
    
    		}
    	}
    	else if (m_eGameRoomState == eGameRoomState_RoundBanker) {
    		if (tCurTime >= m_stateOutTime) {
    			m_eGameRoomState = eGameRoomState_ChangeBanker;
    			m_stateOutTime = tCurTime + c_n32ChangeBanker;
    			GameRoomState_ChangeBanker();
    		}
    	}
    	else if (m_eGameRoomState == eGameRoomState_ContinueBanker) {
    		if (tCurTime >= m_stateOutTime) {
    			m_eGameRoomState = eGameRoomState_ChangeBanker;
    			m_stateOutTime = tCurTime + c_n32ChangeBanker;
    			GameRoomState_ChangeBanker();
    		}
    	}
    	else if (m_eGameRoomState == eGameRoomState_ChangeBanker) {
    		if (tCurTime >= m_stateOutTime) {
    			m_eGameRoomState = eGameRoomState_Send2Poker;
    			m_stateOutTime = tCurTime + c_n32Send2PokerTime;
    			GameRoomState_Send2Poker();
    		}
    	}
    
    	return 0;
    }
    

    //先发2张牌,下注,再发三张牌

     

    void	CGSGameRoom::GameRoomState_Send2Poker()
    {
    	m_allPokerInfo.SelectPokerClear();
    	m_allPokerInfo.ShufflePoker();
    	m_allPokerInfo.Random2PokerInfo();
    
    	m_AllBets.vecTianGolds.clear();
    	m_AllBets.vecDiGolds.clear();
    	m_AllBets.vecXuanGolds.clear();
    	m_AllBets.vecHuangGolds.clear();
    	m_GameUserBets.clear();
    	m_SynFlyGameUserBets.clear();
    
    	NotifySceneUserState(NULL);
    	NotifySceneUserPokerInfo(0, 2, NULL);
    }
    
    
    void	CGSGameRoom::MatchingLast3PokerInfo()
    {
    	INT64	tianGolds = 0;
    	INT64	diGolds = 0;
    	INT64	xuanGolds = 0;
    	INT64	huangGolds = 0;
    	
    
    	CGSGameUser* pGameUser = g_cGSGameHallInstance.GetCGSGameUserByID(m_BankerUserID);
    
    	if (NULL != pGameUser)
    	{
    		for (auto iter = m_GameUserBets.begin(); iter != m_GameUserBets.end(); iter++)
    		{
    			if (UserIDInRobotVec(iter->first))
    			{
    				tianGolds += iter->second.tianGolds;
    				diGolds += iter->second.diGolds;;
    				xuanGolds += iter->second.xuanGolds;;
    				huangGolds += iter->second.haungGolds;
    			}
    		}
    		INT64	winGolds = g_cGSGameHallInstance.SelectPlan(4) * (tianGolds + diGolds + xuanGolds + huangGolds) / 10000;
    		m_allPokerInfo.MatchingLast3PokerInfo(winGolds, tianGolds, diGolds, xuanGolds, huangGolds, false);
    	}
    	else
    	{
    		for (auto iter = m_GameUserBets.begin(); iter != m_GameUserBets.end(); iter++)
    		{
    			if (!UserIDInRobotVec(iter->first))
    			{
    				tianGolds += iter->second.tianGolds;
    				diGolds += iter->second.diGolds;;
    				xuanGolds += iter->second.xuanGolds;;
    				huangGolds += iter->second.haungGolds;
    			}
    		}
    		INT64	winGolds = g_cGSGameHallInstance.SelectPlan(4) * (tianGolds + diGolds + xuanGolds + huangGolds) / 10000;
    		m_allPokerInfo.MatchingLast3PokerInfo(winGolds, tianGolds, diGolds, xuanGolds, huangGolds, true);
    	}
    
    
    	m_awardRecords.push_back(m_allPokerInfo);
    	while (m_awardRecords.size() > 20)
    	{
    		m_awardRecords.erase(m_awardRecords.begin());
    	}
    }
    

    根据血池,玩家下注情况,选择相应策略,根据策略给庄家和天地玄黄配牌,把所有玩家放在一起统一处理输赢

    策略的json

    [{
        "threshold": 0,
        "info": [{
            "plan": -100000,
            "weights": 150
        }, {
            "plan": -71600,
            "weights": 350
        }, {
            "plan": -50505,
            "weights": 650
        }, {
            "plan": -31300,
            "weights": 850
        }, {
            "plan": -10800,
            "weights": 1000
        }, {
            "plan": 18300,
            "weights": 200
        }, {
            "plan": 25500,
            "weights": 600
        }, {
            "plan": 31500,
            "weights": 600
        }, {
            "plan": 45500,
            "weights": 1000
        }, {
            "plan": 53500,
            "weights": 800
        }, {
            "plan": 62800,
            "weights": 700
        }, {
            "plan": 74700,
            "weights": 900
        }, {
            "plan": 82840,
            "weights": 700
        }, {
            "plan": 92500,
            "weights": 700
        }, {
            "plan": 100000,
            "weights": 800
        }]
    }, {
        "threshold": 50000000,
        "info": [{
            "plan": -100000,
            "weights": 200
        }, {
            "plan": -71000,
            "weights": 200
        }, {
            "plan": -61600,
            "weights": 400
        }, {
            "plan": -52000,
            "weights": 600
        }, {
            "plan": -31500,
            "weights": 800
        }, {
            "plan": -12500,
            "weights": 1400
        }, {
            "plan": -6310,
            "weights": 1400
        }, {
            "plan": 25000,
            "weights": 100
        }, {
            "plan": 33300,
            "weights": 100
        }, {
            "plan": 40100,
            "weights": 400
        }, {
            "plan": 50500,
            "weights": 800
        }, {
            "plan": 62500,
            "weights": 1000
        }, {
            "plan": 75600,
            "weights": 800
        }, {
            "plan": 88000,
            "weights": 1000
        }, {
            "plan": 10000,
            "weights": 800
        }]
    }, {
        "threshold": 100000000,
        "info": [{
            "plan": -100000,
            "weights": 200
        }, {
            "plan": -95270,
            "weights": 400
        }, {
            "plan": -81848,
            "weights": 400
        }, {
            "plan": -70842,
            "weights": 600
        }, {
            "plan": -50505,
            "weights": 800
        }, {
            "plan": -45000,
            "weights": 1000
        }, {
            "plan": -23000,
            "weights": 1200
        }, {
            "plan": -12000,
            "weights": 1400
        }, {
            "plan": 33300,
            "weights": 100
        }, {
            "plan": 40100,
            "weights": 100
        }, {
            "plan": 50505,
            "weights": 200
        }, {
            "plan": 62500,
            "weights": 600
        }, {
            "plan": 82840,
            "weights": 1000
        }, {
            "plan": 92500,
            "weights": 1200
        }, {
            "plan": 100000,
            "weights": 800
        }]
    }, {
        "threshold": 500000000,
        "info": [{
            "plan": -100000,
            "weights": 400
        }, {
            "plan": -82840,
            "weights": 600
        }, {
            "plan": -70747,
            "weights": 600
        }, {
            "plan": -42300,
            "weights": 600
        }, {
            "plan": -31300,
            "weights": 1200
        }, {
            "plan": -21400,
            "weights": 1200
        }, {
            "plan": -10600,
            "weights": 1400
        }, {
            "plan": 11500,
            "weights": 600
        }, {
            "plan": 20400,
            "weights": 600
        }, {
            "plan": 32000,
            "weights": 400
        }, {
            "plan": 47500,
            "weights": 400
        }, {
            "plan": 62500,
            "weights": 400
        }, {
            "plan": 75600,
            "weights": 600
        }, {
            "plan": 88000,
            "weights": 600
        }, {
            "plan": 100000,
            "weights": 400
        }]
    }, {
        "threshold": 1000000000,
        "info": [{
            "plan": -100000,
            "weights": 600
        }, {
            "plan": -95270,
            "weights": 800
        }, {
            "plan": -85000,
            "weights": 600
        }, {
            "plan": -74800,
            "weights": 600
        }, {
            "plan": -50500,
            "weights": 1200
        }, {
            "plan": -36700,
            "weights": 1200
        }, {
            "plan": -11500,
            "weights": 1000
        }, {
            "plan": 20400,
            "weights": 400
        }, {
            "plan": 32000,
            "weights": 400
        }, {
            "plan": 42300,
            "weights": 500
        }, {
            "plan": 52013,
            "weights": 400
        }, {
            "plan": 75600,
            "weights": 500
        }, {
            "plan": 82840,
            "weights": 600
        }, {
            "plan": 95500,
            "weights": 600
        }, {
            "plan": 100000,
            "weights": 600
        }]
    }, {
        "threshold": 2500000000,
        "info": [{
            "plan": -100000,
            "weights": 800
        }, {
            "plan": -95270,
            "weights": 800
        }, {
            "plan": -82840,
            "weights": 200
        }, {
            "plan": -50500,
            "weights": 500000
        }, {
            "plan": -41600,
            "weights": 800
        }, {
            "plan": -34300,
            "weights": 1500
        }, {
            "plan": -20100,
            "weights": 1600
        }, {
            "plan": -10000,
            "weights": 1800
        }, {
            "plan": 21200,
            "weights": 25
        }, {
            "plan": 42300,
            "weights": 25
        }, {
            "plan": 63915,
            "weights": 50
        }, {
            "plan": 74088,
            "weights": 50
        }, {
            "plan": 82840,
            "weights": 150
        }, {
            "plan": 92900,
            "weights": 850
        }, {
            "plan": 100000,
            "weights": 8500
        }]
    }]

     

     

  • 相关阅读:
    c#读sql server数据添加到MySQL数据库
    ASP.NET取得Request URL的各个部分
    jquery,attr,prop,checkbox标签已有checked=checked但是不显示勾选
    ASP.NET 4.0 :MasterPage母版页的ClientIDMode属性
    百度地图 根据坐标,获取省份,城市,区域
    ECharts
    SQL 更新修改删除一个表,库存自动增减的写法
    ajaxFileupload 多文件上传
    JSON C# Class Generator ---由json字符串生成C#实体类的工具
    mvc 部署到iis 提示错误未能加载文件或程序集System.Web.Http.WebHost
  • 原文地址:https://www.cnblogs.com/hailong88/p/11046051.html
Copyright © 2011-2022 走看看