/// <summary> /// 存放要牌操作 /// </summary> /// <param name="handCards"></param> /// <returns></returns> public OptionorCollection FreshOptions(HandCardManager handCards) { handCards.Optionors.Clear(); MaJiangCollection huCards = GetHuCards(handCards.StandCards); if (huCards.Count > 0) { for (int i = 0; i < huCards.Count; i++) { Optionor optionor = new Optionor(new OptionHu(), huCards[i]); handCards.AddOptionor(optionor); } } MaJiangCollection PendCards = handCards.GetPengCards(); if (PendCards.Count > 0) { for (int i = 0; i < PendCards.Count; i++) { Optionor optionor = new Optionor(new OptionPeng(), PendCards[0]); handCards.AddOptionor(optionor); } } MaJiangCollection GangCards = handCards.GetGangCards(); if (GangCards.Count > 0) { for (int i = 0; i < GangCards.Count; i++) { Optionor optionor = new Optionor(new OptionGang(), GangCards[i]); handCards.AddOptionor(optionor); } } return(handCards.Optionors); }
/// <summary> /// 是否相同操作 /// </summary> /// <param name="optionor"></param> /// <returns></returns> public bool IsTheSameWith(Optionor optionor) { if (Card.IsTheSameWith(optionor.Card) && Option.Name == optionor.Option.Name && IsOnlySelf == optionor.IsOnlySelf) { return(true); } return(false); }
/// <summary> /// 执行操作 /// </summary> /// <param name="optionor"></param> public void Do(Optionor optionor) { if (ExistOptionor(optionor)) { bool needOtherCard = optionor.Do(HandCards); if (needOtherCard) { GetCardAction?.Invoke(this); } OnDidOption(optionor); } }
/// <summary> /// 定义操作名称 /// </summary> /// <param name="name"></param> /// <param name="card"></param> /// <returns></returns> public Optionor GetOptionorByName(string name, CardModel cardM) { Optionor optionor = null; switch (name) { case "碰": optionor = new Optionor(new OptionPeng(), cardM); break; case "杠": optionor = new Optionor(new OptionGang(), cardM); break; case "胡": optionor = new Optionor(new OptionHu(), cardM); break; default: break; } return(optionor); }
internal OptionorRequest(Seat seat, Optionor optionor) { Seat = seat; Optionor = optionor; }
/// <summary> /// 添加要牌 /// </summary> /// <param name="option"></param> public void AddOptionor(Optionor option) { Optionors.Add(option); }
/// <summary> /// 是否可以执行该操作 /// </summary> /// <param name="optionor"></param> /// <returns></returns> private bool ExistOptionor(Optionor optionor) { return(HandCards.Optionors.HaseOptionor(optionor)); }
/// <summary> /// 操作执行后事件 /// </summary> /// <param name="optionor"></param> void OnDidOption(Optionor optionor) { DidOption?.Invoke(this, new OptionorEventArgs(optionor)); }
/// <summary> /// 是否存在操作 /// </summary> /// <param name="optionor"></param> /// <returns></returns> internal bool HaseOptionor(Optionor optionor) { return(Options.Exists(o => o.IsTheSameWith(optionor))); }
/// <summary> /// 添加操作 /// </summary> /// <param name="option"></param> internal void Add(Optionor option) { option.Number = ++OptionorNumber; Options.Add(option); }
internal OptionorEventArgs(Optionor optionor) { Optionor = optionor; }