Example #1
0
    public void ShowRecord()
    {
        SQSceneLoader.It.LoadScene("PlayBackScene", () =>
        {
            List <string> views = new List <string>();
            views.Add("MJGameBackUI");
            views.Add("NetLoadingView");
            views.Add("SceneLoadingView");

            StartGameRespone data = new StartGameRespone();
            data.roomInfo         = mModel.CurRecordDetailData.roomInfo;
            data.startInfo        = mModel.CurRecordDetailData.startInfo;
            HandleStartGameData(data);//初始化数据
            BaseView.CloseAllViewBut(views);
            mGameUI = OpenWindow() as MJGameBackUI;
            mGameUI.InfoAllPlayerData(data);
        });
    }
Example #2
0
 /// <summary>
 /// 准备
 /// </summary>
 /// <param name="info"></param>
 private void InitReady(StartGameRespone info)
 {
     if (info.roomInfo.roomState == eRoomState.READY || info.roomInfo.roomState == eRoomState.GAMEOVER)//在准备阶段或是结束阶段
     {
         for (int i = 0; i < info.roomInfo.playerList.Count; i++)
         {
             PlayerInfoStruct item = info.roomInfo.playerList[i];
             if (item.seatId == MJGameModel.Inst.mMySeatId)//自己
             {
             }
             mAllPlayer[MJGameModel.Inst.mnewSeatToIndex[item.seatId]].SetReady(item.isReady);
         }
     }
     else
     {
         //全部不显示准备
         for (int i = 0; i < info.roomInfo.playerList.Count; i++)
         {
             PlayerInfoStruct item = info.roomInfo.playerList[i];
             mAllPlayer[MJGameModel.Inst.mnewSeatToIndex[item.seatId]].SetReady(false);
         }
     }
 }
