/// <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); }
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); } }
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; }
public ChessIsMySideTOBool(OfSide side) { _side = side; }
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; }