Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 5 из 5

Тема: random

  1. #1
    Аватар для Osetin
    •Администратор•

    Статус
    Оффлайн
    Регистрация
    26.03.2013
    Адрес
    ♔Osetia, Vladikavkaz♔
    Сообщений
    3,439
    Репутация:
    1093 ±

    random

    Получение рандомного числа.

    Параметры:
    (max)
    max Диапазон значений (от 0 до этого значения минус один), которые могут быть возвращены.


    Возвращает Случайное число в диапазоне от 0 до макс-1.


    PHP код:
    new Float:RandomSpawn[][4] = 

        
    // Positions, (X, Y, Z and Facing Angle) 
        
    {-2796.98541224.818020.5429192.0335}, 
        {-
    2454.2170503.875930.0790267.2932}, 
        {-
    2669.7322, -6.08746.132889.8853
    }; 
    public 
    OnPlayerSpawn(playerid

        new 
    rand random(sizeof(RandomSpawn)); 
      
        
    // SetPlayerPos на рандомный позиции с нашего списка  
        
    SetPlayerPos(playeridRandomSpawn[rand][0], RandomSpawn[rand][1],RandomSpawn[rand][2]); 
      
        
    // SetPlayerFacingAngle рандомный угол  
        
    SetPlayerFacingAngle(playeridRandomSpawn[rand][3]); 
        return 
    1


  2. #2
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    669
    Репутация:
    236 ±
    У рандома есть некоторые фичи, например, если указать 0, то будут большие цифры и то же самое, если указать отрицательное число. Я это так починил

    PHP код:
    stock fix__random(max)
    {
        
    // если было изначально указано отрицательное число,
        
    if (max 0)
        {
            
    // сделаем число положительные
            
    max max * -1;
            
    // вернем число на единицу большее,
            // чтобы ноль исключить
            // и сделаем число отрицательным
            
    return (random(max) + 1) * -1;
        }
        
    // в других случаях
        // вернем число на единицу большее,
        // чтобы ноль исключить
        
    return random(max) + 1;
    }
    #if defined _ALS_random
        #undef random
    #else
        #define _ALS_random
    #endif
    #define random fix__random 
    Последний раз редактировалось Desulaid; 11.12.2015 в 15:57.

  3. #3
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,201
    Репутация:
    2590 ±
    Цитата Сообщение от Untonyst Посмотреть сообщение
    У рандома есть некоторые фичи, например, если указать 0, то будут большие цифры и то же самое, если указать отрицательное число. Я это так починил

    PHP код:
    stock fix__random(max)
    {
        
    // если был изначально указан ноль,
        // то и вернем ноль
        
    if (max == 0)
            return 
    0;
        
    // если было изначально указано отрицательное число,
        
    if (max 0)
        {
            
    // сделаем число положительные
            
    max max * -1;
            
    // вернем число на единицу большее,
            // чтобы ноль исключить
            // и сделаем число отрицательным
            
    return (random(max) + 1) * -1;
        }
        
    // в других случаях
        // вернем число на единицу большее,
        // чтобы ноль исключить
        
    return random(max) + 1;
    }
    #if defined _ALS_random
        #undef random
    #else
        #define _ALS_random
    #endif
    #define random fix__random 
    Это не баг, это фича. Так и было задумано, чтобы при нуле функция возвращала совершенно случайное число от cellmin (-2147483648) до cellmax (2147483647). Это самый простой способ получить случайное число из диапазона всех целочисленных значений (в т.ч. отрицательных), и его не нужно "чинить".
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  4. 2 пользователя(ей) сказали cпасибо:
    Glant (19.12.2015) VVWVV (11.12.2015)
  5. #4
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    669
    Репутация:
    236 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Это не баг, это фича. Так и было задумано, чтобы при нуле функция возаращала совершенно случайное число от cellmin (-2147483648) до cellmax (2147483647). Это самый простой способ получить случайное число из диапазона всех целочисленных значений (в т.ч. отрицательных), и его не нужно "чинить".
    Аа, я ну тогда можно убрать минус одно условие ;D

  6. #5
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,201
    Репутация:
    2590 ±
    Цитата Сообщение от Untonyst Посмотреть сообщение
    Аа, я ну тогда можно убрать минус одно условие ;D
    Ситуации бывают разные, и указание отрицательных чисел тоже может понадобиться, поэтому не следует вводить других в заблуждение о ненужности какой-либо части стандартного функционала. Вряд ли кто-то станет вызывать random с отрицательным числом неосознанно.

    В стандартной библиотеке языка C аналогичная функция rand() вообще не требует аргументов и возвращает случайное число (как random(0) в Pawn), а число из нужного диапазона получается из остатка от деления:
    PHP код:
    int x rand() % 42// Случайное число от 0 до 41. 
    По аналогии задумана и функция random в Pawn, разве что не нужно самому париться с делением, достаточно лишь указать число, как параметр функции. Если же делить ни на что не нужно - random(0), функция не станет делить на ноль число, полученное из системного таймера.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  7. 3 пользователя(ей) сказали cпасибо:
    Desulaid (11.12.2015) Glant (19.12.2015) VVWVV (11.12.2015)
 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •