Хранение экземпляра / объекта в массиве - PullRequest
0 голосов
/ 21 июня 2019

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

Я безуспешно пытался искать объекты в массивах.Я безуспешно пытался изменить массивы с Элемента на Объект на основе.

class Firearm : Weapon
    {
        public Firemode firemode;
        public int maxCapacity;
        public int curCapacity;
        public Type type;
        public Caliber caliber;

        public Firearm (string _name, float _damage, int _range, Firemode 
_firemode, int _maxCapacity, int _curCapacity, Type _type, Caliber 
_caliber)
        {
            name = _name;
            damage = _damage;
            range = _range;
            firemode = _firemode;
            maxCapacity = _maxCapacity;
            curCapacity = _curCapacity;
            type = _type;
            caliber = _caliber;
        }

        public void FirearmStats()
        {
            Console.WriteLine("\n Name: {0}\n Damage: {1}\n Range: {2}\n 
Firemode: {3}\n Max Capacity: {4}\n Current Capacity: {5}", name, damage, 
range, firemode, maxCapacity, curCapacity);
        }
    }


static void Main(string[] args)
    {
        Random numberGenerator = new Random();
        //Pistols
        Firearm m9 = new Firearm("Beretta M9A1", 34.0F, 30, 
Firemode.SemiAutomatic, 15, numberGenerator.Next(1, 16), Type.Pistol, 
Caliber.nine);
        ....
        Item[] inventory = new Item[14];
        Item[] equipped = new Item[0];
        .....
        equipped[0] = m9;
        Console.WriteLine("\nYou find a {0}", equipped[0].name);

        //issue here with equipped[0]^^^
        equipped[0].FirearmStats();

        //and here ^^^^^
        player.Command();
    }

Код серьезности Описание Ошибка состояния подавления строки файла проекта CS1061 «Program.Item» не содержит определения для «FirearmStats»и не удалось найти доступный метод расширения «FirearmStats», принимающий первый аргумент типа «Program.Item» (отсутствует директива using или ссылка на сборку?) ZombieConsoleGame E: \ Projects Visual Studio \ ZombieConsoleGame \ ZombieConsoleGame \ Program.cs158 Н / Д

1 Ответ

1 голос
/ 21 июня 2019

Я предполагаю, что класс Weapon наследуется от вашего Item класса.

Поскольку массив equipped имеет тип Item, вам необходимо навести Item на Оружие , прежде чем вы сможете вызвать любой из методов / функций на Оружии. класс.

Измените эту строку (где вы выделили проблему) equipped[0].FirearmStats();

быть:

((Firearm)equipped[0]).FirearmStats();

При этом Предмет будет превращен в Огнестрельное оружие , а затем позволит вам использовать его в качестве Огнестрельного оружия.

Edit:

Кроме того, строка:

Item[] equipped = new Item[0];

Создает переменную Array с нулевыми элементами в ней, для хранения предметов, которыми вы экипированы, не было выделено места. Измените ноль в [0] на положительное число, которое вы уже использовали в предыдущей строке для инвентарь (Item[] inventory = new Item[14];)

...