コード例 #1
0
ファイル: FightProcess.Attack.cs プロジェクト: Lantnr/MyTest
        /// <summary>
        /// 攻打城门
        /// </summary>
        /// <param name="moves"></param>
        /// <param name="attackrole"></param>
        /// <param name="fight"></param>
        private void AttackDoorFight(WarMovesVo moves, AttackRoles attackrole, WarFight fight)
        {
            if (fight.Door.SoldierCount == 0)
            {
                return;
            }
            var type = GetHurt(attackrole, fight.Door);

            if (fight.Door.SoldierCount <= 0)
            {
                fight.Door.SoldierCount = 0;
                for (int i = 0; i < fight.AttackRoles.Count; i++)
                {
                    fight.AttackRoles[i].AttackRange = Common.GetInstance().Sacked(attackrole.X, attackrole.Y);
                    if (fight.AttackRoles[i].isFightDoor)
                    {
                        fight.AttackRoles[i].isFightDoor = false;
                    }
                }
            }

            var rolevo = AddNewRoleVo(attackrole, moves);

            WarFightRoleVoAddEffect(rolevo, fight.Door.RoleId, (int)EffectFaceTo.Rival,
                                    type, attackrole.SoldierCount, fight.Door.SoldierCount, 0, 0, 0);
            //防守武将回归
            DefenseRolesBack(fight, moves);
        }
コード例 #2
0
ファイル: FightProcess.Attack.cs プロジェクト: Lantnr/MyTest
        /// <summary>
        /// 进攻武将攻打防守武将
        /// </summary>
        /// <param name="moves"></param>
        /// <param name="attackrole"></param>
        /// <param name="denfenserole"></param>
        /// <param name="fight"></param>
        private void AttackRolesFight(AttackRoles attackrole, WarMovesVo moves, DefenseRoles denfenserole, WarFight fight)
        {
            try
            {
                var condition = new List <int>();
                var rolevo    = AddNewRoleVo(attackrole, moves);
                //是否出发地形地形效果
                // var isArea = CheckArea(defrole, fight, attrole, rolevo);
                if (attackrole.isFirstAttack)
                {
                    condition.Add((int)WarFightCondition.FirstAttack);
                }
                condition.Add((int)WarFightCondition.Attack);
                CheckAttackRoleSkill(attackrole, condition, fight, denfenserole, rolevo, WarFightSkillType.Character);
                CheckAttackRoleSkill(attackrole, condition, fight, denfenserole, rolevo, WarFightSkillType.NinjaSkill);
                CheckAttackRoleSkill(attackrole, condition, fight, denfenserole, rolevo, WarFightSkillType.NinjaMystery);
                if (CheckAttackRoleSkill(attackrole, condition, fight, denfenserole, rolevo, WarFightSkillType.Skill)) //秘技释放以后气力值清零
                {
                    attackrole.qili = 0;
                }

                CheckAttackRoleSkill(attackrole, condition, fight, denfenserole, rolevo, WarFightSkillType.Katha);

                AttackRoleAttack(attackrole, denfenserole, rolevo);
                CheckDefenseRoleBlood(denfenserole, fight);
            }
            catch (Exception e)
            {
                XTrace.WriteLine("进攻武将技能出错{0}", e.Message);
                throw;
            }
        }
コード例 #3
0
ファイル: FightProcess.cs プロジェクト: Lantnr/MyTest
        /// <summary>
        /// 进攻武将加入到回合中
        /// </summary>
        /// <param name="role">进攻武将</param>
        /// <param name="moves">回合数据</param>
        /// <returns></returns>
        private WarFightRoleVo AddNewRoleVo(AttackRoles role, WarMovesVo moves)
        {
            var vo = moves.roles.FirstOrDefault(q => q.roleId == role.RoleId);

            if (vo == null)
            {
                vo = EntityToRoleVo(role);
                moves.roles.Add(vo);
            }

            return(vo);
        }
