c#对象函数调用

时间:2015-09-29 23:49:03

标签: c# oop game-engine

所以我开始学习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在这里工作。任何帮助将不胜感激。

3 个答案:

答案 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);