public static void DoingUnitAttackData(TeamAttackingData data) { int c_inj = 0, c_death = 0; int t_inj = 0, t_death = 0; foreach (var item in data.UnitAttackingDatas) { if (item == null) { continue; } BattleTools.DoDameger(item); //BUFF Time_3 BattleTools.DoUnitBuff(item, EffectTimeType.Time_3); c_inj += item.data.Injury; c_death += item.data.Death; t_inj += item.toData.Injury; t_death += item.toData.Death; } UiIndex.AddEventText(string.Format("对敌人造成{0}点伤害,击伤{1}人,击杀{2}人", data.DoDamger, t_inj, t_death)); UiIndex.AddEventText(string.Format("己方受到{0}点伤害,受伤{1}人,死亡{2}人\n", data.ByDamger, c_inj, c_death)); }
///index 0-2 player 3-5 Enemy public void SetRankText(int index, Team team) { BattleTools.SetRankText(ranks[index], team, (Rank, Team) => { RegistTeamButton(Rank, Team); }); // Rank rank = ranks[index]; // rank.Hero_1_Text.text = ""; // rank.Hero_2_Text.text = ""; // rank.Army_Text_0.text = ""; // rank.Army_Text_1.text = ""; // if (team != null) // { // if (team.MainHero != null) rank.Hero_1_Text.text = team.MainHero.Name; // if (team.MinorHero != null) rank.Hero_2_Text.text = team.MinorHero.Name; // TeamSummaryData dic = team.GetSummary(); // if (dic.Maxhp == 0) return; // string str; // str = string.Format("Hp:{0}/{1}\n攻击:{2}\n人数:{3}", dic.Hp, dic.Maxhp, dic.Ad, dic.Count); // rank.Army_Text_0.text = str; // str = string.Format("士气:{0}\n防御:{1}\n受伤:{2}", dic.Morale, dic.Ed, dic.Injury); // rank.Army_Text_1.text = str; // RegistTeamButton(rank, team); // } teams[index] = team; }
public void Init() { if (!UiIndex.gameObject.activeSelf) { UiIndex.gameObject.SetActive(true); } BattleTools.DoTeamBuff(Player, Enemy, null, EffectTimeType.Time_0); //初始化BUFF Time_0 //UiIndex = GameObject.FindObjectOfType<BattlefieldUiIndex>(); UiIndex.m_AttackButton.onClick.RemoveAllListeners(); UiIndex.m_EscapeButton.onClick.RemoveAllListeners(); UiIndex.m_AttackButton_Text.text = "进攻"; UiIndex.m_EscapeButton_Text.text = "撤退"; UiIndex.ClearEventText(); UiIndex.HideTableWindow(); UiIndex.HideInfoWindow(); UpdataBattleRanksText(); UiIndex.ClearEventText(); UiIndex.AddEventText("战斗开始,请下令进攻!"); UiIndex.m_AttackButton.onClick.AddListener(Attack); UiIndex.m_EscapeButton.onClick.AddListener(Escape); UiIndex.m_Skill_1_Button.onClick.AddListener(() => { SkillButtonOnClick(0); }); UiIndex.m_Skill_2_Button.onClick.AddListener(() => { SkillButtonOnClick(1); }); UiIndex.m_Skill_3_Button.onClick.AddListener(() => { SkillButtonOnClick(2); }); }
public static void SetDamager(int all_damger, int all_t_damger, TeamSummaryData team_dic, TeamSummaryData toteam_dic, List <UnitAttackingData> teamDatas) { float injpr = BattleTools.GetInjurePr(all_t_damger, team_dic, toteam_dic); float t_injpr = BattleTools.GetInjurePr(all_damger, toteam_dic, team_dic); int all_Ed_damger = 0, avg_Ed_damger = 0, all_t_Ed_damger = 0, avg_t_Ed_damger = 0; if (team_dic != null) { all_Ed_damger = BattleTools.GetEdDamager(all_t_damger, team_dic); //减少的总伤害 avg_Ed_damger = (int)((float)all_Ed_damger / (float)team_dic.UnitCount); //平均减少的伤害 所有单位共享防御 } if (toteam_dic != null) { all_t_Ed_damger = BattleTools.GetEdDamager(all_damger, toteam_dic); avg_t_Ed_damger = (int)((float)all_t_Ed_damger / (float)toteam_dic.UnitCount); } foreach (var item in teamDatas) //更新伤害 { item.data.DoDamger = Mathf.Clamp(item.data.DoDamger - avg_t_Ed_damger, 0, int.MaxValue); item.toData.DoDamger = Mathf.Clamp(item.toData.DoDamger - avg_Ed_damger, 0, int.MaxValue); item.data.InjuryPr = injpr; item.toData.InjuryPr = t_injpr; } }
private void SetTeamToTeamData(TeamAttackingData teamData) { TeamSummaryData team_dic = teamData.Team_dic; TeamSummaryData toteam_dic = teamData.ToTeam_dic; List <UnitAttackingData> unitDatas = teamData.UnitAttackingDatas; //buff1 例如调整特定单位对特定单位的伤害 调整伤害的BUFF Time_1 foreach (var item in unitDatas) { BattleTools.DoUnitBuff(item, EffectTimeType.Time_1); } int all_damger = BattleTools.GetDameger(unitDatas); //造成总伤害 int all_t_damger = BattleTools.GetByDameger(unitDatas); //对方的造成总伤害 // 此处调整受伤率 // 根据各种因素调整伤害 SetDamager(all_damger, all_t_damger, team_dic, toteam_dic, unitDatas); //buff3 例如调整特定单位对特定单位的保护效果 真实伤害 调整受到伤害的BUFF Time_2 foreach (var item in unitDatas) { BattleTools.DoUnitBuff(item, EffectTimeType.Time_2); } teamData.DoDamger = BattleTools.GetDameger(unitDatas); //总实际伤害 teamData.ByDamger = BattleTools.GetByDameger(unitDatas); }
public void SetDistentDamger(TeamAttackingData[,] team_attack_datas) { //玩家对敌人调整距离伤害 for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (team_attack_datas[i, j] == null) { continue; } int locIndex = i; //当前队伍编号 int locToIndex = j; //当前敌方队伍编号 bool isToteam = false; Army army = Player.army; TeamAttackingData[] toTeamAttackingData = new TeamAttackingData[3]; for (int ic = 0; ic < 3; ic++) { toTeamAttackingData[ic] = team_attack_datas[locIndex, ic]; } foreach (var item in team_attack_datas[locIndex, locToIndex].UnitAttackingDatas) { BattleUnitData unitData = item.data; BattleTools.DealWithDistent(unitData, locIndex, locToIndex, toTeamAttackingData, army, isToteam); } } } //敌人对玩家调整距离伤害 for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (team_attack_datas[j, i] == null) { continue; } int locIndex = i; //当前队伍编号 int locToIndex = j; //当前敌方队伍编号 bool isToteam = true; Army army = Enemy.army; TeamAttackingData[] toTeamAttackingData = new TeamAttackingData[3]; for (int ic = 0; ic < 3; ic++) { toTeamAttackingData[ic] = team_attack_datas[ic, locIndex]; } foreach (var item in team_attack_datas[locToIndex, locIndex].UnitAttackingDatas) { BattleUnitData unitData = item.toData; BattleTools.DealWithDistent(unitData, locIndex, locToIndex, toTeamAttackingData, army, isToteam); } } } }
static void Main(string[] args) { var aInts = new[] { 1, 2, 3, 4, 5 }; var bInts = new[] { 6, 7, 8, 9, 10 }; var genBaseTeamA = BattleTools.GenBaseTeam(aInts, BelongTeam.A); var genBaseTeamB = BattleTools.GenBaseTeam(bInts, BelongTeam.B); var battleGround = new BattleGround(genBaseTeamA.Concat(genBaseTeamB)); var goBattle = battleGround.GoBattle(); Console.Out.WriteLine($"result::{goBattle}"); }
public override void DoEffect(string skillName, King king, King toking, BattleData battleData) { int damager = int.Parse(Values[0]); List <TeamAttackingData> team_attack_datas = new List <TeamAttackingData>(); foreach (var team in toking.army.team) { if (team == null) { continue; } if (team.GetBattleCount() == 0) { continue; } TeamAttackingData teamData = new TeamAttackingData(); List <UnitAttackingData> list = new List <UnitAttackingData>(); TeamSummaryData data = team.GetSummary(); list = BattleContorl.CreateSkillToUnitData(skillName, damager, team, data, battleData); //调整伤亡率 BattleContorl.SetDamager(damager, 0, null, data, list); //buff3 例如调整特定单位对特定单位的保护效果 真实伤害 调整受到伤害的BUFF Time_2 foreach (var unitdata in list) { BattleTools.DoUnitBuff(unitdata, EffectTimeType.Time_2); } teamData.DoDamger = BattleTools.GetDameger(list); team_attack_datas.Add(teamData); teamData.UnitAttackingDatas = list; } foreach (var item in team_attack_datas) { BattleContorl.DoingUnitAttackData(item); } //BUFF 战后BUFF Time_4 foreach (var item in team_attack_datas) { BattleTools.DoTeamBuff(king, toking, item, EffectTimeType.Time_4); } }
public void Attack() { TeamAttackingData[,] team_attack_datas = new TeamAttackingData[3, 3]; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { team_attack_datas[i, j] = CeateAttackingData(Player.army.team[i], Enemy.army.team[j], (j + i + 1), Round, this); } } foreach (var item in team_attack_datas) { if (item != null) { foreach (var iitem in item.UnitAttackingDatas) { iitem.battleData.AllTeamAttackDatas = team_attack_datas; } } } //此处根据攻击距离调整伤害 SetDistentDamger(team_attack_datas); foreach (var item in team_attack_datas) { if (item != null) { SetTeamToTeamData(item); } } UiIndex.AddEventText("--{ 回合-" + Round + " }--"); for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (team_attack_datas[i, j] == null) { continue; } if (team_attack_datas[i, j].DoDamger <= 0 && team_attack_datas[i, j].ByDamger <= 0) { continue; } UiIndex.AddEventText("[己方队伍" + (i + 1) + "] - [敌方队伍" + (j + 1) + "]"); DoingUnitAttackData(team_attack_datas[i, j]); } } UpdataBattleRanksText(); //BUFF 战后BUFF Time_4 foreach (var item in team_attack_datas) { BattleTools.DoTeamBuff(Player, Enemy, item, EffectTimeType.Time_4); } DorV(); Round++; }
public void UpdataRanksText() { BattleTools.SetRankText(Ranks[0], Player.army.team[0], (Rank, Team) => { }); BattleTools.SetRankText(Ranks[1], Player.army.team[1], (Rank, Team) => { }); BattleTools.SetRankText(Ranks[2], Player.army.team[2], (Rank, Team) => { }); }