Example #3
0
    private void HandleStartGameData(StartGameRespone data, bool isStart = false)
    {
        MJGameModel.Inst.mStartGameData = data;
        SQDebug.Log("准备房间 玩家数据移植:" + Time.deltaTime);
        MJGameModel.Inst.ReadyCountDownTime = 0;                      //准备倒计时
        mModel.mPlayCount              = data.roomInfo.maxGameCount;  //最大局数
        mModel.mCurPlayCount           = data.roomInfo.currGameCount; //当前局数
        MJGameModel.Inst.mRoomId       = data.roomInfo.roomId;        //房间号
        MJGameModel.Inst.mMySeatId     = data.roomInfo.mySeatId;      //我自己的座位号
        MJGameModel.Inst.mZhuangSeatId = data.startInfo.zhuangSeatId; //庄家座位号
        MJGameModel.Inst.TurnFixedTime = data.roomInfo.turnFixedTime; //操作固定时间
        MJGameModel.Inst.mRoomMgSeatId = 1;                           //房主座位号
        int totalPlayerCount = data.roomInfo.maxPlayer;               //房间总共人数

        MJGameModel.Inst.totalPlayerCount = totalPlayerCount;
        totalPlayerCount = totalPlayerCount == 2 ? 4 : totalPlayerCount;
        MJGameModel.Inst.mnewSeatToIndex       = new int[totalPlayerCount + 1];              //玩家座位号 数组
        MJGameModel.Inst.mSeatToDirectionIndex = new int[5];                                 //所有玩家座位号对应桌面东南西北高亮显示的index
        MJGameModel.Inst.mRoomPlayers          = new PlayerInfoStruct[totalPlayerCount + 1]; //玩家 数据缓存数组
        foreach (var itemRoomPlayer in data.roomInfo.playerList)                             //玩家信息数据
        {
            MJGameModel.Inst.mRoomPlayers[itemRoomPlayer.seatId]          = itemRoomPlayer;
            MJGameModel.Inst.mnewSeatToIndex[itemRoomPlayer.seatId]       = SeatIdToIndex(MJGameModel.Inst.mMySeatId, itemRoomPlayer.seatId, totalPlayerCount);
            MJGameModel.Inst.mSeatToDirectionIndex[itemRoomPlayer.seatId] = SeatIdToDirectionIndex(MJGameModel.Inst.mMySeatId, itemRoomPlayer.seatId, data.roomInfo.maxPlayer);
        }
        #endregion
        MJGameModel.Inst.isGetStartGameData        = true;
        MJGameModel.Inst.totalCardNum              = data.startInfo.totalCardNum;                                 //总共有多少张牌
        MJGameModel.Inst.leaveCardNum              = data.startInfo.leaveCardNum;                                 //剩余多少张牌
        MJGameModel.Inst.mCurInsSeatId             = data.startInfo.currTurnSeatId;                               //当前指针 指的玩家座位号
        MJGameModel.Inst.isMyHit                   = data.startInfo.currTurnSeatId == MJGameModel.Inst.mMySeatId; //是否轮到我操作
        MJGameModel.Inst.allPlayersCardsInfoStruct = new CardsInfoStruct[totalPlayerCount + 1];
        //可操作列表
        if (data.roomInfo.optList != null)
        {
            for (int i = 0; i < data.roomInfo.optList.Count; i++)
            {
                if (data.roomInfo.optList[i].ins == eMJInstructionsType.HIT)
                {
                    GetCanHuList(data.roomInfo.optList[i]);
                }
            }
        }
        //手牌信息
        if (data.startInfo.cardsInfoList != null)
        {
            foreach (var item in data.startInfo.cardsInfoList)
            {
                MJGameModel.Inst.allPlayersCardsInfoStruct[item.seatId] = item;
                //找出我定缺的类型
                if (item.seatId == MJGameModel.Inst.mMySeatId) //我自己
                {
                    if (item.isFixedColor)                     //已经定缺
                    {
                        MJGameModel.Inst.SetMyFixedType(item.fixedType);
                        if (item.handList != null)//手牌排序
                        {
                            item.handList = MJGameModel.Inst.ChangList(item.handList, item.fixedType);
                        }
                    }
                    else
                    {
                        MJGameModel.Inst.SetMyFixedType(0);
                    }
                }

                if (item.handList != null)
                {
                    foreach (var VARIABLE in item.handList)
                    {
                        MJGameModel.Inst.mySelfCards.Add(VARIABLE);
                    }
                    if (item.isHasCurrCard)
                    {
                        MJGameModel.Inst.mySelfCards.Add(item.currCard);
                    }

                    foreach (var oneItem in MJGameModel.Inst.mySelfCards)
                    {
                        if (oneItem < 10)
                        {
                            MJGameModel.Inst.handCardsTiao.Add(oneItem);
                        }
                        else if (oneItem < 20)
                        {
                            MJGameModel.Inst.handCardsTong.Add(oneItem);
                        }
                        else if (oneItem < 30)
                        {
                            MJGameModel.Inst.handCardsWan.Add(oneItem);
                        }
                    }
                }
            }
        }
        //MJGameModel.Inst.UpdataModelDada(data);

        if (isStart && !MJGameModel.Inst.IsContainsDingque && !MJGameModel.Inst.IsContainsChange)//如果开始发牌且没有定缺也没有换三张,房间状态改为开始
        {
            MJGameModel.Inst.mState = eMJRoomStatus.STARTE;
            MJGameModel.Inst.mStartGameData.roomInfo.roomState = eRoomState.START;//改变房间状态
        }
        ;

        if (mGameUI != null)
        {
            List <string> view = new List <string>();
            view.Add("GameUI");
            BaseView.CloseAllViewBut(view);
            mGameUI.GetGameStartFormCtr();
        }
        else
        {
            SQSceneLoader.It.LoadScene("mahjong_scenes", () =>
            {
                mGameUI            = OpenWindow() as MJGameUI;
                List <string> view = new List <string>();
                view.Add("GameUI");
                BaseView.CloseAllViewBut(view);
                mGameUI.GetGameStartFormCtr();
            });
        }
    }
Example #4
0
 /// <summary>
 /// 开始游戏数据处理
 /// </summary>
 private void HandleStartGameData(MessageData msg)
 {
     #region 准备房间 玩家数据移植
     StartGameRespone data = msg.Read <StartGameRespone>();
     HandleStartGameData(data);
 }
