public abstract void Excute(战斗结果 结果);
Example #2
0
        public List<战斗结果> 战斗结算()
        {
            if (!teamA战场.IsEnd)
                throw new Exception("战斗还没结束");

            战斗结果 teamA战斗结果 = new 战斗结果();
            战斗结果 teamB战斗结果 = new 战斗结果();

            bool isTeamA团灭 = true;
            bool isTeamB团灭 = true;
            bool isTeamAWin = false;
            foreach (var item in teamA战场.己方角色List)
            {
                if (!item.是否败走)
                {
                    isTeamA团灭 = false;
                    break;
                }
            }
            foreach (var item in teamA战场.敌方角色List)
            {
                if (!item.是否败走)
                {
                    isTeamB团灭 = false;
                    break;
                }
            }
            if (isTeamA团灭)
                isTeamAWin = false;
            else if (isTeamB团灭)
                isTeamAWin = true;
            else
                isTeamAWin = teamA战场.战果 > 0;

            teamA战斗结果.角色List = teamA战场.己方角色List;
            teamB战斗结果.角色List = teamA战场.敌方角色List;
            teamA战斗结果.回复兵力List = new List<int>();
            teamB战斗结果.回复兵力List = new List<int>();

            teamA战斗结果.Win = isTeamAWin;
            teamA战斗结果.角色List = teamA战场.己方角色List;
            foreach (var 角色 in teamA战场.己方角色List)
            {
                if (角色.是否败走)
                {
                    teamA战斗结果.回复兵力List.Add(0);
                    continue;
                }
                else
                {
                    int value = Convert.ToInt32(角色.最大兵力 * 常量.战斗后回复系数 / 100m);
                    if (value + 角色.兵力 > 角色.最大兵力)
                        value = 角色.最大兵力 - 角色.兵力;

                    teamA战斗结果.回复兵力List.Add(value);
                }
            }

            foreach (var 角色 in teamA战场.己方角色List)
            {
                if (!角色.是否败走)
                {
                    if (角色.被动技能 != null && 角色.被动技能 is 战斗结束被动技能)
                    {
                        战斗结束被动技能 战斗结束被动技能 = (战斗结束被动技能)角色.被动技能;
                        战斗结束被动技能.Excute(teamA战斗结果);
                    }

                    if (角色.特殊技能 != null && 角色.特殊技能 is 战斗结束被动技能)
                    {
                        战斗结束被动技能 战斗结束被动技能 = (战斗结束被动技能)角色.被动技能;
                        战斗结束被动技能.Excute(teamA战斗结果);
                    }
                }
            }

            teamB战斗结果.Win = !isTeamAWin;
            teamB战斗结果.角色List = teamA战场.敌方角色List;
            foreach (var 角色 in teamA战场.敌方角色List)
            {
                if (角色.是否败走)
                {
                    teamB战斗结果.回复兵力List.Add(0);
                    continue;
                }
                else
                {
                    int value = Convert.ToInt32(角色.最大兵力 * 常量.战斗后回复系数 / 100m);
                    if (value + 角色.兵力 > 角色.最大兵力)
                        value = 角色.最大兵力 - 角色.兵力;

                    teamB战斗结果.回复兵力List.Add(value);
                }
            }

            foreach (var 角色 in teamA战场.敌方角色List)
            {
                if (!角色.是否败走)
                {
                    if (角色.被动技能 != null && 角色.被动技能 is 战斗结束被动技能)
                    {
                        战斗结束被动技能 战斗结束被动技能 = (战斗结束被动技能)角色.被动技能;
                        战斗结束被动技能.Excute(teamB战斗结果);
                    }

                    if (角色.特殊技能 != null && 角色.特殊技能 is 战斗结束被动技能)
                    {
                        战斗结束被动技能 战斗结束被动技能 = (战斗结束被动技能)角色.被动技能;
                        战斗结束被动技能.Excute(teamB战斗结果);
                    }
                }
            }

            for (int i = 0; i < teamA战场.己方角色List.Count; i++)
                teamA战场.己方角色List[i].兵力 += teamA战斗结果.回复兵力List[i];

            for (int i = 0; i < teamA战场.敌方角色List.Count; i++)
                teamA战场.敌方角色List[i].兵力 += teamB战斗结果.回复兵力List[i];

            return new List<战斗结果>() { teamA战斗结果, teamB战斗结果 };
        }