所以我开始学习c#,我遇到了一些问题...我正在尝试为我的控制台RPG游戏创建一个动作,我遇到了一堵墙。在我的怪物类中,我有一个用于怪物对象的类构造函数,并且我有一个以bestiary样式打印出数据的函数。
public void Mprint()
{
Console.WriteLine(name);
Console.WriteLine("Class: " + mclass);
Console.WriteLine("HP: " + healthmax);
Console.WriteLine("Atk: " + atk);
Console.WriteLine("Exp drop: " + expdrop);
Console.WriteLine("Description: ");
Console.WriteLine(description);
}
然后我有一个空白,要求你的输入,然后使用一个开关语句让你走下链,最终到你想要的条目:
switch (monsterchoice)
{
case 1:
rat.Mprint();
break;
default:
Console.WriteLine();
Console.WriteLine("Make sure that you are using the number next to the name of the monster you choose.");
Console.ReadKey();
BestiaryBeast();
break;
}
}
最终你会进入具有鼠标打印功能的链条。现在我的问题是我在哪里定义老鼠来获得老鼠.Mprint在这里工作。任何帮助将不胜感激。
答案 0 :(得分:1)
早期......这让我退缩了。
假设您在控制台应用程序中
class Program
{
static void Main()
{
Monster rat = new Monster("a", "b");
List<Monster> monsters = new List<Monster> { rat };
foreach (var monster in monsters)
{
monster.Mprint();
}
}
}
这将创建一个鼠标对象并填充它。 它会将它添加到怪物列表中 然后将打印出怪物。
祝你好运答案 1 :(得分:0)
与任何变量一样,您必须在使用它之前声明它(编译器会告诉您是否忘记了这一点!)。所以这段代码很好:
Monster rat = null;
switch (monsterchoice)
{
case 1:
rat.Mprint();
break;
default:
...
}
这就是:
switch (monsterchoice)
{
case 1:
{
Monster rat = null;
rat.Mprint();
break;
}
default:
...
}
第二个不太可能是你想要做的事情,因为在每个case语句中声明你的变量有点奇怪,但它是有效的。现在这两个都将抛出NullReferenceException
,因为您没有将变量设置为实际对象。所以这些行应该实际上:
Monster rat = new Rat(); //Or Monster, depending on your class design
答案 2 :(得分:0)
一些建议;不要在类中嵌入类的使用者(例如,控制台窗口)。您的Monster
课程应该如下所示:
public class Monster
{
public string Name { get; private set; }
public int HitPoints { get; set; }
public string CharacterSheet
{
get
{
return Name + Environment.NewLine
+ "HP: " + HitPoints;
}
}
public Monster(string name, int hp)
{
Name = name;
HitPoints = hp;
}
}
然后你会用以下代码打印你的角色表:
Console.WriteLine(rat.CharacterSheet);