Главная | Комментарии | О проекте
Чтение RSS
Суперсайт
Главная Контакты Карта сайта Добавить в избранное
  • Кто OnLine

    Всего на сайте: 6
    Гостей: 4
    Пользователи: - отсутствуют
    Роботы: Mail Ru, Yandex Bot

    Опрос пользователей

    Для какого мода Вы пишите плагины?

    • Популярное

    Рекомендуем

    • AMX Mod X
    • up.org.ua

    Наши друзья


  • Автор: Monstr™ Дата: 29-03-2012, 14:32 Просмотров: 7615

    Урок 16. Работа с Двумерным и Трехмерным массивами

    Многомерные массивы довольно часто используется в больших работах и бывают просто необходимы.
    Больше трехмерного на сколько я знаю не существует.

    Двумерный массив не сильно отличается от простого.
    В каждой ячейки простого массива 1 место для записи числа, символа.

    Так Двумерный массив дает в 1 ячейке больше места, то есть больше одного это уже зависит от того сколько вы укажите.
    Покажу на картинке так как думаю меня не все поняли.
    Урок 16. Работа с Двумерным и Трехмерным массивами


    Я создал двумерный массив с тремя ячейками в трех.
    Как видите массив преобразовался в каждую ячейку добавились еще три.
    Вот как это выглядит в коде.
    new iMassive[3][3] = 
    {
        {1, 2, 3}, //iMassive[0]
        {4, 5, 6}, //iMassive[1]
        {7, 8, 9}  //iMassive[2]
    };


    Расскажу про трехмерный массив.
    Он повторяет такие же действия что и двумерный.
    То есть в двумерном мы ставили в каждую ячейку еще три, а в трехмерном будет
    2 ячейки в каждой по 2 и еще в которых по 2 еще 2.
    Рассмотрим на картинке, у кого хорошо развито логическое мышление поймет,
    хотя мне и то было сложновато.
    Урок 16. Работа с Двумерным и Трехмерным массивами


    Видим трехмерный массив.
    В 2 ячейки добавили еще 2 и в 2 добавленные еще по 2.
    Вот как это выглядит в коде.
    new iMasive[2][2][2] = 
    {
        {
            {
                1,
                2
            },
            
            {
                3,
                4
            }
        },
        
        {
            {
                5,
                6
            },
            
            {
                7,
                8
            }
        }
    };

    //или

    new Massive[2][2][2] =
    {
        {{1, 2}, {3, 4}},
        {{5, 6}, {7, 8}}
    };


    На этом теория законченна, перейдем к примерам:

    Двумерный массив:
    /* Plugin generated by AMXX-Studio */

    #include <amxmodx>
    #include <amxmisc>

    #define PLUGIN "New Plug-In"
    #define VERSION "0.1"
    #define AUTHOR "Mon[str]"

    enum _:INFO_SCORE
    {
        FRAGS = 0,
        DEATHS    //1
    };

    //Объявим двумерный массив с размеом 33, 2
    new g_iInfo[33][INFO_SCORE];

    public plugin_init()
    {
        register_plugin(PLUGIN, VERSION, AUTHOR);
        
        //Зарегистрируем евент смерти
        register_event("DeathMsg", "Event_DeathMessage", "a");
        
        //Зарегистрируем команду для показа нашей информации
        register_clcmd("say /score", "score");
    }

    public client_connect(id)
    {
        //Обнуляем при коннекте
        g_iInfo[id][FRAGS] = 0;
        g_iInfo[id][DEATHS] = 0
    }

    public Event_DeathMessage()
    {
        new iKiller = read_data(1);
        new iVictim = read_data(2);
        
        //Плюсуем фраги убившему
        g_iInfo[iKiller][FRAGS]++;
        //Плюсуем смерти погибшему
        g_iInfo[iVictim][DEATHS]++;
    }

    public client_disconnect(id)
    {
        //Обнуляем при дисконнекте
        g_iInfo[id][FRAGS] = 0;
        g_iInfo[id][DEATHS] = 0
    }

    public score(id)
    {
        //Выводим
        client_print(id, print_chat, "Your Frags: %d, Your Deaths: %d", g_iInfo[id][FRAGS], g_iInfo[id][DEATHS])
        
        //Блокируем команду в чат
        return 1;
    }

    Этот код будет считать ваши смерти и убийства и выводить при желании.
    Грубо говоря для каждого игрока по 2 ячейки это убийства и смерти.

    Трехмерный:
    /* Plugin generated by AMXX-Studio */

    #include <amxmodx>
    #include <amxmisc>

    #define PLUGIN "New Plug-In"
    #define VERSION "0.1"
    #define AUTHOR "Mon[str]"

    #define    IS_HEDSHORT        0
    #define    IS_SUICIDE        0
    #define    NORM            1

    enum _:SCORE
    {
        FRAGS = 0,
        DEATHS    //1
    };

    //Объявим трехмерный массив с размеом 33, 2, 2
    new g_iInfo[33][SCORE][2];

    public plugin_init()
    {
        register_plugin(PLUGIN, VERSION, AUTHOR);
        
        //Зарегистрируем евент смерти
        register_event("DeathMsg", "Event_DeathMessage", "a");
        
        //Зарегистрируем команду для показа нашей информации
        register_clcmd("say /score", "score");
    }

    public client_connect(id)
    {
        //Обнуляем при коннекте
        g_iInfo[id][FRAGS][IS_HEDSHORT] = 0;
        g_iInfo[id][FRAGS][NORM] = 0;
        g_iInfo[id][DEATHS][IS_SUICIDE] = 0;
        g_iInfo[id][DEATHS][NORM] = 0;
    }

    public Event_DeathMessage()
    {
        new iKiller = read_data(1);
        new iVictim = read_data(2);
        new is_headshort = read_data(3);
        
        if(is_headshort)
            g_iInfo[iKiller][FRAGS][IS_HEDSHORT]++;
        
        else
            g_iInfo[iKiller][FRAGS][NORM]++;
            
        if(iVictim == iKiller)
            g_iInfo[iVictim][DEATHS][IS_SUICIDE]++;
        
        else
            g_iInfo[iVictim][DEATHS][NORM]++
    }

    public client_disconnect(id)
    {
        //Обнуляем при дисконнекте
        g_iInfo[id][FRAGS][IS_HEDSHORT] = 0;
        g_iInfo[id][FRAGS][NORM] = 0;
        g_iInfo[id][DEATHS][IS_SUICIDE] = 0;
        g_iInfo[id][DEATHS][NORM] = 0;
    }

    public score(id)
    {
        //Выводим
        client_print(id, print_chat, "Your Frags: %d, HeadShort: %d; Your Deaths: %d, Suicide: %d", g_iInfo[id][FRAGS][NORM], g_iInfo[id][FRAGS][IS_HEDSHORT], g_iInfo[id][DEATHS][NORM], g_iInfo[id][DEATHS][IS_SUICIDE])
        
        //Блокируем команду в чат
        return 1;
    }

    Этот код похож на предыдущий, но в него добавились еще одни цифры, это сколько раз вы убили в голову и сколько раз вы совершили самоубийство.
    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
    Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
    Урок 16. Работа с Двумерным и Трехмерным массивами
    FellomoN

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    Сложновато, спасибо за урок =).
    Monstr™

    29.09.2011
    ICQ: 631967458
    Публикаций: 12
    Комментариев: 22
    Репутация: -  0  +

    FellomoN всегда пожалуйста fellow
    sOynd

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    #define IS_HEDSHORT 0
    #define IS_SUICIDE 0
    Monstr™

    29.09.2011
    ICQ: 631967458
    Публикаций: 12
    Комментариев: 22
    Репутация: -  0  +

    sOynd что то не так?
    arwel

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    Нет ничего сложного. Масив в масиве масива в масиве :D
    sOynd

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    Monstr™, все норм, я слепой feel
    Flash

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    Я все это в башке с координатами ассоциирую, то есть каждую клеточку в вымышленном пространстве(прямая, плоскость , параллелепипед) занимает какое-то значение, советую новичкам делать также - путаницы меньше будет.
    Valer4

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    А сравнивать массивы можно только циклами или есть какая-то функция?
    2391063

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    Хм, по мне дак удобнее делать несколько обычных массивов)
    GranTurismo

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    Как вычислить размер ячейки mas[1] В трёхмерном?
    sizeof mas[1] - нельзя
    Ответ если можно, то дублировать в ЛС.

    Информация

    Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
Наверх

Реклама