public override bool Action(NotifyType notifyType, BaseInfo baseInfo, UserInfo userInfo) { switch (notifyType) { case NotifyType.Request_AddScore: { AddScoreInfo addScoreInfo = (AddScoreInfo)baseInfo; int chairID = ((DzCardTable)_GameTable).GetSeatterIndex(userInfo); OnUserAddScore(chairID, addScoreInfo.lAddLessScore, false); AutoProcess(); } break; case NotifyType.Request_GiveUp: { AddScoreInfo addScoreInfo = (AddScoreInfo)baseInfo; bool ret = OnUserGiveUp(userInfo, addScoreInfo); AutoProcess(); return(ret); } break; case NotifyType.Request_OpenCard: { AddScoreInfo addScoreInfo = new AddScoreInfo(); addScoreInfo.wAddScoreUser = ((DzCardTable)_GameTable).GetSeatterIndex(userInfo); _GameTable.BroadCastGame(NotifyType.Reply_OpenCard, addScoreInfo); } break; default: return(base.Action(notifyType, baseInfo, userInfo)); break; } return(true); }
public override bool PlayerOutTable(BaseInfo baseInfo, UserInfo userInfo) { int seaterIndex = GetSeatterIndex(userInfo); if (seaterIndex >= 0) { if (_Rounds[_TableInfo._RoundIndex] is DzCardStartRound) { AddScoreInfo giveInfo = new AddScoreInfo(); _Rounds[_TableInfo._RoundIndex].Action(NotifyType.Request_GiveUp, giveInfo, userInfo); } DzCardInfo dzCardInfo = (DzCardInfo)_TableInfo; dzCardInfo.m_cbPlayStatus[seaterIndex] = false; dzCardInfo.m_Seatter[seaterIndex] = null; } return(base.PlayerOutTable(baseInfo, userInfo)); }
//加注事件 bool OnUserAddScore(int wChairID, int lScore, bool bGiveUp) { DzCardInfo dzCardInfo = (DzCardInfo)_GameTable._TableInfo; //校验用户 //ASSERT(m_wCurrentUser==wChairID); if (dzCardInfo.m_wCurrentUser != wChairID) { return(false); } //校验金币 //ASSERT((lScore +m_lTotalScore[wChairID])<= m_lUserMaxScore[wChairID]); if ((lScore + dzCardInfo.m_lTotalScore[wChairID]) > dzCardInfo.m_lUserMaxScore[wChairID]) { return(false); } //ASSERT(lScore>=0L); if ((lScore < 0)) { return(false); } //累计金币 dzCardInfo.m_lTableScore[wChairID] += lScore; dzCardInfo.m_lTotalScore[wChairID] += lScore; //平衡下注 if (dzCardInfo.m_lTableScore[wChairID] > dzCardInfo.m_lBalanceScore) { dzCardInfo.m_lBalanceScore = dzCardInfo.m_lTableScore[wChairID]; } //梭哈判断 if (dzCardInfo.m_lTotalScore[wChairID] == dzCardInfo.m_lUserMaxScore[wChairID]) { dzCardInfo.m_cbShowHand[wChairID] = true; } //用户切换 int wNextPlayer = GameDefine.INVALID_CHAIR; for (int i = 1; i < DzCardDefine.GAME_PLAYER; i++) { //设置变量 dzCardInfo.m_wOperaCount++; wNextPlayer = (dzCardInfo.m_wCurrentUser + i) % DzCardDefine.GAME_PLAYER; //继续判断 if ((dzCardInfo.m_cbPlayStatus[wNextPlayer] == true) && (dzCardInfo.m_cbShowHand[wNextPlayer] == false)) { break; } } //ASSERT(wNextPlayer < m_wPlayerCount); //完成判断 bool bFinishTurn = false; if (dzCardInfo.m_wOperaCount >= DzCardDefine.GAME_PLAYER) { int i = 0; for (i = 0; i < DzCardDefine.GAME_PLAYER; i++) { //过滤未平衡 和未梭哈用户 if ((dzCardInfo.m_cbPlayStatus[i] == true) && (dzCardInfo.m_lTableScore[i] < dzCardInfo.m_lBalanceScore) && (dzCardInfo.m_cbShowHand[i] == false)) { break; } } if (i == DzCardDefine.GAME_PLAYER) { bFinishTurn = true; } } //A家show190,B放弃,C还选择? if (!bFinishTurn) { int wPlayCount = 0; int wShowCount = 0; for (int i = 0; i < DzCardDefine.GAME_PLAYER; i++) { if (dzCardInfo.m_cbPlayStatus[i] == true) { if (dzCardInfo.m_cbShowHand[i] == true) { wShowCount++; } wPlayCount++; } } if (wPlayCount - 1 == wShowCount && dzCardInfo.m_lTableScore[wNextPlayer] >= dzCardInfo.m_lBalanceScore) { bFinishTurn = true; } } //继续加注 if (!bFinishTurn) { //当前用户 dzCardInfo.m_wCurrentUser = wNextPlayer; //最小值为平衡下注 -桌面下注 和 剩余金币中取小 可能梭哈 dzCardInfo.m_lTurnLessScore = Math.Min(dzCardInfo.m_lBalanceScore - dzCardInfo.m_lTableScore[dzCardInfo.m_wCurrentUser], dzCardInfo.m_lUserMaxScore[dzCardInfo.m_wCurrentUser] - dzCardInfo.m_lTotalScore[dzCardInfo.m_wCurrentUser]); dzCardInfo.m_lTurnMaxScore = dzCardInfo.m_lUserMaxScore[dzCardInfo.m_wCurrentUser] - dzCardInfo.m_lTotalScore[dzCardInfo.m_wCurrentUser]; if (dzCardInfo.m_lTotalScore[dzCardInfo.m_wCurrentUser] == dzCardInfo.m_lCellScore) { int bTemp = (dzCardInfo.m_lBalanceScore == dzCardInfo.m_lCellScore * 2) ? (dzCardInfo.m_lCellScore * 2) : ((dzCardInfo.m_lBalanceScore - dzCardInfo.m_lCellScore * 2) * 2); dzCardInfo.m_lAddLessScore = dzCardInfo.m_lCellScore + bTemp; } else { dzCardInfo.m_lAddLessScore = (int)((dzCardInfo.m_lBalanceScore == 0) ? (2 * dzCardInfo.m_lCellScore) : (Math.Max((dzCardInfo.m_lBalanceScore - dzCardInfo.m_lTableScore[dzCardInfo.m_wCurrentUser]) * 2, 2L * dzCardInfo.m_lCellScore))); } //构造数据 AddScoreInfo AddScore = new AddScoreInfo(); AddScore.lAddScoreCount = lScore; AddScore.wAddScoreUser = wChairID; AddScore.wCurrentUser = dzCardInfo.m_wCurrentUser; AddScore.lTurnLessScore = dzCardInfo.m_lTurnLessScore; AddScore.lTurnMaxScore = dzCardInfo.m_lTurnMaxScore; AddScore.lAddLessScore = dzCardInfo.m_lAddLessScore; //发送数据 _GameTable.BroadCastGame(NotifyType.Reply_AddScore, AddScore); //m_pITableFrame->SendTableData(INVALID_CHAIR,SUB_S_ADD_SCORE,&AddScore,sizeof(AddScore)); //m_pITableFrame->SendLookonData(INVALID_CHAIR,SUB_S_ADD_SCORE,&AddScore,sizeof(AddScore)); return(true); } //平衡次数 dzCardInfo.m_cbBalanceCount++; dzCardInfo.m_wOperaCount = 0; //第1次下注平衡后就开始发给三张公牌 //第2次下注平衡后就开始发第四张公牌 //第3次下注平衡后就开始发第五张公牌 //第4次下注平衡后就结束游戏 //D家下注 int wDUser = dzCardInfo.m_wDUser; for (int i = 0; i < DzCardDefine.GAME_PLAYER; i++) { wDUser = (dzCardInfo.m_wDUser + i) % DzCardDefine.GAME_PLAYER; if (dzCardInfo.m_cbPlayStatus[wDUser] == true && dzCardInfo.m_cbShowHand[wDUser] == false) { break; } } //重值变量 dzCardInfo.m_lBalanceScore = 0; dzCardInfo.m_lTurnLessScore = 0; dzCardInfo.m_lTurnMaxScore = dzCardInfo.m_lUserMaxScore[wDUser] - dzCardInfo.m_lTotalScore[wDUser]; dzCardInfo.m_lAddLessScore = 2 * dzCardInfo.m_lCellScore; //构造数据 AddScoreInfo AddScoreInfo = new AddScoreInfo(); AddScoreInfo.wAddScoreUser = wChairID; AddScoreInfo.wCurrentUser = GameDefine.INVALID_CHAIR; AddScoreInfo.lAddScoreCount = lScore; AddScoreInfo.lTurnLessScore = dzCardInfo.m_lTurnLessScore; AddScoreInfo.lTurnMaxScore = dzCardInfo.m_lTurnMaxScore; AddScoreInfo.lAddLessScore = dzCardInfo.m_lAddLessScore; //清理数据 Array.Clear(dzCardInfo.m_lTableScore, 0, dzCardInfo.m_lTableScore.Length); dzCardInfo.m_lBalanceScore = 0; //发送数据 _GameTable.BroadCastGame(NotifyType.Reply_AddScore, AddScoreInfo); //m_pITableFrame->SendTableData(INVALID_CHAIR,SUB_S_ADD_SCORE,&AddScore,sizeof(AddScore)); //m_pITableFrame->SendLookonData(INVALID_CHAIR,SUB_S_ADD_SCORE,&AddScore,sizeof(AddScore)); //结束判断 if (dzCardInfo.m_cbBalanceCount == 4) { //OnEventGameEnd(INVALID_CHAIR,NULL,GER_NORMAL); _isEnd = true; dzCardInfo.cbTotalEnd = 1; return(true); } //梭哈用户统计 int wShowHandCount = 0; int wPlayerCount = 0; for (int i = 0; i < DzCardDefine.GAME_PLAYER; i++) { if (dzCardInfo.m_cbShowHand[i] == true) { wShowHandCount++; } if (dzCardInfo.m_cbPlayStatus[i] == true) { wPlayerCount++; } } //只剩一玩家没梭或者全梭 if ((wShowHandCount >= wPlayerCount - 1) && dzCardInfo.m_cbBalanceCount < 4) { //构造数据 SendCardInfo SendCard = new SendCardInfo(); SendCard.cbPublic = dzCardInfo.m_cbBalanceCount; SendCard.wCurrentUser = GameDefine.INVALID_CHAIR; SendCard.cbSendCardCount = DzCardDefine.MAX_CENTERCOUNT; SendCard.cbCenterCardData = dzCardInfo.m_cbCenterCardData; ////发送数据 _GameTable.BroadCastGame(NotifyType.Reply_SendCard, SendCard); //m_pITableFrame->SendTableData(INVALID_CHAIR,SUB_S_SEND_CARD,&SendCard,sizeof(SendCard)); //m_pITableFrame->SendLookonData(INVALID_CHAIR,SUB_S_SEND_CARD,&SendCard,sizeof(SendCard)); ////结束游戏 //OnEventGameEnd(INVALID_CHAIR,NULL,GER_NORMAL); dzCardInfo.m_cbSendCardCount = DzCardDefine.MAX_CENTERCOUNT; _isEnd = true; dzCardInfo.cbTotalEnd = 1; return(true); } //盲注玩家 for (int i = 0; i < DzCardDefine.GAME_PLAYER; i++) { //临时变量 int cbNextUser = (dzCardInfo.m_wDUser + i) % DzCardDefine.GAME_PLAYER; //获取用户 UserInfo pIServerUserItem = dzCardInfo.m_Seatter[cbNextUser]; //无效用户 梭哈用户过滤 if (pIServerUserItem == null || dzCardInfo.m_cbPlayStatus[cbNextUser] == false || dzCardInfo.m_cbShowHand[cbNextUser] == true) { continue; } dzCardInfo.m_wCurrentUser = cbNextUser; break; } //构造数据 SendCardInfo sendCardInfo = new SendCardInfo(); sendCardInfo.cbPublic = 0; sendCardInfo.wCurrentUser = dzCardInfo.m_wCurrentUser; sendCardInfo.cbSendCardCount = 3 + (dzCardInfo.m_cbBalanceCount - 1); sendCardInfo.cbCenterCardData = dzCardInfo.m_cbCenterCardData; ////发送数据 _GameTable.BroadCastGame(NotifyType.Reply_SendCard, sendCardInfo); //m_pITableFrame->SendTableData(INVALID_CHAIR,SUB_S_SEND_CARD,&SendCard,sizeof(SendCard)); //m_pITableFrame->SendLookonData(INVALID_CHAIR,SUB_S_SEND_CARD,&SendCard,sizeof(SendCard)); dzCardInfo.m_cbSendCardCount = 3 + (dzCardInfo.m_cbBalanceCount - 1); return(true); }
bool OnUserGiveUp(UserInfo userInfo, AddScoreInfo giveInfo) { int wChairID = ((DzCardTable)_GameTable).GetSeatterIndex(userInfo); if (wChairID == GameDefine.INVALID_CHAIR) { return(true); } DzCardInfo dzCardInfo = (DzCardInfo)_GameTable._TableInfo; //重置状态 dzCardInfo.m_cbPlayStatus[wChairID] = false; dzCardInfo.m_cbShowHand[wChairID] = false; //发送消息 AddScoreInfo GiveUp = giveInfo; GiveUp.wAddScoreUser = wChairID; GiveUp.lAddLessScore = -dzCardInfo.m_lTotalScore[wChairID]; _GameTable.BroadCastGame(NotifyType.Reply_GiveUp, GiveUp); //写入金币 //m_pITableFrame->WriteUserScore(wChairID,-m_lTotalScore[wChairID],0,enScoreKind_Lost); int playerIndex = _GameTable.GetPlayerIndex(userInfo); if (playerIndex >= 0) { _GameTable._TableInfo.m_lUserWinScore[playerIndex] = -dzCardInfo.m_lTotalScore[wChairID]; Cash.GetInstance().ProcessGameCash(playerIndex, _GameTable._GameInfo, _GameTable._TableInfo); _GameTable._TableInfo.m_lUserWinScore[playerIndex] = 0; } //清空下注 dzCardInfo.m_lTableScore[wChairID] = 0; //人数统计 int wPlayerCount = 0; for (int i = 0; i < DzCardDefine.GAME_PLAYER; i++) { if (dzCardInfo.m_cbPlayStatus[i] == true) { wPlayerCount++; } } //判断结束 if (wPlayerCount >= 2) { if (dzCardInfo.m_wCurrentUser == wChairID) { OnUserAddScore(wChairID, 0, true); } } else { //OnEventGameEnd(INVALID_CHAIR, NULL, GER_NO_PLAYER); _isEnd = true; } return(true); }
public override void NotifyGameTimer(GameTimer gameTimer) { if (gameTimer.timerId != TimerID.Custom || gameTimer.autoInfo == null) { return; } DzCardInfo dzCardInfo = (DzCardInfo)_GameTable._TableInfo; DzCardTable dzCardTable = (DzCardTable)_GameTable; int seaterIndex = dzCardTable.GetSeatterIndex(gameTimer.autoInfo); if (seaterIndex < 0 || seaterIndex >= DzCardDefine.GAME_PLAYER) { return; } int[] bestCardData = new int[DzCardDefine.MAX_CENTERCOUNT]; int cbEndCardKind = DzCardTable.m_GameLogic.FiveFromSeven(dzCardInfo.m_cbHandCardData[seaterIndex], DzCardDefine.MAX_COUNT, dzCardInfo.m_cbCenterCardData, DzCardDefine.MAX_CENTERCOUNT, bestCardData, DzCardDefine.MAX_CENTERCOUNT); int actionType = _random.Next() % 4; if (cbEndCardKind >= 3) { actionType = _random.Next() % 4; } else { actionType = _random.Next() % 4 + 1; } switch (actionType) { case 0: // add { AddScoreInfo AddScore = new AddScoreInfo(); //AddScore.lAddLessScore = dzCardInfo.m_lTurnMaxScore; AddScore.lAddLessScore = dzCardInfo.m_lAddLessScore; Action(NotifyType.Request_AddScore, AddScore, gameTimer.autoInfo); } break; case 1: // follow case 2: case 3: { //发送消息 AddScoreInfo AddScore = new AddScoreInfo(); AddScore.lAddLessScore = dzCardInfo.m_lTurnLessScore; Action(NotifyType.Request_AddScore, AddScore, gameTimer.autoInfo); } break; case 4: { AddScoreInfo AddScore = new AddScoreInfo(); Action(NotifyType.Request_GiveUp, AddScore, gameTimer.autoInfo); } break; } }