Example #5
0
    /// <summary>
    /// 初始化 玩家数据
    /// </summary>
    /// <param name="info"></param>
    public void InfoAllPlayerData(StartGameRespone info)
    {
        InitData();                                                                                        //初始化操作列表信息
        if (info.roomInfo.roomState == eRoomState.READY || info.roomInfo.roomState == eRoomState.GAMEOVER) // 不显示剩余牌数量
        {
            SetLeftCardNum(info.startInfo.leaveCardNum, false);
        }
        else
        {
            SetLeftCardNum(info.startInfo.leaveCardNum, true);
        }

        InitMJScene();
        //准备
        InitReady(info);
        //头像
        foreach (var item in info.roomInfo.playerList)
        {
            int index = MJGameModel.Inst.mnewSeatToIndex[item.seatId];
            InitOnePlayerIcon(mAllPlayer[index], item);
            SetPlayerSeatId(item.seatId, mAllPlayer[index]);   //座位号///**********************
            InitOnePlayerOnlineState(mAllPlayer[index], item); //在线状态
        }
        //手牌
        BuildHandMahjong(MJGameModel.Inst.allPlayersCardsInfoStruct);
        //打出的牌
        InitAllPlayerCollectCards(MJGameModel.Inst.allPlayersCardsInfoStruct);
        //碰的牌
        InfoAllPlayerPengCard(MJGameModel.Inst.allPlayersCardsInfoStruct);
        //听牌标记
        //InitAllTingTag(info.playerList);
        //胡牌标记
        InitAllHuTag(MJGameModel.Inst.allPlayersCardsInfoStruct);
        //定缺标记
        InitAllFixeType(MJGameModel.Inst.allPlayersCardsInfoStruct, info.roomInfo.roomState);
        //设置 打牌指针 轮到谁操作
        mMJSceneRoot.SetLight(MJGameModel.Inst.mCurInsSeatId);
        //cd
        SetAllPlayerCD(MJGameModel.Inst.mCurInsSeatId);
        //设置 色子显示
        mMJSceneRoot.SetTouZiNum(info.startInfo.dices);
        //桌上的牌
        if (info.roomInfo.roomState == eRoomState.READY || info.roomInfo.roomState == eRoomState.GAMEOVER)//准备和结束不显桌上的牌
        {
            mMJSceneRoot.SetDeskCard(0, info.startInfo.dices, true);
        }
        else
        {
            mMJSceneRoot.SetDeskCard(info.startInfo.leaveCardNum, info.startInfo.dices, true);
        }
        //桌子位置
        mMJSceneRoot.SetDescRotate(MJGameModel.Inst.mMySeatId - 1);
        //桌子上信息
        int _roomId = info.roomInfo.mode == "m4" ? 0 : int.Parse(info.roomInfo.roomId);                                                //如果是平台房就不显示房间号

        mMJSceneRoot.SetDescInfo(999, int.Parse(info.roomInfo.roomId), info.roomInfo.currGameCount, info.roomInfo.maxGameCount, 9999); //  番数       低分  没有
        //上一次打出牌特效
        if (info.roomInfo.roomState == eRoomState.START && info.roomInfo.lastHitSeatId != 0)
        {
            int index = MJGameModel.Inst.mnewSeatToIndex[info.roomInfo.lastHitSeatId];
            SetCurCardEffect(mAllPlayer[index], eMJInstructionsType.HIT, mCurCardOffset); //打出的牌特效
        }
        SetRoomPlayNum(MJGameModel.Inst.mStartGameData.roomInfo.currGameCount, true);     //设局数显示
        //我的操作列表
        mSelfPlayer.ShowInstructions(info.roomInfo.optList);
        //MJGameModel.Inst.mIsTing = false;//听牌
        MJGameModel.Inst.isFirstGetStartGameData = false;

        mIsStart = true;
    }