コード例 #4
0
ファイル: FightProcess.cs プロジェクト: Lantnr/MyTest
        /// <summary>
        /// 生成天气和五常
        /// </summary>
        /// <param name="fight"></param>
        /// <param name="vo"></param>
        /// <param name="times"></param>
        private void GetWeatherAndFive(WarFight fight, WarMovesVo vo, int times)
        {
            //回合开始  ,初始天气和五常
            fight.Times     = times;
            fight.Weather   = GetWeather(fight.Weather, times, fight.WeatherState);
            fight.FiveSharp = GetFive(fight.FiveSharp, times, fight.FiveState);
            vo.times        = times;
            vo.weather      = fight.Weather;
            vo.fiveSharp    = fight.FiveSharp;
#if DEBUG
            XTrace.WriteLine("天气:{0},五常{1}", vo.weather, vo.fiveSharp);
#endif
        }
コード例 #5
0
ファイル: FightProcess.Attack.cs プロジェクト: Lantnr/MyTest
        /// <summary>
        /// 验证武将是否需要攻击
        /// </summary>
        /// <param name="fight"></param>
        /// <param name="rid"></param>
        /// <param name="moves"></param>
        /// <returns>1.是否需要攻击 2.是否战斗结束</returns>
        private bool CheckIsAttack(WarFight fight, Int64 rid, WarMovesVo moves)
        {
            var attackrole = fight.AttackRoles.FirstOrDefault(q => q.RoleId == rid);

            if (attackrole == null)
            {
                return(false);
            }

            if (attackrole.isFightDoor) //是否攻打城门
            {
                AttackDoorFight(moves, attackrole, fight);
                return(true);;
            }
            if (attackrole.isFightCity) //是否攻打本丸
            {
                if (AttackHomeFight(moves, attackrole, fight))
                {
                    return(true);
                }
            }

            //验证进攻武将攻击范围内是否有防守武将
            var defrole = CheckIsDefenseRole(GetDefenseRoles(fight.DefenseRoles), attackrole, fight.Door, fight.City);

            if (defrole != null) //有防守武将
            {
                if (defrole.type == (int)WarFightRoleType.武将)
                {
                    AttackRolesFight(attackrole, moves, defrole, fight);
                }
                if (attackrole.isFightDoor) //是否攻打城门
                {
                    AttackDoorFight(moves, attackrole, fight);
                }
                if (attackrole.isFightCity) //是否攻打本丸
                {
                    AttackHomeFight(moves, attackrole, fight);
                }
                return(true);
            }
            return(false);
        }
コード例 #6
0
ファイル: FightProcess.Attack.cs プロジェクト: Lantnr/MyTest
        /// <summary>
        /// 攻打本丸
        /// </summary>
        /// <param name="moves"></param>
        /// <param name="attackrole"></param>
        /// <param name="fight"></param>
        private bool AttackHomeFight(WarMovesVo moves, AttackRoles attackrole, WarFight fight)
        {
            if (fight.City.SoldierCount == 0)
            {
                return(true);
            }
            var type = GetHurt(attackrole, fight.City);

            if (fight.City.SoldierCount < 0)
            {
                fight.City.SoldierCount = 0;
                return(true);
            }
            var rolevo = AddNewRoleVo(attackrole, moves);

            WarFightRoleVoAddEffect(rolevo, fight.City.RoleId, (int)EffectFaceTo.Rival,
                                    type, attackrole.SoldierCount, fight.City.SoldierCount, 0, 0, 0);
            return(false);
        }
