/// <summary> /// 初始化 /// </summary> /// <param name="card"></param> public void Init(CardBasicInfo card) { 序列号 = card.序列号; 称 = card.称; 使用成本 = card.使用成本; 描述 = card.描述; switch (card.卡牌种类) { case CardBasicInfo.资源类型枚举.随从: 攻击力 = ((MinionCard)card).攻击力; 生命值 = ((MinionCard)card).生命值; break; case CardBasicInfo.资源类型枚举.法术: break; case CardBasicInfo.资源类型枚举.武器: 攻击力 = ((WeaponCard)card).攻击力; 生命值 = ((WeaponCard)card).耐久度; break; case CardBasicInfo.资源类型枚举.奥秘: break; case CardBasicInfo.资源类型枚举.其他: break; default: break; } }
/// <summary> /// 获得卡牌信息 /// </summary> /// <param name="CardSn"></param> /// <returns></returns> public static string GetCardInfo(string CardSn) { StringBuilder Status = new StringBuilder(); if (GetCardInfoBySN(CardSn) != null) { CardBasicInfo info = GetCardInfoBySN(CardSn); Status.AppendLine("=============="); Status.AppendLine("Description" + info.描述); Status.AppendLine("StandardCostPoint" + info.使用成本); Status.AppendLine("Type:" + info.卡牌种类.ToString()); switch (info.卡牌种类) { case CardBasicInfo.资源类型枚举.随从: Status.AppendLine("攻击力:" + ((MinionCard)info).攻击力.ToString()); Status.AppendLine("生命值:" + ((MinionCard)info).生命值上限.ToString()); break; case CardBasicInfo.资源类型枚举.武器: Status.AppendLine("攻击力:" + ((WeaponCard)info).攻击力.ToString()); Status.AppendLine("耐久度:" + ((WeaponCard)info).耐久度.ToString()); break; } Status.AppendLine("=============="); } return(Status.ToString()); }
private static void Combo(ActionStatus actionStatus, CardBasicInfo card, List <string> ActionCodeLst, PublicInfo PlayInfo) { if ((card.卡牌种类 != CardBasicInfo.资源类型枚举.法术) && PlayInfo.连击状态 && (!string.IsNullOrEmpty(card.连击效果))) { //初始化 Buff效果等等 SpellCard ablity = (SpellCard)CardUtility.GetCardInfoBySN(card.连击效果); if (ablity != null) { var ResultArg = ablity.UseSpell(actionStatus); if (ResultArg.Count != 0) { ActionCodeLst.AddRange(ResultArg); //英雄技能等的时候,不算[本方施法] if (ablity.法术卡牌类型 == CardBasicInfo.法术卡牌类型枚举.普通卡牌) { actionStatus.battleEvenetHandler.事件池.Add(new EventCard.全局事件() { 触发事件类型 = EventCard.事件类型枚举.施法, 触发位置 = PlayInfo.Hero.战场位置 }); } } } } }
private void btnEdit_Click(object sender, EventArgs e) { //编辑项目 if (lstCards.SelectedItems.Count == 1) { CardBasicInfo EditCard = CardUtility.GetCardInfoBySN(lstCards.SelectedItems[0].Text); switch (EditCard.卡牌种类) { case CardBasicInfo.资源类型枚举.随从: (new MinionCardEditor(EditCard.序列号)).ShowDialog(); break; case CardBasicInfo.资源类型枚举.法术: break; case CardBasicInfo.资源类型枚举.武器: break; case CardBasicInfo.资源类型枚举.奥秘: break; case CardBasicInfo.资源类型枚举.其他: break; default: break; } } }
/// <summary> /// 去掉使用过的手牌 /// </summary> /// <param name="CardSn"></param> public void RemoveUsedCard(String CardSn) { Card.CardBasicInfo removeCard = new CardBasicInfo(); foreach (var Seekcard in MySelfInfo.handCards) { if (Seekcard.SN == CardSn) { removeCard = Seekcard; } } MySelfInfo.handCards.Remove(removeCard); MyInfo.HandCardCount = MySelfInfo.handCards.Count; }
/// <summary> /// 去掉使用过的手牌 /// </summary> /// <param name="CardSn"></param> public void RemoveUsedCard(string CardSn) { CardBasicInfo removeCard = new CardBasicInfo(); foreach (var Seekcard in handCards) { if (Seekcard.序列号 == CardSn) { removeCard = Seekcard; } } handCards.Remove(removeCard); }
/// <summary> /// 开始一个动作 /// </summary> /// <param name="actionStatus"> /// 在调用这个过程之前,actionStatus里面的本方和对方都应该已经设定好了 /// 在这里不进行任何的方向判断,默认这个方法是由MyInfo发起的 /// </param> /// <param name="CardSn"></param> /// <returns></returns> public static List <string> StartAction(ActionStatus actionStatus, string CardSn) { //清除事件池,注意,事件将在动作结束后整体结算 actionStatus.battleEvenetHandler.事件池.Clear(); CardBasicInfo card = CardUtility.GetCardInfoBySN(CardSn); List <string> ActionCodeLst = new List <string>(); //未知的异常,卡牌资料缺失 if (card == null) { return(ActionCodeLst); } PublicInfo PlayInfo = actionStatus.AllRole.MyPublicInfo; switch (card.卡牌种类) { case CardBasicInfo.资源类型枚举.法术: actionStatus.ActionName = "USESPELLCARD"; UseSpellAction.RunBS(actionStatus, CardSn); break; case CardBasicInfo.资源类型枚举.随从: actionStatus.ActionName = "USEMINIONCARD"; UseMinionAction.RunBS(actionStatus, CardSn); break; case CardBasicInfo.资源类型枚举.武器: ActionCodeLst.Add(ActionCode.strWeapon + CardUtility.strSplitMark + CardSn); PlayInfo.Hero.Weapon = (WeaponCard)card; break; case CardBasicInfo.资源类型枚举.奥秘: ActionCodeLst.Add(ActionCode.strSecret + CardUtility.strSplitMark + CardSn); actionStatus.AllRole.MyPrivateInfo.奥秘列表.Add((SecretCard)card); PlayInfo.Hero.SecretCount = actionStatus.AllRole.MyPrivateInfo.奥秘列表.Count; break; default: break; } //随从卡牌的连击效果启动 Combo(actionStatus, card, ActionCodeLst, PlayInfo); if (ActionCodeLst.Count != 0) { PlayInfo.连击状态 = true; ActionCodeLst.AddRange(actionStatus.battleEvenetHandler.事件处理(actionStatus)); } return(ActionCodeLst); }
/// <summary> /// 使用手牌 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnUseHandCard_Click(object sender, EventArgs e) { CardBasicInfo UseHandCard; if ((sender.GetType()) == typeof(Button)) { UseHandCard = (CardBasicInfo)((ctlHandCard)(((Button)sender).Parent)).Tag; } else { UseHandCard = (CardBasicInfo)(((ctlHeroAbility)sender).Tag); } GameManager.MyClientManager.CurrentActiveCard = UseHandCard; var msg = CardBasicInfo.CheckCondition(UseHandCard, GameManager.MyClientManager.actionStatus.AllRole.MyPublicInfo); if (!string.IsNullOrEmpty(msg)) { MessageBox.Show(msg); return; } var actionlst = RunAction.StartAction(GameManager.MyClientManager.actionStatus, UseHandCard.序列号); if (actionlst.Count != 0) { if ((sender.GetType()) == typeof(Button)) { actionlst.Insert(0, ActionCode.strCard + CardUtility.strSplitMark + CardUtility.strMe); GameManager.MyClientManager.actionStatus.AllRole.MyPublicInfo.crystal.CurrentRemainPoint -= UseHandCard.使用成本; GameManager.MyClientManager.actionStatus.AllRole.MyPublicInfo.HandCardCount--; GameManager.MyClientManager.actionStatus.AllRole.MyPrivateInfo.RemoveUsedCard(UseHandCard.序列号); } else { GameManager.MyClientManager.actionStatus.AllRole.MyPublicInfo.crystal.CurrentRemainPoint -= UseHandCard.使用成本; GameManager.MyClientManager.actionStatus.AllRole.MyPublicInfo.Hero.IsUsedHeroAbility = true; } actionlst.Add(ActionCode.strCrystal + CardUtility.strSplitMark + CardUtility.strMe + CardUtility.strSplitMark + GameManager.MyClientManager.actionStatus.AllRole.MyPublicInfo.crystal.CurrentRemainPoint + CardUtility.strSplitMark + GameManager.MyClientManager.actionStatus.AllRole.MyPublicInfo.crystal.CurrentFullPoint); //奥秘计算 actionlst.AddRange(SecretCard.奥秘计算(actionlst, GameManager.MyClientManager.actionStatus, GameManager.MyClientManager.GameId)); GameManager.MyClientManager.actionStatus.AllRole.MyPrivateInfo.ResetHandCardCost(GameManager.MyClientManager.actionStatus); if (SystemManager.游戏类型 != SystemManager.GameType.单机版) { ClientRequest.WriteAction(GameManager.MyClientManager.GameId.ToString(GameServer.GameIdFormat), actionlst); } DisplayMyInfo(); } }
/// <summary> /// 将UI数据设定到对象上 /// </summary> /// <param name="card"></param> public void SetBasicInfo(CardBasicInfo card) { card.使用成本 = (int)numCost.Value; card.称 = txtName.Text; card.描述 = txtDescription.Text; }
/// <summary> /// 卡牌入战场 /// </summary> /// <param name="Position"></param> /// <param name="CardSn"></param> public void PutToBattle(int Position, string CardSn) { CardBasicInfo card = CardUtility.GetCardInfoBySN(CardSn); PutToBattle(Position, (MinionCard)card); }