2015-09-29 3 views
1

Итак, я начинаю изучать C#, и у меня возникают проблемы ... Я пытаюсь создать бестиарий для моей консоли rpg-игры, и я столкнулся с стеной. В моем классе монстров у меня есть конструктор классов для объектов-монстров, и у меня есть функция для печати данных в стиле бестиария.C# функция объекта, вызывающая

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); 
     } 

то у меня есть пустота, которая просит для Imput, а затем использует переключатель заявление, чтобы поставить вас вниз по цепочке, и в конечном итоге к нужной записи:

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; 
      } 
     } 

В конце концов вы получите эту цепочку который имеет функцию печати крыс. Теперь мой вопрос в том, где я могу определить крысу, чтобы заставить крысу работать. Любая помощь будет принята с благодарностью.

+0

так, как вы это должно быть хорошо, до тех пор, как крыса была объявлена и иналинизируется как «Монстр». Вам нужно «var rat = new Monster()» либо перед оператором switch, либо внутри него. – ryan

ответ

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(); 
     } 
    } 
} 

Это создаст объект крысы и заселить его. он добавит его в список монстров , а затем распечатает монстров.

Успехов

0

Как и с любой переменной, вы должны объявить его, прежде чем использовать его (ваш компилятор сообщит вам, если вы забудете об этом!). Так что этот код нормально:

 Monster rat = null; 
     switch (monsterchoice) 
     { 
      case 1: 
       rat.Mprint(); 
       break; 
      default: 
       ... 
     } 

Так это:

 switch (monsterchoice) 
     { 
      case 1: 
      { 
       Monster rat = null; 
       rat.Mprint(); 
       break; 
      } 
      default: 
       ... 
     } 

Второй очень вряд ли будет то, что вы хотите делать, как объявление вашей переменной в каждом случае заявление немного нечетное, но оно действительно. Теперь оба из них будут бросать NullReferenceException, потому что вы не установили переменную в фактический объект. Таким образом, эти линии должны фактически быть:

Monster rat = new Rat(); //Or Monster, depending on your class design 
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); 
Смежные вопросы