Как проверить, существует ли объект в массиве, который находится в глобальном классе в C # - PullRequest
0 голосов
/ 05 августа 2011

Я создаю игру, в которой есть глобальный (статический) класс с именем MedGameController.В моем классе у меня есть два массива из пятнадцати объектов, каждый из которых содержит логику для каждого игрока.В игре игроки переходят в форму, где они видят свои уже созданные юниты и имеют кнопки для создания большего количества юнитов.Я не знаю, как проверить, существуют ли текущие единицы, поэтому я не могу даже создать одну единицу.Как я могу проверить, существует ли экземпляр моего класса модуля в массиве?Массив единиц должен иметь область видимости, которая включает две, может быть, три формы, поэтому я создал их в глобальном классе.Вот глобальный класс:

static class MedGameController      
{
    static int ply1pts;
    static int ply2pts;
    Squad[] ply1squads = new Squad[15];
    Squad[] ply2squads = new Squad[15];

    public static int SetPly1Pts
    {
        get { return ply1pts; }
        set { ply1pts = value; }
    }

    public static int SetPly2Pts
    {
        get { return ply2pts; }
        set { ply2pts = value; }
    }

    public static int SquadSetUp
    {
        get { return squadcreation; }
        set { squadcreation = value; }
    }
    public static void Player1Squads
    {
        This is where I think i'm supposed to check if they exist then if it doesn't then I create the instance of the squad class
    }
}

}

1 Ответ

1 голос
/ 05 августа 2011

Попробуйте это:

if (ply1Squads.Length == 0)
{
    for (int i = 0; i < 15; i++)
    {
        ply1Squads[i] = new Squad();
    }
}

Вы уже заявили, что ply1Squads имеет 15 Squad объектов, так что это просто вопрос инициализации объектов в этой точке.

Вы можете сделать то же самое для ply2Squads.

Кстати, вам также нужно объявить ply1Squads и ply2Squads как static, поскольку статические классы не могут иметь членов экземпляра:

static Squad[] ply1Squads = new Squad[15];
static Squad[] ply2Squads = new Squad[15];

По умолчанию это будут приватные переменные, поэтому вам также понадобятся свойства для этих двух массивов:

public static Squad[] Ply1Squads
{
    get
    {
        return ply1Squads;
    }
    set
    {
        ply1Squads = value;
    }
}

public static Squad[] Ply2Squads
{
    get
    {
        return ply2Squads;
    }
    set
    {
        ply2Squads = value;
    }
}

Дополнительные мысли

Если ваша цель разработки состоит в том, чтобы MedGameController обрабатывать всю информацию, касающуюся отрядов, я бы отошел от того, что вы представляете , - создание дублирующих методов для каждого Squad массива (т. е. Player1Squads). Вместо этого передайте некоторый флаг, сообщающий контроллеру, какой массив использовать, например:

public void CreateSquads(int playerNum)
{

    select (playerNum)
    {
        case 1:
            for (int i = 0; i < 15; i++)
            {
                ply1Squads[i] = new Squad();
            }
            break;
        case 2:
            for (int i = 0; i < 15; i++)
            {
                ply2Squads[i] = new Squad();
            }
            break;
        default:
            // Handle wrong number here
            break;
    }
}

Это (очень маленький) шаг рефакторинга. Я бы придумал список вещей, которые вы хотите, чтобы контроллер делал, а затем выяснил, как избежать отображения 1-1 каждой функции в оба массива.

Надеюсь, это имеет какой-то смысл и дает вам направление. У меня есть еще несколько идей, которые щекочут мой мозг, но я пока не могу вытащить их вперед. Если я это сделаю, я добавлю больше, если вам интересно (какие еще два или два редактирования после первой полдюжины, верно? :)).

...