Использование случайных числ в Pawn скриптинге

Description: Основы скриптинга
Moderator: SJplayer

Prezident M
Topic author, Ефрейтор
Ефрейтор
Avatar
Prezident M
Topic author, Ефрейтор
Ефрейтор
Posts: 28
Joined: 9 Jul 2013
With us: 7 years 9 months

#1by Prezident » 17 Jan 2014, 21:00

Этот код будет генерировать случайное число.

Code: Select all

random(number); 


Однако в большинстве компьютерных языков, все числа начинаются с 0, так что если сделать так:

Code: Select all

random(10); 


будет выбрано число из: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

Если вы не хотите видеть 0 в результате, то должны использовать этот код:

Code: Select all

random(number) + 1


Таким образом, если случайное число равно 0, то результатом будет 0 + 1= 1. Если случайное число равно 9, то в результате 9 + 1= 10.

Y_Less сделал код, который лучше делает случайное число:

Code: Select all

stock randomEx(minmax)
{        
    new 
rand random(max-min)+min;    
    return 
rand;


Пример использования:

Code: Select all

CMD:lotto(playeridparams[])
{
    new 
rand random(10) + 1
    new 
number// новая переменная "number", чтобы хранить данные 
   
    
if(sscanf(params,"i"number)) // sscanf.
    
{
         
SendClientMessage(playerid0xFF0000AA"/lotto [1-10]"); //если игрок набрали не цифровой номер
    
}
    else 
// если он не ошибся, то продолжаем
    
{
        if ( 
number 10 || number 1)  // если он набрал /lotto 11 или /lotto 0 или /lotto 1243
        
{
            
SendClientMessage(playerid0xFF0000AA"Выбери номер от 1-10"); // сообщение об ошибке.
        
}
        else 
// Если число его между 1 и 10, то продолжаем дальше
        
{
            if (
number == rand)  // Если он выиграл - случайное число совпадает с числом которое выбрал игрок
            
{
                
SendClientMessage(playerid0x33AA33AA"Вы выиграли!!");
                
GivePlayerMoney(playerid1000000); // даём мани
                
SetPlayerScore(playeridGetPlayerScore(playerid) + 1); //прибавим score.
            
}
            else
            {
                if( 
number != rand// Если число не совпало..
                
{
                    
SendClientMessage(playerid0xFF0000AA"Вы проиграли"); 
                }
            }
        }
    }
    return 
1;


По желанию можете изменить код как хотите. К примеру - при проигрыше отнять денег :cry:

! ! !


Дим M
Администратор
Администратор
Avatar
Дим M
Администратор
Администратор
Posts: 1449
Joined: 5 Apr 2013
With us: 8 years

#2by Дим » 17 Jan 2014, 22:29

Нормальный урок +
i love you mxIni Mysql

SJplayer M
Модератор
Модератор
Avatar
SJplayer M
Модератор
Модератор
Posts: 195
Joined: 25 May 2013
With us: 7 years 10 months

#3by SJplayer » 18 Jan 2014, 10:26

Главное доходчиво

Layk M
Прапорщик
Прапорщик
Avatar
Layk M
Прапорщик
Прапорщик
Posts: 173
Joined: 4 Jun 2013
With us: 7 years 10 months

#4by Layk » 18 Jan 2014, 20:31

Для новичков в самый раз
Image

LILU M
Подполковник
Подполковник
Avatar
LILU M
Подполковник
Подполковник
Posts: 468
Joined: 5 Apr 2013
With us: 8 years

#5by LILU » 18 Jan 2014, 21:14

Раньше бы такой урок, а то всё самому приходилось додумывать, хотя это и не плохо

Mario_Ferro
Avatar
Mario_Ferro
Posts: 2
Joined: 5 Nov 2014
With us: 6 years 5 months

#6by Mario_Ferro » 5 Nov 2014, 20:49

Лото взял для основы, спасибо!

Mario_Ferro
Avatar
Mario_Ferro
Posts: 2
Joined: 5 Nov 2014
With us: 6 years 5 months

#7by Mario_Ferro » 6 Nov 2014, 8:19

Подредактировал команду lotto.

Code: Select all

CMD:lotto(playeridparams[])
{
    new 
rand random(10) + 1;
    new 
number;

    if(
sscanf(params,"i"number))
    {
         
SendClientMessage(playerid0xFF0000AA"/lotto [1-10]");
         if(
PlayerInfo[playerid][pCash] < 2000) return SCM(playeridCOLOR_WHITE"У Вас недостаточно денег");
    }
    else
    {
        if ( 
number 10 || number 1)
        {
            
SendClientMessage(playerid0xFF0000AA"Выберите номер из списка [1-10]");
        }
        else
        {
            if (
number == rand)
            {
                
SendClientMessage(playerid0x33AA33AA"Вы выиграли 10.000$! Они были зачислены Вам на банковский счёт");
                
PlayerInfo[playerid][pBank] += 10000;
                
SetPlayerScore(playeridGetPlayerScore(playerid) + 1);
            }
            else
            {
                if( 
number != rand)
                {
                    
SendClientMessage(playerid0xFF0000AA"К сожалению, Вы проиграли.");
                    
SCM(playerid0xFF0000AA"За билет вы потратили 2.000$");
                    
TransferMoney(playerid,-1,2000);
                }
            }
        }
    }
    return 
true;

Prezident M
Topic author, Ефрейтор
Ефрейтор
Avatar
Prezident M
Topic author, Ефрейтор
Ефрейтор
Posts: 28
Joined: 9 Jul 2013
With us: 7 years 9 months

#8by Prezident » 6 Nov 2014, 11:26

Mario_Ferro wrote:Подредактировал команду lotto

Ну тогда добавь её в команды


  • Similar Topics
    Replies
    Views
    Last post

Return to “Основы”

Who is online (over the past 5 minutes)

Users browsing this forum: 1 guest