コード例 #7
0
ファイル: FightProcess.Attack.cs プロジェクト: Lantnr/MyTest
        /// <summary>
        ///  进攻武将战斗验证
        /// </summary>
        /// <param name="fight">战斗实体</param>
        /// <param name="rid">防守武将id</param>
        /// <param name="moves">回合实体</param>
        /// <returns>1:战斗返回结果 2:是否战斗结束 true结束</returns>
        private Tuple <int, bool> CheckAttackRole(WarFight fight, Int64 rid, WarMovesVo moves)
        {
            var attackrole = fight.AttackRoles.FirstOrDefault(q => q.RoleId == rid);

            if (attackrole == null)
            {
                return(Tuple.Create(-1, false));
            }
            GetAttackRoleMoraleAndQili(attackrole);
            var tuple = CheckIsAttack(fight, rid, moves);

            if (!tuple)                           //没有防守武将
            {
                if (RolesMove(moves, fight, rid)) //武将移动成功
                {
                    if (fight.City.SoldierCount == 0)
                    {
                        return(Tuple.Create((int)ResultType.SUCCESS, true));
                    }
                    //验证是否有伏兵

                    var darkroles = CheckDarkRole(fight.DefenseRoles.Where(q => q.type == 4 && q.isShow == false).ToList(),
                                                  attackrole, fight.DefenseRange.Where(q => q.type == 4).ToList());
                    foreach (var darkrole in darkroles)
                    {
                        var isend = DefenseRolesFight(darkrole, moves, attackrole, fight);
                        if (isend)
                        {
                            return(Tuple.Create((int)ResultType.SUCCESS, true));
                        }
                    }
                }
            }
            else
            {
                if (fight.City.SoldierCount == 0)
                {
                    return(Tuple.Create((int)ResultType.SUCCESS, true));
                }
            }

            return(Tuple.Create((int)ResultType.SUCCESS, false));
        }
コード例 #8
0
        /// <summary>
        /// 防守武将攻打进攻武将
        /// </summary>
        /// <param name="defrole"></param>
        /// <param name="moves"></param>
        /// <param name="attrole"></param>
        /// <param name="fight"></param>
        private bool DefenseRolesFight(DefenseRoles defrole, WarMovesVo moves, AttackRoles attrole, WarFight fight)
        {
            try
            {
                if (defrole.SoldierCount <= 0 || attrole.SoldierCount <= 0)
                {
                    return(false);
                }
                var condition = new List <int>();
                var rolevo    = AddNewRoleVo(defrole, moves);

                if (defrole.type == (int)WarFightRoleType.伏兵) //伏兵
                {
                    condition.Add((int)WarFightCondition.DarkRoleFirstAttack);
                    WarFightRoleVoAddEffect(rolevo, defrole.RoleId, (int)EffectFaceTo.Me,
                                            (int)WarFightEffectVoType.伏兵, attrole.SoldierCount, defrole.SoldierCount, 0, 0, 0);
                    defrole.isShow = true;
                }
                //是否出发地形地形效果
                var isArea = CheckArea(defrole, fight, attrole, rolevo);
                if (defrole.isFirstAttack)
                {
                    condition.Add((int)WarFightCondition.FirstAttack);
                }
                condition.Add((int)WarFightCondition.Attack);
                CheckSkill(defrole, condition, fight, attrole, rolevo, WarFightSkillType.Character);
                CheckSkill(defrole, condition, fight, attrole, rolevo, WarFightSkillType.NinjaSkill);
                CheckSkill(defrole, condition, fight, attrole, rolevo, WarFightSkillType.NinjaMystery);
                CheckSkill(defrole, condition, fight, attrole, rolevo, WarFightSkillType.Skill);
                CheckSkill(defrole, condition, fight, attrole, rolevo, WarFightSkillType.Katha);
                //最后进攻
                DefenseRoleAttack(defrole, attrole, rolevo);
                var isend = CheckAttackRoleBlood(attrole, fight);
                return(isend);
            }
            catch (Exception e)
            {
                XTrace.WriteLine(e.Message);
                return(false);
            }
        }
