【发布时间】:2019-11-01 19:40:46
【问题描述】:
我目前正在制作一个简单的基于控制台的 RPG 地下城游戏,我对 C# 还很陌生,我在学校上过视觉基础课程,我已经玩了大约一个月的 unity。
我的问题是,我正在编写玩家将遇到的第一场战斗。我已经构建了一些武器,我希望能够用单独的字符串调用人员当前的武器,例如,我当前的武器是匕首,或者对象 wp1,我希望我的“武器”附加到 wp1以某种方式,这样我就可以做类似的事情,
Console.WriteLine("Damage: " + weapon.dmg);而不是硬编码wp1.dmg,这样在游戏制作过程后期,当玩家有机会购买更好的武器时,我可以用变量来做,例如玩家现在有短剑(wp2)
private string weapon = "wp2";
...
Console.WriteLine("Damage: " + weapon.dmg);
我试图简单地说,
String weapon = wp1;
然后调用 Weapon.dmg,但这不起作用,因为它认为我正在尝试调用 武器.dmg,而不是 wp1.dmg
//players base damage
int damage = 0;
//players strength attribute
int strength = 0;
//weapon constructor
class wp
{
public int dmg;
public int cost;
public string name;
public wp(int d, int c, string n)
{
dmg = d;
cost = c;
name = n;
}
}
//three weapons that are constructed
wp wp1 = new wp(1, 25, "dg");
wp wp2 = new wp(3, 100, "ss");
wp wp3 = new wp(5, 250, "ls");
//the current weapon string
public string weapon = "wp1";
void attack()
{
//calculates damage based off of the players damage, strength, and weapon
int newDamage = damage * strength + (weapon.dmg);
}
预期结果: 程序应该使用玩家当前武器的伤害值
实际结果,程序试图找到武器的dmg值,但这是不可能的,因为“武器”只是一个字符串,所以会抛出错误
【问题讨论】:
-
不要将当前武器存储为
string.. 将其存储为wp类型。 -
...然后将当前武器 (
wp) 对象传递给 Attack 方法,以便每次都使用当前武器 -
今天是初学者学习好习惯的好日子。不要成为“原始痴迷”的牺牲品,尤其是弦乐。初学者倾向于养成使用基本类型(如字符串)的习惯。不。您收到错误是因为这是错误的做法。
-
在我们查看您的代码时:也要养成正确命名事物的习惯。如果您输入
class Weapon而不是class wp,您不会死得更早。类和方法应该是CasedLikeThis。永远不要公开领域;改为使用公共财产。现在就学习好习惯,以后就不必再改了。 -
另外,不要养成不良的命名习惯。给事物起描述性的名称。
wp应该是Weapon。dmg应该是Damage。假装你正在阅读别人的代码,看看你是否能根据他们的名字推断出什么东西。如果你不能,你选择了一个坏名字。 (编辑)是的,Eric Lippert 说的。