狭路相逢勇者胜

来源:互联网 发布:淘宝上洗纹身的管用吗 编辑:程序博客网 时间:2024/05/01 10:17

描述:

有两个战士在战斗,每个人每回合攻击一次,直到其中一人的血量<=0。写一个方法来返回胜利者的名字。现有一个Fighter类,如下:

public class Fighter {  public string Name;  public int Health, DamagePerAttack;  public Fighter(string name, int health, int damagePerAttack) {    this.Name = name;    this.Health = health;    this.DamagePerAttack = damagePerAttack;  }}

例如:

declareWinner(new Fighter(“佐助”, 10, 2), new Fighter(“鸣人”, 5, 4), “佐助”) => “佐助”

佐助攻击鸣人; 鸣人剩余三点血.
鸣人攻击佐助; 佐助剩余六点血.
佐助攻击鸣人; 鸣人剩余一点血.
鸣人攻击佐助; 佐助剩余二点血.
佐助攻击鸣人: 鸣人血量为-1,已死亡. 佐助胜出.

MyCode:

public class Kata {  public static string declareWinner(Fighter fighter1, Fighter fighter2, string firstAttacker)   {    int h1 = fighter1.Health,h2 = fighter2.Health;    int a1 = fighter1.DamagePerAttack,a2 = fighter2.DamagePerAttack;    while(h1 > 0 && h2 > 0)    {      if(fighter1.Name == firstAttacker)      {        h2 = h2 - a1;        firstAttacker = fighter2.Name;      }      else      {        h1 = h1 - a2;        firstAttacker = fighter1.Name;      }    }    return h1 <= 0 ? fighter2.Name : fighter1.Name;  }}

CodeWar:

using System.Linq;public class Kata {  public static string declareWinner(Fighter fighter1, Fighter fighter2, string firstAttacker)   {      var fighters = new [] { fighter1, fighter2 };    var Attacker = fighters.Single(f => f.Name == firstAttacker);    var Defender = fighters.Single(f => f.Name != firstAttacker);    Defender.Health -= Attacker.DamagePerAttack;    if(Defender.Health <= 0)    {      return Attacker.Name;    }    return declareWinner(fighter1, fighter2, Defender.Name);  }}
0 0
原创粉丝点击