Example #1
0
void CTableFrameSink::CountDownTime( WORD wChairID , bool bKill/*=false*/ )
{
	if(bKill)
	{
		if(wChairID == INVALID_CHAIR)
		{
			for (int i=0; i<GAME_PLAYER ;i++)
			{
				IServerUserItem *pServerUserItem = m_pITableFrame->GetServerUserItem(i);
				if(pServerUserItem == NULL) continue;
				m_pITableFrame->KillGameTimer(IDI_COUNTDOWN+i);
			}
		}
		else
		{
			m_pITableFrame->KillGameTimer(IDI_COUNTDOWN+wChairID);
		}
	}
	else
	{
		BYTE cbLeaveTime = TIME_LESS;
		if(m_pITableFrame->GetGameStatus() == GS_FREE)
		{
			cbLeaveTime = TIME_LESS+10;
		}
		else if(m_pITableFrame->GetGameStatus() == GS_OX_PLAY)
		{
			cbLeaveTime = TIME_LESS*2;
		}

		if(wChairID != INVALID_CHAIR)
		{
			IServerUserItem *pServerUserItem = m_pITableFrame->GetServerUserItem(wChairID);
			ASSERT(pServerUserItem != NULL);
			if(pServerUserItem!=NULL && pServerUserItem->GetUserStatus() == US_OFFLINE)
			{
				cbLeaveTime = TIME_OFFLINE;
			}
			m_pITableFrame->SetGameTimer(IDI_COUNTDOWN+wChairID , cbLeaveTime*1000 , 1 , 0);
		}
		else
		{
			for(int i=0 ; i<GAME_PLAYER; i++)
			{
				IServerUserItem *pServerUserItem = m_pITableFrame->GetServerUserItem(i);
				if(pServerUserItem == NULL) continue;
				if(pServerUserItem->GetUserStatus() == US_OFFLINE)
				{
					cbLeaveTime = TIME_OFFLINE;
				}
				m_pITableFrame->SetGameTimer(IDI_COUNTDOWN+i , cbLeaveTime*1000 , 1 , 0);
			}
		}

	}
	m_pITableFrame->KillGameTimer(IDI_CONCLUDEGAME);
	m_pITableFrame->SetGameTimer(IDI_CONCLUDEGAME,60*1000,1,0);
}
Example #2
0
//人工智能游戏动作
bool __cdecl CTableFrameSink::OnPerformAIGameAction()
{
	//机器人判断
	IServerUserItem * pIServerUserItem = m_pITableFrame->GetServerUserItem(m_wCurrentUser);
	if(pIServerUserItem == NULL || 
		pIServerUserItem->IsAIUser() == false || 
		pIServerUserItem->GetUserStatus() != US_PLAY)
		return false;
	WORD wChairID = pIServerUserItem->GetChairID();
	if(wChairID == INVALID_CHAIR)
		return false;

	WORD wCurrentWiner=DeduceWiner(0,4);
	//判断当前赢家
	if(wCurrentWiner == wChairID)
	{
	}
	else
	{
		DWORD wGameUser = m_pITableFrame->GetAIKillGameUserChairID();
		//机器人智商-相当几率放弃
		if(wGameUser == wCurrentWiner && CAIUtil::DetectionProbability(m_pGameServiceOption->cbAILevel))
		{
			//发送消息
			OnGameMessage(SUB_C_GIVE_UP, NULL, 0, pIServerUserItem);

			return true;
		}
		else
		{

		}
	}
	//获取金币	
	LONG lTurnMaxGold = 1;
	if (m_bSendCardCount<=2)
	{
		lTurnMaxGold=m_fMaxGold/4L;
		if(lTurnMaxGold <= m_pGameServiceOption->dwCellScore)
		{
			lTurnMaxGold = m_pGameServiceOption->dwCellScore;
		}
	}
	else if (m_bSendCardCount==3) lTurnMaxGold=m_fMaxGold/2L;
	else lTurnMaxGold=m_fMaxGold;

	lTurnMaxGold=lTurnMaxGold-m_fTableGold[wChairID*2+1];
	lTurnMaxGold = __max(lTurnMaxGold,m_fTurnBasicGold);

	lTurnMaxGold = lTurnMaxGold - m_fTurnBasicGold;
	lTurnMaxGold += 1;
	LONG lGold=0;
	if(lTurnMaxGold!=0)
	{
		lGold= (wCurrentWiner == wChairID) ? (((rand() % (LONG)lTurnMaxGold)/2)  + lTurnMaxGold/2): (rand() % ((LONG)lTurnMaxGold)/4);
	}
	else
	{
		//lGold = 1;
	}
	lGold=lGold + m_fTurnBasicGold;
	lGold=__max(lGold,m_fTurnBasicGold);


	//发送数据
	CMD_C_AddGold AddPoint;
	AddPoint.fGold=lGold;
	OnGameMessage(SUB_C_ADD_GOLD,&AddPoint,sizeof(AddPoint), pIServerUserItem);

	return true;
}