Использование Функции Random()

Уроки по скриптингу

Moderator: SJplayer

Avatar
Topic author
Дим M
Администратор
Администратор
Posts: 1319
With us: 7 years 5 months

Использование Функции Random()

Post #1by Дим » 17 May 2013, 19:26

Использование Функции Random()
Автор: manok

1. Предисловие.
Для начала мы должны понять для чего предназначена данная функция. Random в переводе с английского — случайный. Следовательно, данная функция возвращает нам случайное значение.

2. Как работает?
Информация в данном пункте чисто для расширения Вашего кругозора. Числа получаемые с помощью данной функции псевдослучайные, и вычисляются на основе формулы с некоторым начальным значением, которое может быть как функция времени. Также одним из алгоритмов генератора случайных чисел является линейный конгруэнтный метод

3. Как применять данную функцию?
Рассмотрим несколько примеров:
1. Создадим команду, которая выводит случайное число от 1 до 10 (включая 1 и 10):

Code: Select all

if(strcmp("/random", cmdtext, true, 10) == 0)
{
new string[64]; // создаем строку, которая выведется на экран.
format(string, 64, "Случайное число: %d", random(10)+1); /* заполняем строку. 
Немного объясню как все выполняется. Функция random() ведет отсчет от нуля. Т.е. random(10) вывело бы число от 0 до 9. Следовательно, мы прибавили единицу, чтобы строка заполнилась числом от 1 до 10. */
SendClientMessage(playerid, 0xFFFFFF, string); // выводим сообщение пользователю
return 1;
}


На основе этого примера можно сделать азартные игры (например бросание костей, блек-джек и многое другое).

2. Рассмотрим другой пример. Сделаем рандомный телепорт (сейчас много тем про это):

Code: Select all

if (strcmp("/randomtp", cmdtext, true, 10) == 0)
{
switch(
random(4)) // генерируем число от 0 до 3 (включая)
{
case 0: SetPlayerPos(playerid, X1,Y1,Z1); // телепортируем игрока в координаты X1,Y1,Z1
case 1: SetPlayerPos(playerid, X2,Y2,Z2); // ...
case 2: SetPlayerPos(playerid, X3,Y3,Z3); // ...
case 3: SetPlayerPos(playerid, X4,Y4,Z4); /* аналогично. Внимание: это не действующие координаты, вы должны заменить их на свои */
}
return 1;
}


На основе этого примера можно сделать, например, телепорт в рандомную камеру при аресте, рандомный спавн или телепорт на рандомную ДМ-зону.
И еще, если вы используете более 10 разных координат для телепортов лучше всего использовать массив. Например рандомный спавн из grandlarc'a :

Code: Select all

new Float:gRandomSpawns_LosSantos[][4] = {
{
1751.1097,-2106.4529,13.5469,183.1979}, // El-Corona - Outside random house
{2652.6418,-1989.9175,13.9988,182.7107}, // Random house in willowfield - near playa de seville and stadium
{2489.5225,-1957.9258,13.5881,2.3440}, // Hotel in willowfield - near cluckin bell
{2689.5203,-1695.9354,10.0517,39.5312}, // Outside stadium - lots of cars
{2770.5393,-1628.3069,12.1775,4.9637}, // South in east beach - north of stadium - carparks nearby
{2807.9282,-1176.8883,25.3805,173.6018}, // North in east beach - near apartments
{2552.5417,-958.0850,82.6345,280.2542}, // Random house north of Las Colinas
{2232.1309,-1159.5679,25.8906,103.2939}, // Jefferson motel
{2388.1003,-1279.8933,25.1291,94.3321}, // House south of pig pen
{2481.1885,-1536.7186,24.1467,273.4944}, // East LS - near clucking bell and car wash
{2495.0720,-1687.5278,13.5150,359.6696}, // Outside CJ's house - lots of cars nearby
{2306.8252,-1675.4340,13.9221,2.6271}, // House in ganton - lots of cars nearby
{2191.8403,-1455.8251,25.5391,267.9925}, // House in south jefferson - lots of cars nearby
{1830.1359,-1092.1849,23.8656,94.0113}, // Mulholland intersection carpark
{2015.3630,-1717.2535,13.5547,93.3655}, // Idlewood house
{1654.7091,-1656.8516,22.5156,177.9729}, // Right next to PD
{1219.0851,-1812.8058,16.5938,190.0045}, // Conference Center
{1508.6849,-1059.0846,25.0625,1.8058}, // Across the street of BANK - lots of cars in intersection carpark
{1421.0819,-885.3383,50.6531,3.6516}, // Outside house in vinewood
{1133.8237,-1272.1558,13.5469,192.4113}, // Near hospital
{1235.2196,-1608.6111,13.5469,181.2655}, // Backalley west of mainstreet
{590.4648,-1252.2269,18.2116,25.0473}, // Outside "BAnk of San Andreas"
{842.5260,-1007.7679,28.4185,213.9953}, // North of Graveyard
{911.9332,-1232.6490,16.9766,5.2999}, // LS Film Studio
{477.6021,-1496.6207,20.4345,266.9252}, // Rodeo Place
{255.4621,-1366.3256,53.1094,312.0852}, // Outside propery in richman
{281.5446,-1261.4562,73.9319,305.0017}, // Another richman property
{790.1918,-839.8533,60.6328,191.9514}, // Mulholland house
{1299.1859,-801.4249,84.1406,269.5274}, // Maddoggs
{1240.3170,-2036.6886,59.9575,276.4659}, // Verdant Bluffs
{2215.5181,-2627.8174,13.5469,273.7786}, // Ocean docks 1
{2509.4346,-2637.6543,13.6453,358.3565} // Ocean Docks spawn 2
};

public OnPlayerSpawn(playerid)
{
new randSpawn = random(sizeof(gRandomSpawns_LosSantos));
SetPlayerPos(playerid,
                 gRandomSpawns_LosSantos[randSpawn][0],
                 gRandomSpawns_LosSantos[randSpawn][1],
                 gRandomSpawns_LosSantos[randSpawn][2]);
SetPlayerFacingAngle(playerid,gRandomSpawns_LosSantos[randSpawn][3]);
return 1;


3. Сделаем совсем "безобидную" функцию с помощью рандома. Каждую секунду цвет машины в которой сидит игрок будет меняться.
Добавляем к глобальным переменным:

Code: Select all

new changecolortimer;


Далее:

Code: Select all

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
    KillTimer(changecolortimer);
    changecolortimer = SetTimerEx("changecolor",1000,1,"i",vehicleid);
    return 1;
}


И добавляем фунцию смены цвета с нашим рандомом:

Code: Select all

forward changecolor(i);
public changecolor(i)
{
ChangeVehicleColor(i, random(120), random(120)); // меняет color1 и color2 на случайные цвета от 0 до 120 
return 1;
}


Можно привести еще тысячи подобных примеров, но все равно невозможно показать все прелести рандома, не попробовав самому составить пару функций, используя его.
i love you mxIni Mysql

! ! !


Return to “Уроки”

Who is online

Users browsing this forum: 2 guests