コード例 #9
0
        /// <summary>
        ///  防守武将战斗验证
        /// </summary>
        /// <param name="fight">战斗实体</param>
        /// <param name="rid">防守武将id</param>
        /// <param name="moves">回合实体</param>
        /// <returns>1:战斗返回结果 2:是否战斗结束</returns>
        private Tuple <int, bool> CheckDefenseRole(WarFight fight, Int64 rid, WarMovesVo moves)
        {
            var defenserole = fight.DefenseRoles.FirstOrDefault(q => q.RoleId == rid);

            if (defenserole == null)
            {
                return(Tuple.Create(-1, false));
            }
            if (defenserole.type == (int)WarFightRoleType.伏兵)
            {
                return(Tuple.Create((int)ResultType.SUCCESS, false));
            }

            //士气和气力值改变
            GetDefenseRoleMoraleAndQili(defenserole);

            //验证本回合是否静止
            if (defenserole.stoptimes != null && defenserole.stoptimes.Contains(moves.times))
            {
                return(Tuple.Create((int)ResultType.SUCCESS, false));
            }
            var defenserange = fight.DefenseRange.Where(q => q.RoleId == rid).ToList();
            //验证防守范围内是否有武将
            var attrole = CheckIsAttackRole(defenserange, fight.AttackRoles);

            if (attrole == null)
            {
                return(Tuple.Create((int)ResultType.SUCCESS, false));
            }
#if DEBUG
            DisplayGlobal.log.Write(string.Format("武将{0}攻击武将{1}", rid, attrole.RoleId));
            DisplayGlobal.log.Write(string.Format("武将{0}被攻击前血量{1}", attrole.RoleId, attrole.SoldierCount));
#endif
            var isend = DefenseRolesFight(defenserole, moves, attrole, fight);
            return(isend ? Tuple.Create((int)ResultType.SUCCESS, true) : Tuple.Create((int)ResultType.SUCCESS, false));
        }
コード例 #10
0
ファイル: FightProcess.cs プロジェクト: Lantnr/MyTest
        /// <summary>
        /// 武将buff添加
        /// </summary>
        /// <param name="fight"></param>
        /// <param name="times"></param>
        private void GetRoleBuff(WarFight fight, WarMovesVo times)
        {
            times.buffs = new List <WarBuffVo>();
            foreach (var defenserole in fight.DefenseRoles)
            {
                if (defenserole.buffs == null || !defenserole.buffs.Any())
                {
                    continue;
                }

                defenserole.buffs.RemoveAll(q => q.times <= 1);
                var rid = defenserole.RoleId;
                times.buffs.AddRange(defenserole.buffs.Where(q => q.usertype != (int)WarFightSkillType.Area).Select(q => new WarBuffVo()
                {
                    type  = q.type,
                    value = q.value,
                    rid   = rid
                }));
            }
            foreach (var attrole in fight.AttackRoles)
            {
                if (attrole.buffs == null || !attrole.buffs.Any())
                {
                    continue;
                }

                attrole.buffs.RemoveAll(q => q.times <= 1);
                var rid = attrole.RoleId;
                times.buffs.AddRange(attrole.buffs.Where(q => q.usertype != (int)WarFightSkillType.Area).Select(q => new WarBuffVo()
                {
                    type  = q.type,
                    value = q.value,
                    rid   = rid
                }));
            }
        }
