我试图创建一个非常基本的伤害计算器,但由于某种原因,当我运行程序并设置值时,结果为0。这是我的代码:
AbilityDamage.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1.Files
{
class AbilityDamage
{
static void Main()
{
Console.WriteLine("Enter ability name:");
string abilityName = Console.ReadLine();
Ability RocketGrab = new Ability();
Ability MegaInfernoBomb = new Ability();
Ability Cataclysm = new Ability();
Ability MysticShot = new Ability();
Ability SuperMegaDeathRocket = new Ability();
Ability Hemoplague = new Ability();
Ability SprayAndPray = new Ability();
Ability BusterShot = new Ability();
Ability AssaultAndBattery = new Ability();
Ability ExplosiveCask = new Ability();
Ability PiercingArrow = new Ability();
Ability Sear = new Ability();
if (abilityName == "Rocket Grab")
{
RocketGrab.AbilityDamageCalculator();
}
else if (abilityName == "Mega Inferno Bomb")
{
MegaInfernoBomb.AbilityDamageCalculator();
}
else if (abilityName == "Cataclysm")
{
Cataclysm.AbilityDamageCalculator();
}
else if (abilityName == "Mystic Shot")
{
MysticShot.AbilityDamageCalculator();
}
else if (abilityName == "Super Mega Death Rocket")
{
SuperMegaDeathRocket.AbilityDamageCalculator();
}
else if (abilityName == "Hemoplague")
{
Hemoplague.AbilityDamageCalculator();
}
else if (abilityName == "Spray and Pray")
{
SprayAndPray.AbilityDamageCalculator();
}
else if (abilityName == "Buster Shot")
{
BusterShot.AbilityDamageCalculator();
}
else if (abilityName == "Assault and Battery")
{
AssaultAndBattery.AbilityDamageCalculator();
}
else if (abilityName == "Explosive Cask")
{
ExplosiveCask.AbilityDamageCalculator();
}
else if (abilityName == "Piercing Arrow")
{
PiercingArrow.AbilityDamageCalculator();
}
else if (abilityName == "Sear")
{
Sear.AbilityDamageCalculator();
}
else
{
Console.WriteLine("Ability not recognized.");
}
RocketGrab.name = "Rocket Grab";
RocketGrab.baseDamage = 80;
RocketGrab.apRatio = 1;
MegaInfernoBomb.name = "Mega Inferno Bomb";
MegaInfernoBomb.baseDamage = 250;
MegaInfernoBomb.apRatio = 0.9;
Cataclysm.name = "Cataclysm";
Cataclysm.baseDamage = 200;
Cataclysm.adRatio = 1.5;
MysticShot.name = "Mystic Shot";
MysticShot.baseDamage = 35;
MysticShot.adRatio = 1;
MysticShot.apRatio = 0.2;
SuperMegaDeathRocket.name = "Super Mega Death Rocket";
SuperMegaDeathRocket.baseDamage = 125;
SuperMegaDeathRocket.adRatio = 0.5;
Hemoplague.name = "Hemoplague";
Hemoplague.baseDamage = 150;
Hemoplague.apRatio = 0.7;
SprayAndPray.name = "Spray and Pray";
SprayAndPray.baseDamage = 20;
BusterShot.name = "Buster Shot";
BusterShot.baseDamage = 300;
BusterShot.apRatio = 1.5;
AssaultAndBattery.name = "Assault and Battery";
AssaultAndBattery.baseDamage = 200;
AssaultAndBattery.adRatio = 1.4;
ExplosiveCask.name = "Explosive Cask";
ExplosiveCask.baseDamage = 200;
ExplosiveCask.apRatio = 1;
PiercingArrow.name = "Piercing Arrow";
PiercingArrow.baseDamage = 10;
PiercingArrow.adRatio = 1;
Sear.name = "Sear";
Sear.baseDamage = 80;
Sear.apRatio = 0.65;
}
}
}
在CalculateDamage.cs 中
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1.Files
{
class Ability
{
public double baseDamage;
public double apRatio;
public double adRatio;
public string name;
public void AbilityDamageCalculator()
{
Console.WriteLine("Enter your ap value:");
double ap = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Enter your ad value:");
double ad = Convert.ToDouble(Console.ReadLine());
double bonusDamage = apRatio * ap + adRatio * ad;
double totalDamage = baseDamage + bonusDamage;
Console.WriteLine(name + "deals " + totalDamage + " damage at level 1.");
}
}
}
如有任何帮助,我们将不胜感激!
所有的值都在main方法中设置。
当你有一个火箭抓取,它会执行
RocketGrab.AbilityDamageCalculator();
但是在这个方法中没有任何值。这两者都将为0,因此在相乘时返回0。
public double apRatio;
public double adRatio;
如果你想让它发挥作用,你必须创建一个合适的对象并设置比率的值。更好的做法是重新思考您的概念,并开始创建包含这些值的硬编码子类(或者考虑像数据库这样的数据源)。
当你真正为一个能力设置基本值和其他值时,你已经完成了计算。
在请求用户输入并执行计算之前,您似乎没有初始化您的能力值。
public double baseDamage;
public double apRatio;
public double adRatio;
public string name;
您从未为此变量设置值。因此
double bonusDamage = apRatio * ap + adRatio * ad;
double totalDamage = baseDamage + bonusDamage;
等于
double bonusDamage = 0 * ap +0* ad;
double totalDamage = 0 + bonusDamage;
这将是0。