Beispiel #1
0
        //开始游戏
        public static void StartGame(this FiveStarRoom fiveStarRoom)
        {
            Actor_FiveStar_StartGame actorFiveStarStart = new Actor_FiveStar_StartGame();

            actorFiveStarStart.RoomConfigs = fiveStarRoom.RoomConfig.Configs;
            actorFiveStarStart.RoomId      = fiveStarRoom.RoomId;
            if (fiveStarRoom.RoomType == RoomType.Match)
            {
                actorFiveStarStart.RoomId = fiveStarRoom.MathRoomId;
            }

            foreach (var player in fiveStarRoom.FiveStarPlayerDic.Values)
            {
                //因为有些对象不能进行序列化 就必须重新复制一份
                actorFiveStarStart.PlayerInfos.Add(FiveStarPlayerFactory.CopySerialize(player));
            }
            foreach (var player in fiveStarRoom.FiveStarPlayerDic)
            {
                player.Value.StartGame(actorFiveStarStart);
            }
            //第一局随机出一个休息的玩家
            fiveStarRoom.NextRestSeatIndex = RandomTool.Random(1, fiveStarRoom.RoomConfig.RoomNumber); //不能为0 因为0要第一个摸牌
            fiveStarRoom.SmallStartGame();                                                             //小局开始游戏
            //用来发送消息的序列化对象 放入简易对象池 不能直接销毁 因为会改变一些东西
            foreach (var player in actorFiveStarStart.PlayerInfos)
            {
                FiveStarPlayerFactory.DisposeSerializePlayer(player);
            }
        }
        public static Actor_FiveStar_Reconnection Create(FiveStarRoom fiveStarRoom, long reconnectionUserId)
        {
            Actor_FiveStar_Reconnection actorFiveStarReconnection = new Actor_FiveStar_Reconnection();

            for (int i = 0; i < fiveStarRoom.FiveStarPlayerDic.Count; i++)
            {
                actorFiveStarReconnection.Players.Add(FiveStarPlayerFactory.CopySerialize(fiveStarRoom.FiveStarPlayerDic[i]));
            }

            actorFiveStarReconnection.RoomId = fiveStarRoom.RoomId;
            if (fiveStarRoom.RoomType == RoomType.Match)
            {
                actorFiveStarReconnection.RoomId = fiveStarRoom.MathRoomId;
            }
            actorFiveStarReconnection.FriendsCircleId   = fiveStarRoom.FriendsCircleId;
            actorFiveStarReconnection.RoomType          = fiveStarRoom.RoomType;
            actorFiveStarReconnection.Configs           = fiveStarRoom.RoomConfig.Configs;
            actorFiveStarReconnection.CurrRestSeatIndex = fiveStarRoom.CurrRestSeatIndex;
            actorFiveStarReconnection.CurrRoomStateType = fiveStarRoom.CurrRoomStateType;
            actorFiveStarReconnection.CurrOfficNum      = fiveStarRoom.CurrOfficNum;

            if (fiveStarRoom.ResidueCards != null)
            {
                actorFiveStarReconnection.ResidueCardCount = fiveStarRoom.ResidueCards.Count;
            }
            actorFiveStarReconnection.IsDaPiaoBeing   = fiveStarRoom.IsDaPiaoBeing;
            actorFiveStarReconnection.EndPlayCardSize = fiveStarRoom.CurrChuPaiCard;//最后出第一张牌 就是当前出的牌
            for (int i = 0; i < actorFiveStarReconnection.Players.Count; i++)
            {
                if (reconnectionUserId == actorFiveStarReconnection.Players[i].User.UserId ||
                    actorFiveStarReconnection.Players[i].IsLiangDao)
                {
                    continue;
                }
                if (actorFiveStarReconnection.Players[i].Hands == null)
                {
                    continue;
                }
                fiveStarRoom.intData = actorFiveStarReconnection.Players[i].Hands.Count;
                actorFiveStarReconnection.Players[i].Hands = new RepeatedField <int>();
                actorFiveStarReconnection.Players[i].Hands.Add(fiveStarRoom.intData);//不是自己本人 也没有亮倒的手牌信息 只能得到数量
            }
            return(actorFiveStarReconnection);
        }