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 void Dispose(Actor_FiveStar_Reconnection actorFiveStarReconnection)
 {
     for (int i = 0; i < actorFiveStarReconnection.Players.Count; i++)
     {
         FiveStarPlayerFactory.DisposeSerializePlayer(actorFiveStarReconnection.Players[i]);
     }
 }
        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);
        }
        public static async Task <FiveStarRoom> Create(M2S_StartGame m2SStartGame)
        {
            try
            {
                FiveStarRoom fiveStarRoom = ComponentFactory.Create <FiveStarRoom>();

                FiveStarRoomConfig fiveStarRoomConfig = FiveStarRoomConfigFactory.Create(m2SStartGame.RoomConfig.RoomConfigs);//创建房间配置信息

                fiveStarRoom.FriendsCircleId   = m2SStartGame.FriendsCircleId;
                fiveStarRoom.NeedJeweNumCount  = m2SStartGame.NeedJeweNumCount;       //需要的钻石数量
                fiveStarRoom.RoomConfig        = fiveStarRoomConfig;                  //房间配置
                fiveStarRoom.MathRoomId        = m2SStartGame.RoomConfig.MatchRoomId; //匹配房间ID 在房卡模式下就是本身的房间ID
                fiveStarRoom.RoomId            = m2SStartGame.RoomId;                 //房间ID
                fiveStarRoom.RoomType          = m2SStartGame.RoomType;               //赋值房间类型
                fiveStarRoom.RoomNumber        = fiveStarRoomConfig.RoomNumber;       //房间人数
                fiveStarRoom.CurrRoomStateType = RoomStateType.GameIn;                //房间状态 改为游戏中

                if (fiveStarRoom.RoomType == RoomType.RoomCard)
                {
                    fiveStarRoom.StartVideoDataId = FiveStarRoomComponent.Ins.GetMiltaryDataStartId(); //如果在房卡模式要获取起始录像Id
                }
                fiveStarRoom.IsHaveAI = false;                                                         //默认是没有AI的
                //创建玩家对象
                foreach (var playerInfo in m2SStartGame.MatchPlayerInfos)
                {
                    fiveStarRoom.FiveStarPlayerDic[playerInfo.SeatIndex] = await FiveStarPlayerFactory.Create(playerInfo, fiveStarRoom);

                    if (playerInfo.IsAI)
                    {
                        fiveStarRoom.IsHaveAI = true;//只要有一个AI就是有AI
                    }
                }
                await fiveStarRoom.AddComponent <MailBoxComponent>().AddLocation();

                return(fiveStarRoom);
            }
            catch (Exception e)
            {
                Log.Error(e);
                throw;
            }
        }