Exemple #1
0
 private void attack(BattleEngine.Player.Player source, BattleEngine.Player.Player target)
 {
     string details = string.Format ("<u>Round {0}</u>: <i>{1}</i> is <b>attacking</b> <i>{2}</i>",
                                      this.round, source.Name, target.Name);
     this.BattleGui.ShowAttackDialog (details);
     Location sloc = this.GameMap.GetPlayerOnMap (source);
     Location tloc = this.GameMap.GetPlayerOnMap (target);
     double dist = sloc.DistanceTo (tloc);
     int range = source.GetAttribute ("Range").Current;
     if ((double)dist <= range)
     {
         int attackroll = source.ThrowForAttack ();
         int defenseroll = target.ThrowForDefense ();
         this.Console.ConsoleWrite (string.Format ("\t\"{0}\" attack rolls {1} at a distance of {2} with range {3}",
                                                   source.Name, attackroll, dist, range));
         this.Console.ConsoleWrite (string.Format (" : \"{0}\" defense rolls {1}", target.Name, defenseroll));
         if (attackroll >= defenseroll)
         {
             this.Console.ConsoleWrite (" HIT");
             int power = source.RollDamage ();
             this.Console.ConsoleWrite (string.Format (" for {0} damage", power));
             int armor = target.GetAttribute("Armor").Current;
             int damage = armor - power;
             if (damage < 0)
             {
                 target.TakeDamage (damage);
                 this.Console.ConsoleWriteLine(string.Format(" \"{0}\" took {1} damage leaving {2} armor",
                                                             target.Name, damage, target.GetAttribute("Armor").Current));
             }
             else
             {
                 this.Console.ConsoleWriteLine(string.Format(" \"{0}\" took no damage \"{1}\" could not penetrate armor of {2}",
                                                             target.Name, source.Name, target.GetAttribute ("Armor").Current));
             }
         }
         else
         {
             this.Console.ConsoleWriteLine (" MISSED");
         }
     }
     else
     {
         this.Console.ConsoleWriteLine (string.Format ("\tOUT OF RANGE: \"{0}\" is {1} meters away from \"{2}\"", target.Name, dist, source.Name));
         int move = source.GetAttribute ("Speed").Current;
         this.Console.ConsoleWriteLine (string.Format ("{0} closing {1} meters", source.Name, move));
         this.GameMap.MovePlayerToTarget (source, move, target);
     }
 }