コード例 #11
0
ファイル: FightProcess.Attack.cs プロジェクト: Lantnr/MyTest
        /// <summary>
        /// 空闲武将回归本丸
        /// </summary>
        /// <param name="fight"></param>
        private void DefenseRolesBack(WarFight fight, WarMovesVo moves)
        {
            if (!fight.DefenseRoles.Any())
            {
                return;
            }
            for (int i = 0; i < fight.DefenseRoles.Count; i++)
            {
                if (fight.DefenseRoles[i].SoldierCount <= 0)
                {
                    continue;
                }
                //已经在回归位置
                if ((fight.DefenseRoles[i].X == 1 && fight.DefenseRoles[i].Y == 4) || (fight.DefenseRoles[i].X == 1 && fight.DefenseRoles[i].Y == 3) ||
                    (fight.DefenseRoles[i].X == 1 && fight.DefenseRoles[i].Y == 5) || (fight.DefenseRoles[i].X == 0 && fight.DefenseRoles[i].Y == 3) ||
                    (fight.DefenseRoles[i].X == 0 && fight.DefenseRoles[i].Y == 5))
                {
                    continue;
                }
                #region 回归本丸
                if (!fight.DefenseRoles.Any(q => q.X == 1 && q.Y == 3) &&
                    !fight.AttackRoles.Any(q => q.X == 1 && q.Y == 3))
                {
                    fight.DefenseRoles[i].X = 1; fight.DefenseRoles[i].Y = 3;
                    fight.DefenseRoles[i].buffs.Add(new WarFightSkillBuff()
                    {
                        type  = (int)WarFightEffectType.StopAction,
                        times = 2
                    });
                    //fight.DefenseRoles[i].type = (int)WarFightRoleType.武将;
                    var rolevo = AddNewRoleVo(fight.DefenseRoles[i], moves);
                    WarFightRoleVoAddEffect(rolevo, fight.DefenseRoles[i].RoleId, (int)EffectFaceTo.Me, (int)WarFightEffectVoType.伏兵, fight.DefenseRoles[i].SoldierCount, 0, 0, 0, 0);
                    continue;
                }
                if (!fight.DefenseRoles.Any(q => q.X == 1 && q.Y == 4) &&
                    !fight.AttackRoles.Any(q => q.X == 1 && q.Y == 4))
                {
                    fight.DefenseRoles[i].X = 1; fight.DefenseRoles[i].Y = 4;
                    fight.DefenseRoles[i].buffs.Add(new WarFightSkillBuff()
                    {
                        type  = (int)WarFightEffectType.StopAction,
                        times = 2
                    });
                    //fight.DefenseRoles[i].type = (int)WarFightRoleType.武将;
                    fight.DefenseRoles[i].isShow = true;
                    var rolevo = AddNewRoleVo(fight.DefenseRoles[i], moves);
                    WarFightRoleVoAddEffect(rolevo, fight.DefenseRoles[i].RoleId, (int)EffectFaceTo.Me, (int)WarFightEffectVoType.伏兵, fight.DefenseRoles[i].SoldierCount, 0, 0, 0, 0);
                    continue;
                }
                if (!fight.DefenseRoles.Any(q => q.X == 1 && q.Y == 5) &&
                    !fight.AttackRoles.Any(q => q.X == 1 && q.Y == 5))
                {
                    fight.DefenseRoles[i].X = 1; fight.DefenseRoles[i].Y = 5;
                    fight.DefenseRoles[i].buffs.Add(new WarFightSkillBuff()
                    {
                        type  = (int)WarFightEffectType.StopAction,
                        times = 2
                    });
                    // fight.DefenseRoles[i].type = (int)WarFightRoleType.武将;
                    fight.DefenseRoles[i].isShow = true;
                    var rolevo = AddNewRoleVo(fight.DefenseRoles[i], moves);
                    WarFightRoleVoAddEffect(rolevo, fight.DefenseRoles[i].RoleId, (int)EffectFaceTo.Me, (int)WarFightEffectVoType.伏兵, fight.DefenseRoles[i].SoldierCount, 0, 0, 0, 0);
                    continue;
                }
                if (!fight.DefenseRoles.Any(q => q.X == 0 && q.Y == 3) &&
                    !fight.AttackRoles.Any(q => q.X == 0 && q.Y == 3))
                {
                    fight.DefenseRoles[i].X = 0; fight.DefenseRoles[i].Y = 3;
                    fight.DefenseRoles[i].buffs.Add(new WarFightSkillBuff()
                    {
                        type  = (int)WarFightEffectType.StopAction,
                        times = 2
                    });
                    // fight.DefenseRoles[i].type = (int)WarFightRoleType.武将;
                    fight.DefenseRoles[i].isShow = true;
                    var rolevo = AddNewRoleVo(fight.DefenseRoles[i], moves);
                    WarFightRoleVoAddEffect(rolevo, fight.DefenseRoles[i].RoleId, (int)EffectFaceTo.Me, (int)WarFightEffectVoType.伏兵, fight.DefenseRoles[i].SoldierCount, 0, 0, 0, 0);
                    continue;
                }
                if (!fight.DefenseRoles.Any(q => q.X == 0 && q.Y == 5) &&
                    !fight.AttackRoles.Any(q => q.X == 0 && q.Y == 5))
                {
                    fight.DefenseRoles[i].X = 0; fight.DefenseRoles[i].Y = 5;
                    fight.DefenseRoles[i].buffs.Add(new WarFightSkillBuff()
                    {
                        type  = (int)WarFightEffectType.StopAction,
                        times = 2
                    });
                    //fight.DefenseRoles[i].type = (int)WarFightRoleType.武将;
                    fight.DefenseRoles[i].isShow = true;
                    var rolevo = AddNewRoleVo(fight.DefenseRoles[i], moves);
                    WarFightRoleVoAddEffect(rolevo, fight.DefenseRoles[i].RoleId, (int)EffectFaceTo.Me, (int)WarFightEffectVoType.伏兵, fight.DefenseRoles[i].SoldierCount, 0, 0, 0, 0);
                    continue;
                }
                #endregion

                fight.DefenseRange.RemoveAll(q => q.RoleId == fight.DefenseRoles[i].RoleId);
            }
            //防守范围重新初始
            fight.DefenseRange = Common.GetInstance().GetDefenseRangeInit(fight.DefenseRoles);
        }
