//开始游戏 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); }