Example #6
0
    private void HandleStartGameData(StartGameRespone data)
    {
        mjController = Global.Inst.GetController <MJGameController>();
        #region 准备房间 玩家数据移植
        //StartGameRespone data = msg.Read<StartGameRespone>();

        MJGameModel.Inst.mStartGameData = data;
        SQDebug.Log("准备房间 玩家数据移植:" + Time.deltaTime);
        MJGameModel.Inst.mPlayCount    = data.roomInfo.maxGameCount;  //最大局数
        MJGameModel.Inst.mCurPlayCount = data.roomInfo.currGameCount; //当前局数
        MJGameModel.Inst.mRoomId       = data.roomInfo.roomId;        //房间号
        MJGameModel.Inst.mZhuangSeatId = data.startInfo.zhuangSeatId;
        foreach (var itemRoomPlayer in data.roomInfo.playerList)      //玩家信息数据
        {
            if (itemRoomPlayer.uId == PlayerModel.Inst.UserInfo.userId)
            {
                MJGameModel.Inst.mMySeatId = itemRoomPlayer.seatId;
                break;
            }
        }
        //MJGameModel.Inst.mMySeatId = data.roomInfo.mySeatId;//我自己的座位号
        MJGameModel.Inst.mRoomMgSeatId = 1;             //房主座位号
        int totalPlayerCount = data.roomInfo.maxPlayer; //房间总共人数
        MJGameModel.Inst.totalPlayerCount = totalPlayerCount;
        totalPlayerCount = totalPlayerCount == 2 ? 4 : totalPlayerCount;
        MJGameModel.Inst.AllPlayerEfixe = new List <int[]>();//所有玩家定缺区间
        for (int i = 0; i < 5; i++)
        {
            MJGameModel.Inst.AllPlayerEfixe.Add(new int[2]);
        }
        MJGameModel.Inst.mnewSeatToIndex       = new int[totalPlayerCount + 1];              //玩家座位号 数组
        MJGameModel.Inst.mSeatToDirectionIndex = new int[5];                                 //所有玩家座位号对应桌面东南西北高亮显示的index
        MJGameModel.Inst.mRoomPlayers          = new PlayerInfoStruct[totalPlayerCount + 1]; //玩家 数据缓存数组
        foreach (var itemRoomPlayer in data.roomInfo.playerList)                             //玩家信息数据
        {
            MJGameModel.Inst.mRoomPlayers[itemRoomPlayer.seatId]          = itemRoomPlayer;
            MJGameModel.Inst.mnewSeatToIndex[itemRoomPlayer.seatId]       = mjController.SeatIdToIndex(MJGameModel.Inst.mMySeatId, itemRoomPlayer.seatId, totalPlayerCount);
            MJGameModel.Inst.mSeatToDirectionIndex[itemRoomPlayer.seatId] = mjController.SeatIdToDirectionIndex(MJGameModel.Inst.mMySeatId, itemRoomPlayer.seatId, data.roomInfo.maxPlayer);
        }
        #endregion
        MJGameModel.Inst.isGetStartGameData        = true;
        MJGameModel.Inst.totalCardNum              = data.startInfo.totalCardNum;                                 //总共有多少张牌
        MJGameModel.Inst.leaveCardNum              = data.startInfo.leaveCardNum;                                 //剩余多少张牌
        MJGameModel.Inst.mCurInsSeatId             = data.startInfo.currTurnSeatId;                               //当前指针 指的玩家座位号
        MJGameModel.Inst.isMyHit                   = data.startInfo.currTurnSeatId == MJGameModel.Inst.mMySeatId; //是否轮到我操作
        MJGameModel.Inst.allPlayersCardsInfoStruct = new CardsInfoStruct[totalPlayerCount + 1];
        //可操作列表
        if (data.roomInfo.optList != null)
        {
            for (int i = 0; i < data.roomInfo.optList.Count; i++)
            {
                if (data.roomInfo.optList[i].ins == eMJInstructionsType.HIT)
                {
                    mjController.GetCanHuList(data.roomInfo.optList[i]);
                }
            }
        }
        //手牌信息
        if (data.startInfo.cardsInfoList != null)
        {
            foreach (var item in data.startInfo.cardsInfoList)
            {
                MJGameModel.Inst.allPlayersCardsInfoStruct[item.seatId] = item;
                //找出我定缺的类型
                if (item.seatId == MJGameModel.Inst.mMySeatId) //我自己
                {
                    if (item.isFixedColor)                     //已经定缺
                    {
                        MJGameModel.Inst.SetMyFixedType(item.fixedType);
                        if (item.handList != null)//手牌排序
                        {
                            item.handList = MJGameModel.Inst.ChangList(item.handList, item.fixedType);
                        }
                    }
                    else
                    {
                        MJGameModel.Inst.SetMyFixedType(0);
                    }
                }

                if (item.handList != null)
                {
                    foreach (var VARIABLE in item.handList)
                    {
                        MJGameModel.Inst.mySelfCards.Add(VARIABLE);
                    }
                    if (item.isHasCurrCard)
                    {
                        MJGameModel.Inst.mySelfCards.Add(item.currCard);
                    }

                    foreach (var oneItem in MJGameModel.Inst.mySelfCards)
                    {
                        if (oneItem < 10)
                        {
                            MJGameModel.Inst.handCardsTiao.Add(oneItem);
                        }
                        else if (oneItem < 20)
                        {
                            MJGameModel.Inst.handCardsTong.Add(oneItem);
                        }
                        else if (oneItem < 30)
                        {
                            MJGameModel.Inst.handCardsWan.Add(oneItem);
                        }
                    }
                }
            }
        }
    }