我正在进行基于文本的冒险,并希望在我的播放器类中设置function
,通过接受string
(对于变量)来增加班级中的变量名称)和int
(金额)
class player
{
private int stat1 = 1;
private int stat2 = 2;
public void statincrease(string name, int amount)
{
//variable called by string// += amount
}
private void main()
{
player.statincrease(stat2,5);
}
}
对不起,如果我没有很好地解释我的自我,但对此的任何帮助都会非常感激
答案 0 :(得分:2)
我可以告诉你这是新的,所以我会很容易。
有几种方法可以解决你所问的问题。
我的第一个建议是为你需要的每个名字创建一个方法,所以你有shieldStatIncrease(int amount)而不是字符串名称; swordStatIncrease(int amount);等
如果您不想这样做,那么您可以使用if或switch语句
public void statincrease(string name, int amount)
{
switch(name)
{
case "stat1":
//Increase stat1
break;
case "stat2":
//Increase stat2
break; //etc...
}
}
如果这不是您正在谈论的内容,那么我道歉......让我知道,我会调整我的答案。
现在,如果您正在尝试获得真正的技术,您可以使用反射来查找属性名称并为您调整变量...但我不建议这样做;特别是不适合游戏,因为反射有更多的开销。
答案 1 :(得分:1)
这将是推荐的方法,而不是您要求的方法:创建用户可以访问和调整的公共属性。如果要强制值保持在某个特定范围内,可以在属性设置器中包含一些数据验证:
class Player
{
public int Stat1 { get; set; }
public int Stat2 { get; set; }
public Player()
{
Stat1 = 1;
Stat2 = 2;
}
}
然后这个类的用户会做类似的事情:
var player = new Player();
player.Stat2 += 5; // Increase Stat2 by 5
或者,您可以保持成员私有并创建一个更改值的方法,但我认为这不太常见:
class Player
{
private int stat1 = 1;
private int stat2 = 2;
public void AdjustStat2(int adjustmentIncrement)
{
stat2 += adjustmentIncrement;
}
}
最后,为了回答您的原始问题,您可以让用户键入字符串并对变量名称进行匹配,但这对您的班级用户来说是一个痛苦的过程,因为他们不能只键入{{1}并获取他们有权访问的属性的智能感知列表:
Player.