Есть у меня 6 игроков и у каждого в начале игры должен появится персонаж в 12 возможных точках. Как сделать рандом, чтобы не спавнились 2 и больше игроков в одном месте

Принятый ответ

Если перевести выше сказанное
Да что там переводить то?
//! zinc
library Spawn {
    rect RCT[];

    function onInit(){
        integer i, j, k, t, arr[];
        real x, y;
        rect rct;
        
        RCT[0] = gg_rct_Spawn00;
        RCT[1] = gg_rct_Spawn01;
        RCT[2] = gg_rct_Spawn02;
        RCT[3] = gg_rct_Spawn03;
        RCT[4] = gg_rct_Spawn04;
        RCT[5] = gg_rct_Spawn05;
        RCT[6] = gg_rct_Spawn06;
        RCT[7] = gg_rct_Spawn07;
        RCT[8] = gg_rct_Spawn08;
        RCT[9] = gg_rct_Spawn09;
        RCT[10] = gg_rct_Spawn10;
        RCT[11] = gg_rct_Spawn11;
        
        k = 10;
        for(0 <= i < k){
            arr[i] = i;
        }
        
        for(0 <= i < k) {
            j = GetRandomInt(0, k-1);
            t = arr[i];
            arr[i] = arr[j];
            arr[j] = t;
        }
        
        for(0 <= i < 6){
            rct = RCT[arr[i]];
            x = GetRectCenterX(rct);
            y = GetRectCenterY(rct);
            CreateUnit(Player(0), 'hfoo', x, y, GetRandomReal(0, 360));
        }
        
        rct = null;
    }
}
//! endzinc
Только k = 10;, замените на k = 12;, а то я чтот незаметил(
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
10
5 лет назад
Отредактирован LordDracula
0
Можно так: заполни массив областями и рандомным числом от 0 до кол-во областей-1 бери область спавна, потом смести все области начиная от выбранной рандомно до их кол-во-1. В конце уменьшить кол-во областей на 1.
Ну и рандомное число бери от 0 до кол-во областей-1. После смещения последнюю область обнуляй
1
29
5 лет назад
1
LordDracula, а можно просто перемешать массив)
//! zinc
library Shuffle {
    function onInit(){
        integer i, j, k, t, arr[];
        
        k = 10;
        for(0 <= i < k){
            arr[i] = i;
        }
        
        for(0 <= i < k) {
            j = GetRandomInt(0, k-1);
            t = arr[i];
            arr[i] = arr[j];
            arr[j] = t;
        }
        
        for(0 <= i < k){
            BJDebugMsg(I2S(arr[i]));
        }
    }
}
//! endzinc
1
13
5 лет назад
1
Если перевести выше сказанное
Целочисленная мах= 12 (максимальное кол. областей)
Область[1-мах] (установка областей)
Целочисленная рандом = случайное число от 1 до 12
Создать героя в область[рандом]
Область[рандом] = область [мах]
мах = мах - 1
0
29
5 лет назад
Отредактирован nazarpunk
0
Если перевести выше сказанное
Да что там переводить то?
//! zinc
library Spawn {
    rect RCT[];

    function onInit(){
        integer i, j, k, t, arr[];
        real x, y;
        rect rct;
        
        RCT[0] = gg_rct_Spawn00;
        RCT[1] = gg_rct_Spawn01;
        RCT[2] = gg_rct_Spawn02;
        RCT[3] = gg_rct_Spawn03;
        RCT[4] = gg_rct_Spawn04;
        RCT[5] = gg_rct_Spawn05;
        RCT[6] = gg_rct_Spawn06;
        RCT[7] = gg_rct_Spawn07;
        RCT[8] = gg_rct_Spawn08;
        RCT[9] = gg_rct_Spawn09;
        RCT[10] = gg_rct_Spawn10;
        RCT[11] = gg_rct_Spawn11;
        
        k = 10;
        for(0 <= i < k){
            arr[i] = i;
        }
        
        for(0 <= i < k) {
            j = GetRandomInt(0, k-1);
            t = arr[i];
            arr[i] = arr[j];
            arr[j] = t;
        }
        
        for(0 <= i < 6){
            rct = RCT[arr[i]];
            x = GetRectCenterX(rct);
            y = GetRectCenterY(rct);
            CreateUnit(Player(0), 'hfoo', x, y, GetRandomReal(0, 360));
        }
        
        rct = null;
    }
}
//! endzinc
Только k = 10;, замените на k = 12;, а то я чтот незаметил(
Загруженные файлы
Принятый ответ
0
23
5 лет назад
0
какие вы странные! Я бы место 3 цикла уменшил на 1 цикл...
0
29
5 лет назад
0
pro100master:
какие вы странные! Я бы место 3 цикла уменшил на 1 цикл...
Код в студию))
0
10
5 лет назад
0
NazarPunk:
ну у Borodach в 1 цикл получится
0
29
5 лет назад
Отредактирован nazarpunk
0
LordDracula:
NazarPunk:
ну у Borodach в 1 цикл получится
Только он не работает

Хотя ошибаюсь((
//! zinc
library Spawn {
    rect RCT[];

    function onInit(){
        integer i, j, max = 11;
        
        RCT[0] = gg_rct_Spawn00;
        RCT[1] = gg_rct_Spawn01;
        RCT[2] = gg_rct_Spawn02;
        RCT[3] = gg_rct_Spawn03;
        RCT[4] = gg_rct_Spawn04;
        RCT[5] = gg_rct_Spawn05;
        RCT[6] = gg_rct_Spawn06;
        RCT[7] = gg_rct_Spawn07;
        RCT[8] = gg_rct_Spawn08;
        RCT[9] = gg_rct_Spawn09;
        RCT[10] = gg_rct_Spawn10;
        RCT[11] = gg_rct_Spawn11;
        
        for(0 <= i < 6){
            j = GetRandomInt(0, max);
            CreateUnit(
                Player(0),
                'hfoo',
                GetRectCenterX(RCT[j]),
                GetRectCenterY(RCT[j]),
                GetRandomReal(0, 360)
            );
            RCT[j] = RCT[max];
            max = max - 1;
        }
    }
}
//! endzinc
Загруженные файлы
0
37
5 лет назад
0
Круто, что все начали на zinc писать. К рефорджу подучу)
2
29
5 лет назад
Отредактирован nazarpunk
2
ScorpioT1000:
Круто, что все начали на zinc писать.
Все это кто?
0
37
5 лет назад
Отредактирован ScorpioT1000
0
NazarPunk, кроме тебя, видимо, никто наработки и не пилит больше))
Я бы предложил сделать менеджер пакетов для вц3, типа composer или npm, как раз успеем к рефорджу.
Типа чтобы we подсасывал нужные пакеты из сети.
Но для этого надо апнуть синтаксис
0
29
5 лет назад
0
кроме тебя, видимо, никто наработки и не пилит больше))
Я бы предложил сделать менеджер пакетов для вц3, типа composer или npm
Вроди бы в Wurst такое делают. но это не точно
2
30
5 лет назад
2
но это не точно
Точно.
0
37
5 лет назад
0
Как вы предлагаете переносить на вурст старые скрипты на других диалектах
Чтобы оставить комментарий, пожалуйста, войдите на сайт.