//网络消息 bool __cdecl CGameClientDlg::OnEventSocket(const CMD_Command & Command, const void * pBuffer, WORD wDataSize) { switch (Command.wMainCmdID) { case MDM_GF_FRAME: //框架消息 { return OnFrameMessage(Command.wSubCmdID,pBuffer,wDataSize); } case MDM_GF_GAME: //游戏消息 { return OnGameMessage(Command.wSubCmdID,pBuffer,wDataSize); } } return false; }
//人工智能游戏动作 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; }
bool IAndroid::OnMainSocket(WORD wMainCmdID, WORD wSubCmdID, void * pBuffer, WORD wDataSize) { switch (wSubCmdID) { case IPC_SUB_SOCKET_RECV: //数据接收 { if (wDataSize<sizeof(CMD_Command)) return false; //提取数据 WORD wPacketSize=wDataSize-sizeof(CMD_Command); IPC_SocketPackage * pSocketPackage=(IPC_SocketPackage *)pBuffer; switch(pSocketPackage->Command.wMainCmdID) { case MDM_GF_GAME: { if(wPacketSize == 0) { return OnGameMessage(pSocketPackage->Command.wSubCmdID); } else { return OnGameMessage(pSocketPackage->Command.wSubCmdID,pSocketPackage->cbBuffer,wPacketSize); } } case MDM_GF_FRAME: { switch(pSocketPackage->Command.wSubCmdID) { case SUB_GF_OPTION: //游戏配置 { //效验参数 if (wPacketSize!=sizeof(CMD_GF_Option)) return 0; //消息处理 CMD_GF_Option* pOption=(CMD_GF_Option *)pSocketPackage->cbBuffer; m_bGameStatus = pOption->bGameStatus; return true; } case SUB_GF_SCENE: //游戏场景 { return OnGameSceneMessage(m_bGameStatus,pSocketPackage->cbBuffer,wPacketSize); } case SUB_GF_LOOKON_CONTROL: //旁观控制 { return true; } case SUB_GF_USER_CHAT: //聊天信息 { return true; } case SUB_GF_MESSAGE: //系统消息 { return true; } } } } } } return true; }