/// <summary> /// TargetSelect /// </summary> /// <param name="option"></param> /// <param name="mGame"></param> public TargetSelect(CardUtility.PositionSelectOption option, GameManager mGame) { InitializeComponent(); SelectOption = option; game = mGame; 嘲讽限制 = option.嘲讽限制; Position.Postion = -1; }
/// <summary> /// TargetSelect /// </summary> /// <param name="option"></param> /// <param name="_actionStatus"></param> public TargetSelect(CardUtility.位置选择用参数结构体 option, ActionStatus _actionStatus) { InitializeComponent(); SelectOption = option; actionStatus = _actionStatus; Position.位置 = -1; ctlUsageCard.CardInfo = GameManager.MyClientManager.CurrentActiveCard; ctlUsageCard.Enabled = false; ctlUsageCard.Visible = true; }
/// <summary> /// 法术执行 /// </summary> /// <param name="game"></param> /// <returns></returns> public List<string> RunEffect(ActionStatus game, CardUtility.目标选择方向枚举 Direct) { List<string> Result = new List<string>(); switch (Direct) { case CardUtility.目标选择方向枚举.本方: //#CARD#ME#M000001 DrawMyCard(game, Result); break; case CardUtility.目标选择方向枚举.对方: DrawYourCard(game, Result); break; case CardUtility.目标选择方向枚举.双方: DrawMyCard(game, Result); DrawYourCard(game, Result); break; } return Result; }
/// <summary> /// 施法对象列表 /// </summary> /// <param name="singleEffect"></param> /// <param name="game"></param> /// <param name="PosInfo"></param> /// <param name="RandSeed"></param> /// <returns></returns> public static List<string> GetTargetList(CardUtility.位置选择用参数结构体 SelectOpt, ActionStatus game, int RandSeed) { List<string> Result = new List<string>(); if (SelectOpt.EffictTargetSelectMode == CardUtility.目标选择模式枚举.随机) { //随机的对象时随从的时候,如果没有随从,直接退出 if (SelectOpt.EffectTargetSelectDirect == CardUtility.目标选择方向枚举.本方 && SelectOpt.EffectTargetSelectRole == CardUtility.目标选择角色枚举.随从) { if (game.AllRole.MyPublicInfo.BattleField.MinionCount == 0) return Result; } if (SelectOpt.EffectTargetSelectDirect == CardUtility.目标选择方向枚举.对方 && SelectOpt.EffectTargetSelectRole == CardUtility.目标选择角色枚举.随从) { if (game.AllRole.YourPublicInfo.BattleField.MinionCount == 0) return Result; } if (SelectOpt.EffectTargetSelectDirect == CardUtility.目标选择方向枚举.对方 && SelectOpt.EffectTargetSelectRole == CardUtility.目标选择角色枚举.随从) { if (game.AllRole.MyPublicInfo.BattleField.MinionCount + game.AllRole.YourPublicInfo.BattleField.MinionCount == 0) return Result; } } switch (SelectOpt.EffictTargetSelectMode) { case CardUtility.目标选择模式枚举.随机: Random t = new Random(DateTime.Now.Millisecond + RandSeed); switch (SelectOpt.EffectTargetSelectDirect) { case CardUtility.目标选择方向枚举.本方: switch (SelectOpt.EffectTargetSelectRole) { case CardUtility.目标选择角色枚举.随从: SelectOpt.SelectedPos.位置 = t.Next(1, game.AllRole.MyPublicInfo.BattleField.MinionCount + 1); SelectOpt.SelectedPos.本方对方标识 = true; break; case CardUtility.目标选择角色枚举.所有角色: SelectOpt.SelectedPos.位置 = t.Next(BattleFieldInfo.HeroPos, game.AllRole.MyPublicInfo.BattleField.MinionCount + 1); SelectOpt.SelectedPos.本方对方标识 = true; break; } //ME#POS Result.Add(CardUtility.strMe + CardUtility.strSplitMark + SelectOpt.SelectedPos.位置.ToString("D1")); break; case CardUtility.目标选择方向枚举.对方: switch (SelectOpt.EffectTargetSelectRole) { case CardUtility.目标选择角色枚举.随从: SelectOpt.SelectedPos.位置 = t.Next(1, game.AllRole.YourPublicInfo.BattleField.MinionCount + 1); SelectOpt.SelectedPos.本方对方标识 = false; break; case CardUtility.目标选择角色枚举.所有角色: SelectOpt.SelectedPos.位置 = t.Next(BattleFieldInfo.HeroPos, game.AllRole.YourPublicInfo.BattleField.MinionCount + 1); SelectOpt.SelectedPos.本方对方标识 = false; break; } //ME#POS Result.Add(CardUtility.strYou + CardUtility.strSplitMark + SelectOpt.SelectedPos.位置.ToString("D1")); break; case CardUtility.目标选择方向枚举.双方: //本方对方 int MinionCount; if (t.Next(1, 3) == 1) { SelectOpt.SelectedPos.本方对方标识 = true; MinionCount = game.AllRole.MyPublicInfo.BattleField.MinionCount; } else { SelectOpt.SelectedPos.本方对方标识 = false; MinionCount = game.AllRole.YourPublicInfo.BattleField.MinionCount; } switch (SelectOpt.EffectTargetSelectRole) { case CardUtility.目标选择角色枚举.随从: SelectOpt.SelectedPos.位置 = t.Next(1, MinionCount + 1); break; case CardUtility.目标选择角色枚举.所有角色: SelectOpt.SelectedPos.位置 = t.Next(BattleFieldInfo.HeroPos, MinionCount + 1); break; } //ME#POS Result.Add((SelectOpt.SelectedPos.本方对方标识 ? CardUtility.strMe : CardUtility.strYou) + CardUtility.strSplitMark + SelectOpt.SelectedPos.位置.ToString("D1")); break; default: break; } break; case CardUtility.目标选择模式枚举.全体: case CardUtility.目标选择模式枚举.横扫: switch (SelectOpt.EffectTargetSelectDirect) { case CardUtility.目标选择方向枚举.本方: switch (SelectOpt.EffectTargetSelectRole) { case CardUtility.目标选择角色枚举.随从: Result.Add(CardUtility.strMe + CardUtility.strSplitMark + BattleFieldInfo.AllMinionPos.ToString("D1")); break; case CardUtility.目标选择角色枚举.英雄: Result.Add(CardUtility.strMe + CardUtility.strSplitMark + BattleFieldInfo.HeroPos.ToString("D1")); break; case CardUtility.目标选择角色枚举.所有角色: Result.Add(CardUtility.strMe + CardUtility.strSplitMark + BattleFieldInfo.AllRolePos.ToString("D1")); break; } break; case CardUtility.目标选择方向枚举.对方: switch (SelectOpt.EffectTargetSelectRole) { case CardUtility.目标选择角色枚举.随从: Result.Add(CardUtility.strYou + CardUtility.strSplitMark + BattleFieldInfo.AllMinionPos.ToString("D1")); break; case CardUtility.目标选择角色枚举.英雄: Result.Add(CardUtility.strYou + CardUtility.strSplitMark + BattleFieldInfo.HeroPos.ToString("D1")); break; case CardUtility.目标选择角色枚举.所有角色: Result.Add(CardUtility.strYou + CardUtility.strSplitMark + BattleFieldInfo.AllRolePos.ToString("D1")); break; } break; case CardUtility.目标选择方向枚举.双方: switch (SelectOpt.EffectTargetSelectRole) { case CardUtility.目标选择角色枚举.随从: Result.Add(CardUtility.strMe + CardUtility.strSplitMark + BattleFieldInfo.AllMinionPos.ToString("D1")); Result.Add(CardUtility.strYou + CardUtility.strSplitMark + BattleFieldInfo.AllMinionPos.ToString("D1")); break; case CardUtility.目标选择角色枚举.英雄: Result.Add(CardUtility.strMe + CardUtility.strSplitMark + BattleFieldInfo.HeroPos.ToString("D1")); Result.Add(CardUtility.strYou + CardUtility.strSplitMark + BattleFieldInfo.HeroPos.ToString("D1")); break; case CardUtility.目标选择角色枚举.所有角色: Result.Add(CardUtility.strMe + CardUtility.strSplitMark + BattleFieldInfo.AllRolePos.ToString("D1")); Result.Add(CardUtility.strYou + CardUtility.strSplitMark + BattleFieldInfo.AllRolePos.ToString("D1")); break; } break; } break; case CardUtility.目标选择模式枚举.指定: Result.Add((SelectOpt.SelectedPos.本方对方标识 ? CardUtility.strMe : CardUtility.strYou) + CardUtility.strSplitMark + SelectOpt.SelectedPos.位置.ToString("D1")); break; case CardUtility.目标选择模式枚举.相邻: case CardUtility.目标选择模式枚举.相邻排除指定位置: if (SelectOpt.EffictTargetSelectMode == CardUtility.目标选择模式枚举.相邻) { Result.Add((SelectOpt.SelectedPos.本方对方标识 ? CardUtility.strMe : CardUtility.strYou) + CardUtility.strSplitMark + SelectOpt.SelectedPos.位置.ToString("D1")); } //左侧追加 if (SelectOpt.SelectedPos.位置 != 1) Result.Add((SelectOpt.SelectedPos.本方对方标识 ? CardUtility.strMe : CardUtility.strYou) + CardUtility.strSplitMark + (SelectOpt.SelectedPos.位置 - 1).ToString("D1")); //右侧追加 if (SelectOpt.SelectedPos.本方对方标识) { if (SelectOpt.SelectedPos.位置 != game.AllRole.MyPublicInfo.BattleField.MinionCount) Result.Add((SelectOpt.SelectedPos.本方对方标识 ? CardUtility.strMe : CardUtility.strYou) + CardUtility.strSplitMark + (SelectOpt.SelectedPos.位置 + 1).ToString("D1")); } else { if (SelectOpt.SelectedPos.位置 != game.AllRole.YourPublicInfo.BattleField.MinionCount) Result.Add((SelectOpt.SelectedPos.本方对方标识 ? CardUtility.strMe : CardUtility.strYou) + CardUtility.strSplitMark + (SelectOpt.SelectedPos.位置 + 1).ToString("D1")); } break; case CardUtility.目标选择模式枚举.不用选择: if (SelectOpt.EffectTargetSelectRole == CardUtility.目标选择角色枚举.英雄) { switch (SelectOpt.EffectTargetSelectDirect) { case CardUtility.目标选择方向枚举.本方: Result.Add(CardUtility.strMe + CardUtility.strSplitMark + BattleFieldInfo.HeroPos.ToString("D1")); break; case CardUtility.目标选择方向枚举.对方: Result.Add(CardUtility.strYou + CardUtility.strSplitMark + BattleFieldInfo.HeroPos.ToString("D1")); break; case CardUtility.目标选择方向枚举.双方: Result.Add(CardUtility.strMe + CardUtility.strSplitMark + BattleFieldInfo.HeroPos.ToString("D1")); Result.Add(CardUtility.strYou + CardUtility.strSplitMark + BattleFieldInfo.HeroPos.ToString("D1")); break; default: break; } } break; } return Result; }
/// <summary> /// 设置是否能成为当前动作的对象 /// </summary> /// <param name="SelectOption"></param> /// <param name="game"></param> public static void SetTargetSelectEnable(CardUtility.位置选择用参数结构体 SelectOption, ActionStatus game) { game.AllRole.MyPublicInfo.Hero.能否成为动作对象 = false; for (int i = 0; i < game.AllRole.MyPublicInfo.BattleField.MinionCount; i++) { game.AllRole.MyPublicInfo.BattleField.BattleMinions[i].能否成为动作对象 = false; } game.AllRole.YourPublicInfo.Hero.能否成为动作对象 = false; for (int i = 0; i < game.AllRole.YourPublicInfo.BattleField.MinionCount; i++) { game.AllRole.YourPublicInfo.BattleField.BattleMinions[i].能否成为动作对象 = false; } switch (SelectOption.EffectTargetSelectDirect) { case CardUtility.目标选择方向枚举.本方: switch (SelectOption.EffectTargetSelectRole) { case CardUtility.目标选择角色枚举.随从: case CardUtility.目标选择角色枚举.所有角色: for (int i = 0; i < game.AllRole.MyPublicInfo.BattleField.MinionCount; i++) { if (符合选择条件(game.AllRole.MyPublicInfo.BattleField.BattleMinions[i], SelectOption.EffectTargetSelectCondition)) { game.AllRole.MyPublicInfo.BattleField.BattleMinions[i].能否成为动作对象 = !game.AllRole.MyPublicInfo.BattleField.BattleMinions[i].潜行特性; } } if (SelectOption.EffectTargetSelectRole == CardUtility.目标选择角色枚举.所有角色) game.AllRole.MyPublicInfo.Hero.能否成为动作对象 = true; break; case CardUtility.目标选择角色枚举.英雄: game.AllRole.MyPublicInfo.Hero.能否成为动作对象 = true; break; } break; case CardUtility.目标选择方向枚举.对方: bool Has嘲讽 = false; for (int i = 0; i < game.AllRole.YourPublicInfo.BattleField.MinionCount; i++) { if (game.AllRole.YourPublicInfo.BattleField.BattleMinions[i].嘲讽特性 && (!game.AllRole.YourPublicInfo.BattleField.BattleMinions[i].潜行特性)) { //潜行特性的时候,如果嘲讽特性,则嘲讽特性无效 Has嘲讽 = true; break; } } switch (SelectOption.EffectTargetSelectRole) { case CardUtility.目标选择角色枚举.英雄: game.AllRole.YourPublicInfo.Hero.能否成为动作对象 = true; break; case CardUtility.目标选择角色枚举.随从: case CardUtility.目标选择角色枚举.所有角色: if (SelectOption.嘲讽限制 && Has嘲讽) { game.AllRole.YourPublicInfo.Hero.能否成为动作对象 = false; for (int i = 0; i < game.AllRole.YourPublicInfo.BattleField.MinionCount; i++) { //只能选择嘲讽对象 if (game.AllRole.YourPublicInfo.BattleField.BattleMinions[i].嘲讽特性) { game.AllRole.YourPublicInfo.BattleField.BattleMinions[i].能否成为动作对象 = !game.AllRole.YourPublicInfo.BattleField.BattleMinions[i].潜行特性; } } } else { for (int i = 0; i < game.AllRole.YourPublicInfo.BattleField.MinionCount; i++) { if (符合选择条件(game.AllRole.YourPublicInfo.BattleField.BattleMinions[i], SelectOption.EffectTargetSelectCondition)) game.AllRole.YourPublicInfo.BattleField.BattleMinions[i].能否成为动作对象 = !game.AllRole.YourPublicInfo.BattleField.BattleMinions[i].潜行特性; } } if (SelectOption.EffectTargetSelectRole == CardUtility.目标选择角色枚举.所有角色) { if (!(SelectOption.嘲讽限制 && Has嘲讽)) game.AllRole.YourPublicInfo.Hero.能否成为动作对象 = true; } break; } break; case CardUtility.目标选择方向枚举.双方: switch (SelectOption.EffectTargetSelectRole) { case CardUtility.目标选择角色枚举.英雄: game.AllRole.MyPublicInfo.Hero.能否成为动作对象 = true; game.AllRole.YourPublicInfo.Hero.能否成为动作对象 = true; break; case CardUtility.目标选择角色枚举.所有角色: case CardUtility.目标选择角色枚举.随从: if (SelectOption.EffectTargetSelectRole == CardUtility.目标选择角色枚举.所有角色) { game.AllRole.MyPublicInfo.Hero.能否成为动作对象 = true; game.AllRole.YourPublicInfo.Hero.能否成为动作对象 = true; } for (int i = 0; i < game.AllRole.MyPublicInfo.BattleField.MinionCount; i++) { if (符合选择条件(game.AllRole.MyPublicInfo.BattleField.BattleMinions[i], SelectOption.EffectTargetSelectCondition)) game.AllRole.MyPublicInfo.BattleField.BattleMinions[i].能否成为动作对象 = !game.AllRole.MyPublicInfo.BattleField.BattleMinions[i].潜行特性; } for (int i = 0; i < game.AllRole.YourPublicInfo.BattleField.MinionCount; i++) { if (符合选择条件(game.AllRole.YourPublicInfo.BattleField.BattleMinions[i], SelectOption.EffectTargetSelectCondition)) game.AllRole.YourPublicInfo.BattleField.BattleMinions[i].能否成为动作对象 = !game.AllRole.YourPublicInfo.BattleField.BattleMinions[i].潜行特性; } break; } break; } //战吼等时候,不能选择自己 if (SelectOption.CanNotSelectPos.位置 != BattleFieldInfo.UnknowPos) { if (SelectOption.CanNotSelectPos.本方对方标识) { if (SelectOption.CanNotSelectPos.位置 == BattleFieldInfo.HeroPos) { game.AllRole.MyPublicInfo.Hero.能否成为动作对象 = false; } else { game.AllRole.MyPublicInfo.BattleField.BattleMinions[SelectOption.CanNotSelectPos.位置 - 1].能否成为动作对象 = false; } } else { if (SelectOption.CanNotSelectPos.位置 == BattleFieldInfo.HeroPos) { game.AllRole.YourPublicInfo.Hero.能否成为动作对象 = false; } else { game.AllRole.YourPublicInfo.BattleField.BattleMinions[SelectOption.CanNotSelectPos.位置 - 1].能否成为动作对象 = false; } } } }
/// <summary> /// 针对系统的法术效果 /// </summary> /// <param name="game"></param> /// <param name="ConvertPosDirect"></param> /// <param name="Ability"></param> /// <returns></returns> private List<string> RunGameSystemEffect(GameManager game, bool ConvertPosDirect, AtomicEffectDefine effect, CardUtility.PositionSelectOption Option) { List<string> Result = new List<string>(); switch (effect.AtomicEffectType) { case AtomicEffectDefine.AtomicEffectEnum.卡牌: CardEffect CardAtomic = new CardEffect(); CardAtomic.GetField(effect.InfoArray); return CardAtomic.RunEffect(game, Option.EffectTargetSelectDirect); case AtomicEffectDefine.AtomicEffectEnum.水晶: CrystalEffect CrystalAtomic = new CrystalEffect(); CrystalAtomic.GetField(effect.InfoArray); return CrystalAtomic.RunEffect(game, Option.EffectTargetSelectDirect); case AtomicEffectDefine.AtomicEffectEnum.武器: WeaponPointEffect WeaponPointAtomic = new WeaponPointEffect(); WeaponPointAtomic.GetField(effect.InfoArray); return WeaponPointAtomic.RunEffect(game, Option.EffectTargetSelectDirect); case AtomicEffectDefine.AtomicEffectEnum.召唤: SummonEffect SummonAtomic = new SummonEffect(); SummonAtomic.GetField(effect.InfoArray); return SummonAtomic.RunEffect(game, Option.EffectTargetSelectDirect); } return Result; }
/// <summary> /// 施法对象列表 /// </summary> /// <param name="singleEffect"></param> /// <param name="game"></param> /// <param name="PosInfo"></param> /// <param name="RandSeed"></param> /// <returns></returns> public static List<string> GetTargetList(CardUtility.PositionSelectOption SelectOpt, Client.GameManager game, int RandSeed) { List<string> Result = new List<string>(); switch (SelectOpt.EffictTargetSelectMode) { case CardUtility.TargetSelectModeEnum.随机: Random t = new Random(DateTime.Now.Millisecond + RandSeed); switch (SelectOpt.EffectTargetSelectDirect) { case CardUtility.TargetSelectDirectEnum.本方: switch (SelectOpt.EffectTargetSelectRole) { case CardUtility.TargetSelectRoleEnum.随从: SelectOpt.SelectedPos.Postion = t.Next(1, game.MyInfo.BattleField.MinionCount + 1); SelectOpt.SelectedPos.本方对方标识 = true; break; case CardUtility.TargetSelectRoleEnum.所有角色: SelectOpt.SelectedPos.Postion = t.Next(Client.BattleFieldInfo.HeroPos, game.MyInfo.BattleField.MinionCount + 1); SelectOpt.SelectedPos.本方对方标识 = true; break; } //ME#POS Result.Add(CardUtility.strMe + CardUtility.strSplitMark + SelectOpt.SelectedPos.Postion.ToString("D1")); break; case CardUtility.TargetSelectDirectEnum.对方: switch (SelectOpt.EffectTargetSelectRole) { case CardUtility.TargetSelectRoleEnum.随从: SelectOpt.SelectedPos.Postion = t.Next(1, game.YourInfo.BattleField.MinionCount + 1); SelectOpt.SelectedPos.本方对方标识 = false; break; case CardUtility.TargetSelectRoleEnum.所有角色: SelectOpt.SelectedPos.Postion = t.Next(Client.BattleFieldInfo.HeroPos, game.YourInfo.BattleField.MinionCount + 1); SelectOpt.SelectedPos.本方对方标识 = false; break; } //ME#POS Result.Add(CardUtility.strYou + CardUtility.strSplitMark + SelectOpt.SelectedPos.Postion.ToString("D1")); break; case CardUtility.TargetSelectDirectEnum.双方: //本方对方 int MinionCount; if (t.Next(1, 3) == 1) { SelectOpt.SelectedPos.本方对方标识 = true; MinionCount = game.MyInfo.BattleField.MinionCount; } else { SelectOpt.SelectedPos.本方对方标识 = false; MinionCount = game.YourInfo.BattleField.MinionCount; } switch (SelectOpt.EffectTargetSelectRole) { case CardUtility.TargetSelectRoleEnum.随从: SelectOpt.SelectedPos.Postion = t.Next(1, MinionCount + 1); break; case CardUtility.TargetSelectRoleEnum.所有角色: SelectOpt.SelectedPos.Postion = t.Next(Client.BattleFieldInfo.HeroPos, MinionCount + 1); break; } //ME#POS Result.Add((SelectOpt.SelectedPos.本方对方标识 ? CardUtility.strMe : CardUtility.strYou) + CardUtility.strSplitMark + SelectOpt.SelectedPos.Postion.ToString("D1")); break; default: break; } break; case CardUtility.TargetSelectModeEnum.全体: case CardUtility.TargetSelectModeEnum.横扫: switch (SelectOpt.EffectTargetSelectDirect) { case CardUtility.TargetSelectDirectEnum.本方: switch (SelectOpt.EffectTargetSelectRole) { case CardUtility.TargetSelectRoleEnum.随从: Result.Add(CardUtility.strMe + CardUtility.strSplitMark + Client.BattleFieldInfo.AllMinionPos.ToString("D1")); break; case CardUtility.TargetSelectRoleEnum.英雄: Result.Add(CardUtility.strMe + CardUtility.strSplitMark + Client.BattleFieldInfo.HeroPos.ToString("D1")); break; case CardUtility.TargetSelectRoleEnum.所有角色: Result.Add(CardUtility.strMe + CardUtility.strSplitMark + Client.BattleFieldInfo.AllRolePos.ToString("D1")); break; } break; case CardUtility.TargetSelectDirectEnum.对方: switch (SelectOpt.EffectTargetSelectRole) { case CardUtility.TargetSelectRoleEnum.随从: Result.Add(CardUtility.strYou + CardUtility.strSplitMark + Client.BattleFieldInfo.AllMinionPos.ToString("D1")); break; case CardUtility.TargetSelectRoleEnum.英雄: Result.Add(CardUtility.strYou + CardUtility.strSplitMark + Client.BattleFieldInfo.HeroPos.ToString("D1")); break; case CardUtility.TargetSelectRoleEnum.所有角色: Result.Add(CardUtility.strYou + CardUtility.strSplitMark + Client.BattleFieldInfo.AllRolePos.ToString("D1")); break; } break; case CardUtility.TargetSelectDirectEnum.双方: switch (SelectOpt.EffectTargetSelectRole) { case CardUtility.TargetSelectRoleEnum.随从: Result.Add(CardUtility.strMe + CardUtility.strSplitMark + Client.BattleFieldInfo.AllMinionPos.ToString("D1")); Result.Add(CardUtility.strYou + CardUtility.strSplitMark + Client.BattleFieldInfo.AllMinionPos.ToString("D1")); break; case CardUtility.TargetSelectRoleEnum.英雄: Result.Add(CardUtility.strMe + CardUtility.strSplitMark + Client.BattleFieldInfo.HeroPos.ToString("D1")); Result.Add(CardUtility.strYou + CardUtility.strSplitMark + Client.BattleFieldInfo.HeroPos.ToString("D1")); break; case CardUtility.TargetSelectRoleEnum.所有角色: Result.Add(CardUtility.strMe + CardUtility.strSplitMark + Client.BattleFieldInfo.AllRolePos.ToString("D1")); Result.Add(CardUtility.strYou + CardUtility.strSplitMark + Client.BattleFieldInfo.AllRolePos.ToString("D1")); break; } break; } break; case CardUtility.TargetSelectModeEnum.指定: case CardUtility.TargetSelectModeEnum.继承: Result.Add((SelectOpt.SelectedPos.本方对方标识 ? CardUtility.strMe : CardUtility.strYou) + CardUtility.strSplitMark + SelectOpt.SelectedPos.Postion.ToString("D1")); break; case CardUtility.TargetSelectModeEnum.相邻: Result.Add((SelectOpt.SelectedPos.本方对方标识 ? CardUtility.strMe : CardUtility.strYou) + CardUtility.strSplitMark + SelectOpt.SelectedPos.Postion.ToString("D1")); //左侧追加 if (SelectOpt.SelectedPos.Postion != 1) Result.Add((SelectOpt.SelectedPos.本方对方标识 ? CardUtility.strMe : CardUtility.strYou) + CardUtility.strSplitMark + (SelectOpt.SelectedPos.Postion - 1).ToString("D1")); //右侧追加 if (SelectOpt.SelectedPos.本方对方标识) { if (SelectOpt.SelectedPos.Postion != game.MyInfo.BattleField.MinionCount) Result.Add((SelectOpt.SelectedPos.本方对方标识 ? CardUtility.strMe : CardUtility.strYou) + CardUtility.strSplitMark + (SelectOpt.SelectedPos.Postion + 1).ToString("D1")); } else { if (SelectOpt.SelectedPos.Postion != game.YourInfo.BattleField.MinionCount) Result.Add((SelectOpt.SelectedPos.本方对方标识 ? CardUtility.strMe : CardUtility.strYou) + CardUtility.strSplitMark + (SelectOpt.SelectedPos.Postion + 1).ToString("D1")); } break; case CardUtility.TargetSelectModeEnum.不用选择: if (SelectOpt.EffectTargetSelectRole == CardUtility.TargetSelectRoleEnum.英雄) { switch (SelectOpt.EffectTargetSelectDirect) { case CardUtility.TargetSelectDirectEnum.本方: Result.Add(CardUtility.strMe + CardUtility.strSplitMark + Client.BattleFieldInfo.HeroPos.ToString("D1")); break; case CardUtility.TargetSelectDirectEnum.对方: Result.Add(CardUtility.strYou + CardUtility.strSplitMark + Client.BattleFieldInfo.HeroPos.ToString("D1")); break; case CardUtility.TargetSelectDirectEnum.双方: Result.Add(CardUtility.strMe + CardUtility.strSplitMark + Client.BattleFieldInfo.HeroPos.ToString("D1")); Result.Add(CardUtility.strYou + CardUtility.strSplitMark + Client.BattleFieldInfo.HeroPos.ToString("D1")); break; default: break; } } break; } return Result; }
/// <summary> /// 针对系统的法术效果 /// </summary> /// <param name="game"></param> /// <param name="ConvertPosDirect"></param> /// <param name="Ability"></param> /// <returns></returns> public static List<string> RunGameSystemEffect(ActionStatus game, AtomicEffectDefine effect, CardUtility.位置选择用参数结构体 Option) { List<string> Result = new List<string>(); switch (effect.AtomicEffectType) { case AtomicEffectDefine.AtomicEffectEnum.卡牌: CardEffect CardAtomic = new CardEffect(); CardAtomic.GetField(effect.InfoArray); return CardAtomic.RunEffect(game, Option.EffectTargetSelectDirect); case AtomicEffectDefine.AtomicEffectEnum.水晶: CrystalEffect CrystalAtomic = new CrystalEffect(); CrystalAtomic.GetField(effect.InfoArray); return CrystalAtomic.RunEffect(game, Option.EffectTargetSelectDirect); case AtomicEffectDefine.AtomicEffectEnum.武器: WeaponPointEffect WeaponPointAtomic = new WeaponPointEffect(); WeaponPointAtomic.GetField(effect.InfoArray); return WeaponPointAtomic.RunEffect(game, Option.EffectTargetSelectDirect); case AtomicEffectDefine.AtomicEffectEnum.召唤: SummonEffect SummonAtomic = new SummonEffect(); SummonAtomic.GetField(effect.InfoArray); return SummonAtomic.RunEffect(game, Option.EffectTargetSelectDirect); } return Result; }
/// <summary> /// 法术执行 /// </summary> /// <param name="game"></param> /// <returns></returns> public List<string> RunEffect(GameManager game, CardUtility.TargetSelectDirectEnum Direct) { List<string> Result = new List<string>(); switch (Direct) { case CardUtility.TargetSelectDirectEnum.本方: //#CARD#ME#M000001 if (String.IsNullOrEmpty(指定卡牌编号) || 指定卡牌编号 == CardUtility.strIgnore) { var drawCards = Engine.Client.ClientRequest.DrawCard(game.GameId.ToString(GameServer.GameIdFormat), game.IsFirst, 1); if (drawCards.Count == 1) { game.MySelfInfo.handCards.Add(Engine.Utility.CardUtility.GetCardInfoBySN(drawCards[0])); game.MyInfo.HandCardCount++; game.MyInfo.RemainCardDeckCount--; Result.Add(ActionCode.strCard + CardUtility.strSplitMark + CardUtility.strMe); } } else { game.MySelfInfo.handCards.Add((Engine.Utility.CardUtility.GetCardInfoBySN(指定卡牌编号))); game.MyInfo.HandCardCount++; Result.Add(ActionCode.strCard + CardUtility.strSplitMark + CardUtility.strMe); } break; case CardUtility.TargetSelectDirectEnum.对方: if (String.IsNullOrEmpty(指定卡牌编号) || 指定卡牌编号 == CardUtility.strIgnore) { if (game.YourInfo.RemainCardDeckCount > 0) { game.YourInfo.HandCardCount++; game.YourInfo.RemainCardDeckCount--; Result.Add(ActionCode.strCard + CardUtility.strSplitMark + CardUtility.strYou); } } else { game.YourInfo.HandCardCount++; Result.Add(ActionCode.strCard + CardUtility.strSplitMark + CardUtility.strYou + CardUtility.strSplitMark + 指定卡牌编号); } break; case CardUtility.TargetSelectDirectEnum.双方: if (String.IsNullOrEmpty(指定卡牌编号) || 指定卡牌编号 == CardUtility.strIgnore) { var drawCards = Engine.Client.ClientRequest.DrawCard(game.GameId.ToString(GameServer.GameIdFormat), game.IsFirst, 1); if (drawCards.Count == 1) { game.MySelfInfo.handCards.Add(Engine.Utility.CardUtility.GetCardInfoBySN(drawCards[0])); game.MyInfo.HandCardCount++; game.MyInfo.RemainCardDeckCount--; Result.Add(ActionCode.strCard + CardUtility.strSplitMark + CardUtility.strMe); } } else { game.MySelfInfo.handCards.Add((Engine.Utility.CardUtility.GetCardInfoBySN(指定卡牌编号))); game.MyInfo.HandCardCount++; Result.Add(ActionCode.strCard + CardUtility.strSplitMark + CardUtility.strMe); } if (String.IsNullOrEmpty(指定卡牌编号) || 指定卡牌编号 == CardUtility.strIgnore) { if (game.YourInfo.RemainCardDeckCount > 0) { game.YourInfo.HandCardCount++; game.YourInfo.RemainCardDeckCount--; Result.Add(ActionCode.strCard + CardUtility.strSplitMark + CardUtility.strYou); } } else { game.YourInfo.HandCardCount++; Result.Add(ActionCode.strCard + CardUtility.strSplitMark + CardUtility.strYou + CardUtility.strSplitMark + 指定卡牌编号); } break; } return Result; }
/// <summary> /// 选择目标 /// </summary> /// <returns></returns> private CardUtility.指定位置结构体 SelectPanel(CardUtility.位置选择用参数结构体 SelectOpt) { var frm = new TargetSelect(SelectOpt, GameManager.MyClientManager.actionStatus); frm.ShowDialog(); var SelectPos = frm.Position; return SelectPos; }
/// <summary> /// 选择目标 /// </summary> /// <returns></returns> private CardUtility.TargetPosition SelectPanel(CardUtility.PositionSelectOption SelectOpt) { var frm = new TargetSelect(SelectOpt, game); frm.ShowDialog(); var SelectPos = frm.Position; return SelectPos; }
/// <summary> /// 设置是否能成为当前动作的对象 /// </summary> /// <param name="SelectOption"></param> /// <param name="game"></param> public static void SetTargetSelectEnable(CardUtility.PositionSelectOption SelectOption, GameManager game) { switch (SelectOption.EffectTargetSelectDirect) { case CardUtility.TargetSelectDirectEnum.本方: switch (SelectOption.EffectTargetSelectRole) { case CardUtility.TargetSelectRoleEnum.随从: for (int i = 0; i < game.MyInfo.BattleField.MinionCount; i++) { if (Engine.Utility.CardUtility.符合选择条件(game.MyInfo.BattleField.BattleMinions[i], SelectOption.EffectTargetSelectCondition)) game.MyInfo.BattleField.BattleMinions[i].能否成为动作对象 = true; game.MyInfo.BattleField.BattleMinions[i].能否成为动作对象 = !game.MyInfo.BattleField.BattleMinions[i].潜行特性; } break; case CardUtility.TargetSelectRoleEnum.英雄: game.MyInfo.能否成为动作对象 = true; break; case CardUtility.TargetSelectRoleEnum.所有角色: game.MyInfo.能否成为动作对象 = true; for (int i = 0; i < game.MyInfo.BattleField.MinionCount; i++) { if (Engine.Utility.CardUtility.符合选择条件(game.MyInfo.BattleField.BattleMinions[i], SelectOption.EffectTargetSelectCondition)) game.MyInfo.BattleField.BattleMinions[i].能否成为动作对象 = true; game.MyInfo.BattleField.BattleMinions[i].能否成为动作对象 = !game.MyInfo.BattleField.BattleMinions[i].潜行特性; } break; } break; case CardUtility.TargetSelectDirectEnum.对方: switch (SelectOption.EffectTargetSelectRole) { case CardUtility.TargetSelectRoleEnum.随从: for (int i = 0; i < game.YourInfo.BattleField.MinionCount; i++) { if (Engine.Utility.CardUtility.符合选择条件(game.YourInfo.BattleField.BattleMinions[i], SelectOption.EffectTargetSelectCondition)) game.YourInfo.BattleField.BattleMinions[i].能否成为动作对象 = true; game.YourInfo.BattleField.BattleMinions[i].能否成为动作对象 = !game.YourInfo.BattleField.BattleMinions[i].潜行特性; } break; case CardUtility.TargetSelectRoleEnum.英雄: game.YourInfo.能否成为动作对象 = true; break; case CardUtility.TargetSelectRoleEnum.所有角色: Boolean Has嘲讽 = false; for (int i = 0; i < game.YourInfo.BattleField.MinionCount; i++) { if (game.YourInfo.BattleField.BattleMinions[i].嘲讽特性 && (!game.YourInfo.BattleField.BattleMinions[i].潜行特性)) { //嘲讽特性的时候,如果潜行特性,则潜行特性无效 Has嘲讽 = true; break; } } if (SelectOption.嘲讽限制 && Has嘲讽) { game.YourInfo.能否成为动作对象 = false; for (int i = 0; i < game.YourInfo.BattleField.MinionCount; i++) { //只能选择嘲讽对象 if (game.YourInfo.BattleField.BattleMinions[i].嘲讽特性) game.YourInfo.BattleField.BattleMinions[i].能否成为动作对象 = true; game.YourInfo.BattleField.BattleMinions[i].能否成为动作对象 = !game.YourInfo.BattleField.BattleMinions[i].潜行特性; } } else { game.YourInfo.能否成为动作对象 = true; for (int i = 0; i < game.YourInfo.BattleField.MinionCount; i++) { if (Engine.Utility.CardUtility.符合选择条件(game.YourInfo.BattleField.BattleMinions[i], SelectOption.EffectTargetSelectCondition)) game.YourInfo.BattleField.BattleMinions[i].能否成为动作对象 = true; game.YourInfo.BattleField.BattleMinions[i].能否成为动作对象 = !game.YourInfo.BattleField.BattleMinions[i].潜行特性; } } break; } break; case CardUtility.TargetSelectDirectEnum.双方: switch (SelectOption.EffectTargetSelectRole) { case CardUtility.TargetSelectRoleEnum.随从: for (int i = 0; i < game.MyInfo.BattleField.MinionCount; i++) { if (Engine.Utility.CardUtility.符合选择条件(game.MyInfo.BattleField.BattleMinions[i], SelectOption.EffectTargetSelectCondition)) game.MyInfo.BattleField.BattleMinions[i].能否成为动作对象 = true; } for (int i = 0; i < game.YourInfo.BattleField.MinionCount; i++) { if (Engine.Utility.CardUtility.符合选择条件(game.YourInfo.BattleField.BattleMinions[i], SelectOption.EffectTargetSelectCondition)) game.YourInfo.BattleField.BattleMinions[i].能否成为动作对象 = true; } break; case CardUtility.TargetSelectRoleEnum.英雄: game.MyInfo.能否成为动作对象 = true; game.YourInfo.能否成为动作对象 = true; break; case CardUtility.TargetSelectRoleEnum.所有角色: game.MyInfo.能否成为动作对象 = true; game.YourInfo.能否成为动作对象 = true; for (int i = 0; i < game.MyInfo.BattleField.MinionCount; i++) { if (Engine.Utility.CardUtility.符合选择条件(game.MyInfo.BattleField.BattleMinions[i], SelectOption.EffectTargetSelectCondition)) game.MyInfo.BattleField.BattleMinions[i].能否成为动作对象 = true; } for (int i = 0; i < game.YourInfo.BattleField.MinionCount; i++) { if (Engine.Utility.CardUtility.符合选择条件(game.YourInfo.BattleField.BattleMinions[i], SelectOption.EffectTargetSelectCondition)) game.YourInfo.BattleField.BattleMinions[i].能否成为动作对象 = true; } break; } break; } }
/// <summary> /// 运行效果 /// </summary> /// <param name="singleEffect"></param> /// <param name="game"></param> /// <param name="Seed"></param> /// <returns></returns> public List<string> RunEffect(ActionStatus game, CardUtility.目标选择方向枚举 Direct) { List<string> Result = new List<string>(); var MinionLst = 指定卡牌编号数组.Split(CardUtility.strSplitMark.ToCharArray()); Random random = new Random(DateTime.Now.Millisecond); var CardSN = MinionLst[random.Next(0, MinionLst.Length)]; var Minion = (MinionCard)CardUtility.GetCardInfoBySN(CardSN); switch (Direct) { case CardUtility.目标选择方向枚举.本方: if (game.AllRole.MyPublicInfo.BattleField.MinionCount < SystemManager.MaxMinionCount) { game.AllRole.MyPublicInfo.BattleField.AppendToBattle(Minion); //SUMMON#YOU#M000001#POS Result.Add(Server.ActionCode.strSummon + CardUtility.strSplitMark + CardUtility.strMe + CardUtility.strSplitMark + CardSN + CardUtility.strSplitMark + game.AllRole.MyPublicInfo.BattleField.MinionCount); game.battleEvenetHandler.事件池.Add(new EventCard.全局事件() { 触发事件类型 = EventCard.事件类型枚举.召唤, 触发位置 = Minion.战场位置 }); } break; case CardUtility.目标选择方向枚举.对方: if (game.AllRole.YourPublicInfo.BattleField.MinionCount < SystemManager.MaxMinionCount) { game.AllRole.YourPublicInfo.BattleField.AppendToBattle(Minion); Result.Add(Server.ActionCode.strSummon + CardUtility.strSplitMark + CardUtility.strYou + CardUtility.strSplitMark + CardSN + CardUtility.strSplitMark + game.AllRole.YourPublicInfo.BattleField.MinionCount); game.battleEvenetHandler.事件池.Add(new EventCard.全局事件() { 触发事件类型 = EventCard.事件类型枚举.召唤, 触发位置 = Minion.战场位置 }); } break; case CardUtility.目标选择方向枚举.双方: if (game.AllRole.MyPublicInfo.BattleField.MinionCount < SystemManager.MaxMinionCount) { game.AllRole.MyPublicInfo.BattleField.AppendToBattle(Minion); //SUMMON#YOU#M000001#POS Result.Add(Server.ActionCode.strSummon + CardUtility.strSplitMark + CardUtility.strMe + CardUtility.strSplitMark + CardSN + CardUtility.strSplitMark + game.AllRole.MyPublicInfo.BattleField.MinionCount); game.battleEvenetHandler.事件池.Add(new EventCard.全局事件() { 触发事件类型 = EventCard.事件类型枚举.召唤, 触发位置 = Minion.战场位置 }); } if (game.AllRole.MyPublicInfo.BattleField.MinionCount < SystemManager.MaxMinionCount) { game.AllRole.MyPublicInfo.BattleField.AppendToBattle(Minion); Result.Add(Server.ActionCode.strSummon + CardUtility.strSplitMark + CardUtility.strYou + CardUtility.strSplitMark + CardSN + CardUtility.strSplitMark + game.AllRole.MyPublicInfo.BattleField.MinionCount); game.battleEvenetHandler.事件池.Add(new EventCard.全局事件() { 触发事件类型 = EventCard.事件类型枚举.召唤, 触发位置 = Minion.战场位置 }); } break; } return Result; }