/// <summary>
        /// 退出游戏房间,更新广播频道、玩家列表
        /// </summary>
        /// <exception cref="RoomException"></exception>
        /// <exception cref="GameManagerCodeException"></exception>
        public GameManager.ExitWay PlayerExit(ulong uid)
        {
            int index = PlayersInfo.FindIndex((info) => { return(info.UID == uid); });

            if (index != -1)
            {
                OfSide side = PlayersInfo[index].Side;
                Channel.UIDs.Remove(uid);
                PlayersInfo.RemoveAt(index);
                try
                {
                    return(Gamemanager.Exit(side));
                }
                catch (GameManagerCodeException e)
                {
                    throw e;
                }
                catch (Exception e)
                {
                    throw new  RoomException(e.Message);
                }
            }
            else
            {
                throw new RoomException("玩家不在房间中,退出房间失败");
            }
        }
 /// <summary>
 /// 根据游戏角色查找玩家信息。供给SubscriptGameEvent()使用。找不到返回默认值
 /// </summary>
 /// <param name="side"></param>
 /// <returns></returns>
 public static PlayerInfo SearchInfoBySide(OfSide side, Room room)
 {
     return(room.PlayersInfo.Find((info) =>
     {
         return info.Side == side;
     }));
 }
        /// <summary>
        /// 进入游戏房间,随机分配座位,更新广播频道、玩家列表
        /// </summary>
        /// <exception cref="RoomException"></exception>
        /// <exception cref="GameManagerException"></exception>
        public OfSide PlayerEnter(ulong uid)
        {
            int index = PlayersInfo.FindIndex((info) => { return(info.UID == uid); });

            if (index != -1)//游戏列表中有此玩家
            {
                throw new RoomException("请退出后再进入房间");
            }
            OfSide side = Gamemanager.Enter();

            PlayersInfo.Add(new PlayerInfo(uid, side));
            Channel.UIDs.Add(uid);
            return(side);
        }
Example #4
0
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value == null)
            {
                return(false);
            }
            OfSide s = ((Chess)value).Side;

            if (s == _side)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Example #5
0
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value == null)
            {
                return(Brushes.WhiteSmoke);
            }
            OfSide side = ((Chess)value).Side;

            switch (side)
            {
            case OfSide.First: return(Brushes.MediumVioletRed);

            case OfSide.Second: return(Brushes.BlueViolet);

            case OfSide.Third: return(Brushes.MediumSeaGreen);

            case OfSide.Fourth: return(Brushes.WhiteSmoke);
            }
            return(Brushes.WhiteSmoke);
        }
 public OfSide Side; //在游戏中所掌管的势力方
 public PlayerInfo(UInt64 uid, OfSide side)
 {
     UID  = uid;
     Side = side;
 }
Example #7
0
 public ChessIsMySideTOBool(OfSide side)
 {
     _side = side;
 }
Example #8
0
        private void _onMsgRecv(object sender, NetServerMsg netServerMsg)
        {
            switch (netServerMsg.MsgType.Name)
            {
            case "LoginInfo":
            {
                LoginInfo loginInfo = (LoginInfo)netServerMsg.Data;
                if (loginInfo.IsLogin)
                {
                    myuid                 = loginInfo.PlayerID;
                    Login.Visibility      = Visibility.Hidden;
                    MatchButton.IsEnabled = true;
                }
                else
                {
                    LoginInfoLable.Content = loginInfo.Info;
                }
                NetMsgTextBlock.Text += loginInfo.Info;
            }
            break;

            case "PReady":
            {
                PReady pr = (PReady)netServerMsg.Data;
                gameInfo.CB.Layout(CheckBroad.ConvertFromLayoutToCheInfo(pr.CheLayout, pr.PlayerInfo.Side));
            };
                break;

            case "MatchInfo":
            {
                MatchInfo matchInfo = (MatchInfo)netServerMsg.Data;
                if (matchInfo.HasAGame)
                {
                    roomid = matchInfo.RoomID;
                    foreach (var info in matchInfo.PlayerInfo)
                    {
                        if (info.UID == myuid)
                        {
                            myside = info.Side;
                            return;
                        }
                    }
                }
            }; break;

            case "GameLayouting":
            {
                GameLayouting gameLayouting = (GameLayouting)netServerMsg.Data;
                gameStatus = GameStatus.Layouting;
            }
            break;

            case "GetquestError":
            {
                GetquestError getquestError = (GetquestError)netServerMsg.Data;
                if (getquestError.Code == 101)
                {
                    Login.Visibility = Visibility.Visible;
                }
            }; break;

            default:
                break;
            }
            NetMsgTextBlock.Text += netServerMsg.MsgType.Name;
        }