C # как изменить список <class> - PullRequest
0 голосов
/ 02 сентября 2011

Я делаю консольную RPG и довольно новичок в дженериках. Моя проблема в том, что я хочу, чтобы герой (хранящийся в универсальном Списке героев) атаковал монстра (хранящегося в универсальном Списке врагов). У меня проблема в том, чтобы заставить героя выбрать цель из моего универсального монстра, а затем изменить hpcurrent монстра. Это легко с одним монстром и героем, но по мере расширения игры у меня будет несколько типов монстров и героев; поэтому я хочу использовать кусок кода для моего героя, который может выбрать элемент из общего и изменить его статистику. Причина, по которой существует два дженерика, заключается в том, что мне легче увидеть, все ли герои или монстры мертвы.

Я выложу код для монстра (он идентичен коду героя, цифры просто разные):

class Orc : Character
{
    public Orc()
    {
        this.hpcurrent = 12;
        this.hpmax = 12;
        this.mpcurrent = 0;
        this.mpmax = 0;
        this.strength = 6;
        this.defense = 4;
        this.magicstrength = 0;
        this.magicdefense = 2;
        this.agility = 4;
        this.level = 3;
        this.isaliveBool = true;
        this.name = "Orc";
        this.weakness1 = "fire";
        this.weakness2 = "thunder";
        this.battlemove = null;
        this.typeofcharacter = "monster";
    }

Код для Списка монстров:

public List<Character> enemies()
    {
        List<Character> enemies = new List<Character>();
        enemies.Clear();
        enemies.Add(new Orc());
        return enemies;
    }

Ответы [ 3 ]

0 голосов
/ 02 сентября 2011

Вам необходимо добавить свойство идентификатора в ваш класс Character, чтобы идентифицировать конкретный вражеский объект и выполнить с ним какое-либо действие.Класс Guid хорошо подходит для этой цели.

0 голосов
/ 02 сентября 2011

Действительно не уверен, что вы пытаетесь достичь, но классы являются ссылочными типами в C #. Это означает, что если вы изменяете один и тот же объект противника за пределами коллекции, это изменение также отражается внутри коллекции. Что не ясно, как вы планируете использовать это. Какой объект владеет вашим списком врагов? Как вы планируете извлечь определенного врага из списка? Как только у вас есть враг, которого вы хотите из списка, обновления тривиальны.

0 голосов
/ 02 сентября 2011

вы можете использовать что-то вроде этого:

public List<Character> Enemies
{ 
   if (_Enemies == null)
   {
      _Enemies = new List<Character>(); 
      _Enemies.Clear(); 
      _Enemies.Add(new Orc()); 
   }
   return _Enemies; 
} 
private List<Character> _Enemies;

Тогда вы можете использовать так:

obj.Enemies[0].HP += 25;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...