コード例 #12
0
ファイル: FightProcess.cs プロジェクト: Lantnr/MyTest
        private void RemoveNewRoleVo(Int64 rid, WarMovesVo moves)
        {
            var vo = moves.roles.FirstOrDefault(q => q.roleId == rid);

            moves.roles.Remove(vo);
        }
コード例 #13
0
ファイル: FightProcess.cs プロジェクト: Lantnr/MyTest
        /// <summary>
        /// 进攻武将移动
        /// </summary>
        /// <param name="moves">回合</param>
        /// <param name="fight">合战实体</param>
        /// <param name="rid">武将id</param>
        private bool RolesMove(WarMovesVo moves, WarFight fight, Int64 rid)
        {
            var role = fight.AttackRoles.FirstOrDefault(q => q.RoleId == rid);

            if (role == null)
            {
                return(false);
            }
            var attackrole   = fight.AttackRoles;
            var defenseRoles = fight.DefenseRoles;

#if DEBUG
            XTrace.WriteLine("buff:{0}", role.buffs.Count);
#endif

            if (role.buffs.Any(q => q.type == (int)WarFightEffectType.StopAction))
            {
                return(false);
            }
            var rolevo = AddNewRoleVo(role, moves);
            if (rolevo.lines == null)
            {
                rolevo.lines = new List <PointVo>();
            }
            for (var i = 1; i <= role.speed; i++)
            {
                var p = role.Index + 1;
                if (p > role.Lines.Count - 1)
                {
                    return(false);
                }
                var r_x = role.Lines[p].x;
                var r_y = role.Lines[p].y;
                //该位置是否有其他进攻武将
                var c_1 = attackrole.Any(q => q.SoldierCount > 0 && q.X == r_x && q.Y == r_y);
#if DEBUG
                XTrace.WriteLine("role:{4} p:{0} x:{1} y:{2} c:{3}", p, r_x, r_y, c_1, role.RoleId);
#endif
                if (c_1)
                {
                    RemoveNewRoleVo(rid, moves); return(false);
                }
                //该位置是否有其他武将
                var c_2 = defenseRoles.Any(q => q.SoldierCount > 0 && q.X == r_x && q.Y == r_y);
                if (c_2)
                {
                    return(false);
                }
                //不能移动到本丸
                if (r_x == 0 && r_y == 4)
                {
                    RemoveNewRoleVo(rid, moves); return(false);
                }
                rolevo.lines.Add(new PointVo()
                {
                    x = r_x,
                    y = r_y,
                });
                role.Index++; role.X = r_x; role.Y = r_y;
                //进攻城门或者城门已破 进攻范围变为1格
                if (role.isFightDoor || fight.Door.SoldierCount == 0)
                {
                    role.AttackRange = Common.GetInstance().Sacked(role.X, role.Y);
                }
                else
                {
                    role.AttackRange = Common.GetInstance().GetAttackRangeInit(role.SoldierId, role.X, role.Y);
                }
                var isattack = CheckIsAttack(fight, rid, moves);
                if (isattack)
                {
                    return(true);
                }
            }
            return(true);
        }
