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); }
//人工智能游戏动作 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; }