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

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

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

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

    • Популярное

    Рекомендуем

    • AMX Mod X
    • up.org.ua

    Наши друзья


  • Автор: Admin Дата: 31-08-2011, 17:15 Просмотров: 6933

    random_num Функция для получения случайного числа (целого)

    В последнее время в моде плагин "Лохотрон", в котором игроку предлагается рискнуть и с какой о вероятностью получить какой то приз или умереть.
    Как же сделать эту вероятность или получить случайно число от A до N?
    С этим вопросом легко справляется функция random_num

    Инфо из amxmodx.inc:
    /* Generates random integer from a to b. */
    native random_num(a,b);


    Синтаксис:
    random_num ( a,b )

    • a - Минимальное число
    • b - Максимальное число


    Пример:

    /* Plugin generated by AMXX-Studio */

    #include <amxmodx>
    #include <amxmisc>
    #include <colorchat>

    #define PLUGIN "Random integer"
    #define VERSION "1.0"
    #define AUTHOR "Admin"

    public plugin_init ( ){
        
        register_plugin ( PLUGIN, VERSION, AUTHOR )
        
        register_clcmd("say /random","random_integer")
        
    }
    public random_integer(id){
        
        new A = 0
        new B = 100
        new MyInteger
        
        MyInteger = random_num(A,B)
        
        //ColorChat(id,GREY,"[Random integer] ^1Random: ^4%d",MyInteger)
        
        if(MyInteger>75){
            
            ColorChat(id,RED,"[Random integer] Random: ^4%d ^1> 75",MyInteger)
            
        }else if(MyInteger>50 && MyInteger < 76 ){
            
            ColorChat(id,NORMAL,"[Random integer] Random: ^1 50 < ^4%d ^1< 76",MyInteger)
            
        }else if(MyInteger>25 && MyInteger <51){
            
            ColorChat(id,GREEN,"[Random integer] Random: ^1 25 < ^4%d ^1< 51",MyInteger)
            
        }else if(MyInteger<26){
            
            ColorChat(id,GREY,"[Random integer] Random: ^4%d ^1< 26",MyInteger)
        }
    }


    Описание:
    Так как с самого начала речь пошла о плагине "лохатрон", сделаем "сердце" плагина, а именно так что бы в зависимости от полученного числа выполнялись разные действия. Только у нас вероятность каждого из вариантов равна 25%, так как линейка результатов поделена на равные 4 части.
    Можно было поделить так:
    • Если MyInteger < 50 - Вероятность 50%
    • Если 50 =< MyInteger < 80 - Вероятность 30%
    • Если 80 =< MyInteger < 95 - Вероятность 15%
    • Если 95 =< MyInteger =< 100 - Вероятность 5%

    надеюсь все понять математику и знают, что числа < 5 ( меньше 5 ) это 0 1 2 3 4 ( не берем отрицательные), что бы включить сюда и 5, то нажно поставить меньше или равно =<5

    Как все это работает:
    После начала выполнения функции, которую вызывает команда say /random, мы регистрируем 3 переменные, первые 2 для задачи минимума и максимума числа,и одна для сохранения случайного числа получаемого с помощью функции random_num. Далее идет каскад условий в виде интервалов от числа до числа, и если полученное нами число совпадает с интервалом условия, ты выводим сообщение.
    Для наглядности все сообщения сделаны в разных цветах.

    Данная функция получает только Целое случайное число, если нужно получить дробное, то необходимо воспользоваться функцией random_float.
    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
    Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
    random_num Функция для получения случайного числа (целого)
    Алексей

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

    Можно ли как-то убрать совпадение чисел, вообщем чтобы число никогда не повторялось?
    Admin

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

    В функции - нет.
    Если тебе уж так надо - сделай случайное число от 0 до 1000000000000000000000000
    очень маленькая вероятность что повториться.

    Можно написать алгоритм который будет это делать и засунуть его в сток функцию, но это уже совсем другая история.
    --------------------
    sanya

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

    Цитата: Алексей
    Можно ли как-то убрать совпадение чисел, вообщем чтобы число никогда не повторялось?

    Цитата: Admin
    В функции - нет.
    Если тебе уж так надо - сделай случайное число от 0 до 1000000000000000000000000
    очень маленькая вероятность что повториться.

    Можно написать алгоритм который будет это делать и засунуть его в сток функцию, но это уже совсем другая история.


    Я больше чем уверен, что можно сделать рандом без повторений. Нужны только массив и функция. Сначала генерируем возрастающую последовательность(к примеру до 20), а потом делаем делаем рандом(20) и удаляем получивший элемент. И так до конца, каждый раз уменьшая максимальное значения рандома на единицу

    Информация

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

Реклама