コード例 #14
0
ファイル: FightProcess.cs プロジェクト: Lantnr/MyTest
        /// <summary>
        ///  通过战斗模型得到战斗过程
        /// </summary>
        /// <returns></returns>
        public Tuple <int, WarFightVo> GetFightProcess(WarFight fight)
        {
            WarFightVo vo = new WarFightVo();

            vo.moves  = new List <WarMovesVo>();
            vo.result = new WarFightResultVo();
            //初始武将
            GetFightRoles(fight, vo);
            //回合开始
            for (int i = 1; i < 51; i++)
            {
#if DEBUG
                XTrace.WriteLine("--------- 回合数:{0}", i);
#endif
                var times = new WarMovesVo();
                times.roles = new List <WarFightRoleVo>();
                GetRoleBuff(fight, times);
                //天气和五常生成
                GetWeatherAndFive(fight, times, i);

                GetDarkRoleShow(fight.DefenseRoles);
                //循环武将
                for (var j = 0; j < fight.AttackSort.Count; j++)
                {
#if DEBUG
                    var t = vo.roles.Where(m => m.roleId == fight.AttackSort[j].RoleId).FirstOrDefault();
                    XTrace.WriteLine("武将id:{0} name:{4} 攻击值:{1} x:{2} y:{3}",
                                     t.baseId, t.blood, t.point.x, t.point.y, t.roleName
                                     );
#endif
                    if (fight.AttackSort[j].isDie)
                    {
                        continue;
                    }
                    if (fight.AttackSort[j].type == 2) //防守武将
                    {
                        var tuple = CheckDefenseRole(fight, fight.AttackSort[j].RoleId, times);
                        if (tuple.Item1 < 0)
                        {
                            return(null);
                        }
                        if (tuple.Item2)
                        {
                            vo.moves.Add(times);
                            var defensedie = fight.DefenseSoldierCount - fight.DefenseRoles.Sum(q => q.SoldierCount);
                            var attackdie  = fight.AttackSoldierCount - fight.AttackRoles.Sum(q => q.SoldierCount);
                            RolesCountUpdate(fight.DefenseRoles, fight.AttackRoles);
                            vo.result.myDieCount    = attackdie;
                            vo.result.rivalDieCount = defensedie;
                            if (fight.City.SoldierCount <= 0)
                            {
                                vo.result.isWin = 1;
                            }
                            return(Tuple.Create((int)ResultType.SUCCESS, vo));
                        }
                    }
                    else
                    {
                        var tuple = CheckAttackRole(fight, fight.AttackSort[j].RoleId, times);
                        if (tuple.Item1 < 0)
                        {
                            return(null);
                        }
                        if (tuple.Item2)
                        {
                            vo.moves.Add(times);
                            var defensedie1 = fight.DefenseSoldierCount - fight.DefenseRoles.Sum(q => q.SoldierCount);
                            var attackdie1  = fight.AttackSoldierCount - fight.AttackRoles.Sum(q => q.SoldierCount);
                            RolesCountUpdate(fight.DefenseRoles, fight.AttackRoles);
                            if (fight.City.SoldierCount <= 0)
                            {
                                vo.result.isWin = 1;
                            }
                            vo.result.myDieCount    = attackdie1;
                            vo.result.rivalDieCount = defensedie1;
                            return(Tuple.Create((int)ResultType.SUCCESS, vo));
                        }
                    }
                }
                vo.moves.Add(times);
            }
            vo.result.isWin = 0;
            var defensedie2 = fight.DefenseSoldierCount - fight.DefenseRoles.Sum(q => q.SoldierCount);
            var attackdie2  = fight.AttackSoldierCount - fight.AttackRoles.Sum(q => q.SoldierCount);
            RolesCountUpdate(fight.DefenseRoles, fight.AttackRoles);
            vo.result.myDieCount    = defensedie2;
            vo.result.rivalDieCount = attackdie2;
            return(Tuple.Create((int)ResultType.SUCCESS, vo));
        }