//----------------------------------------------------------------------------------------------------------- // 事件通知 public void notifyPlayState(MAHJONG_PLAY_STATE state) { mPlayState = state; // 进入等待流程时,就是开始新一局的麻将游戏,需要重置麻将系统的数据 if (mPlayState == MAHJONG_PLAY_STATE.MPS_WAITING) { mPlayerIDList.Clear(); List <PLAYER_POSITION> posList = new List <PLAYER_POSITION>(mPlayerPositionList.Keys); int posCount = posList.Count; for (int i = 0; i < posCount; ++i) { mPlayerPositionList[posList[i]] = null; } mMahjongPool.Clear(); int diceCount = mDice.Length; for (int i = 0; i < diceCount; ++i) { mDice[i] = 0; } mBankerPos = PLAYER_POSITION.PP_MAX; mCurAssignPos = PLAYER_POSITION.PP_MAX; mCurInterval = 0.0f; } // 开始掷骰子时,需要计算出掷骰子的结果 else if (mPlayState == MAHJONG_PLAY_STATE.MPS_DICE) { generateDiceRet(ref mDice); } // 开始拿牌时,需要重置麻将池 else if (mPlayState == MAHJONG_PLAY_STATE.MPS_GET_START) { resetMahjongPool(); // 判断当前谁是庄家 foreach (var item in mPlayerPositionList) { if (item.Value.getCharacterData().mBanker) { mBankerPos = item.Key; mCurAssignPos = mBankerPos; break; } } if (mBankerPos == PLAYER_POSITION.PP_MAX) { UnityUtility.logError("not find banker!"); } } else if (mPlayState == MAHJONG_PLAY_STATE.MPS_NORMAL_GAMING) { mWaitList.Clear(); } else if (mPlayState == MAHJONG_PLAY_STATE.MPS_WAIT_FOR_ACTION) { ; } else if (mPlayState == MAHJONG_PLAY_STATE.MPS_ENDING) { ; } }
public override void update(float elapsedTime) { // 开始拿牌时,需要由麻将系统给玩家分发牌 if (mPlayState == MAHJONG_PLAY_STATE.MPS_GET_START) { mCurInterval -= elapsedTime; // 从庄家开始发牌 if (mCurInterval <= 0.0f) { mCurInterval += GameDefine.ASSIGN_MAHJONG_INTERVAL; // 给玩家发牌 CommandCharacterGetStart cmd = newCmd(out cmd); cmd.mMahjong = mHandInList[(int)mCurAssignPos][0]; pushCommand(cmd, mPlayerPositionList[(int)mCurAssignPos]); mHandInList[(int)mCurAssignPos].RemoveAt(0); // 如果到房主的牌发完了,则退出发牌 if (mCurAssignPos == mBankerPos && mHandInList[(int)mCurAssignPos].Count == 0) { mPlayState = MAHJONG_PLAY_STATE.MPS_NORMAL_GAMING; // 牌拿完时需要重新排列,发放花牌 int playerCount = mPlayerPositionList.Count; for (int i = 0; i < playerCount; ++i) { int huaCount = mHuaList[i].Count; for (int j = 0; j < huaCount; ++j) { CommandCharacterGetHua cmdHua = newCmd(out cmdHua); cmdHua.mMah = mHuaList[i][j]; pushCommand(cmdHua, mPlayerPositionList[i]); } } // 通知服务器开局麻将已经拿完了 mSocketManager.sendMessage <CSGetStartMahjongDone>(); return; } else { mCurAssignPos = (PLAYER_POSITION)(((int)mCurAssignPos + 1) % (int)PLAYER_POSITION.PP_MAX); } } } }
public void notifyGetStartMahjong() { mPlayState = MAHJONG_PLAY_STATE.MPS_GET_START; mCurAssignPos = mBankerPos; }