예제 #1
0
 //-----------------------------------------------------------------------------------------------------------
 // 事件通知
 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)
     {
         ;
     }
 }
예제 #2
0
 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);
             }
         }
     }
 }
예제 #3
0
 public void notifyGetStartMahjong()
 {
     mPlayState    = MAHJONG_PLAY_STATE.MPS_GET_START;
     mCurAssignPos = mBankerPos;
 }