Перейти к содержимому


Фотография

Случайное число


Лучший Ответ TankiSD , 06 September 2015 - 15:01

Я не совсем понял вопрос, но когда-то давно, на АрмА2, я пилил миссию с командованием, где команды отдавались через кнопки и всё такое.

И вот так искался центр экрана\куда смотрит мышка, если мне не изменяет память. 

Хотя скорее всего, скинул не то, что надо. 

Надо ведь позицию мышки вычислить?


//
// Упс, в начале надо подключить:
//

#define x(a) ((a) select 0)
#define y(a) ((a) select 1)
#define z(a) ((a) select 2)

//
// И еще, один момент выяснился, worldToScreen может возвращать пустой массив, если проекция невозможна. Так что добавил проверку:
//

funcGetSightOnLandscapePosition = {
    private ["_boneHeadName", "_headPosition", "_weaponDirection", "_screenPosition"];
    _boneHeadName = getText (configFile >> "CfgVehicles" >> typeof player >> "boneHead");
    _headPosition = player modelToWorld (player selectionPosition _boneHeadName);
    _weaponDirection = player weaponDirection "throw";
    _screenPosition = worldToScreen [
        x(_headPosition) + x(_weaponDirection) * 10000,
        y(_headPosition) + y(_weaponDirection) * 10000,
        z(_headPosition) + z(_weaponDirection) * 10000
    ];
    if (count _screenPosition == 2) then {
        screenToWorld _screenPosition
    } else {
        [1e+39, 1e+39] // 1e+39 дает в арме 1.#INF, то есть это позиция в бесконечность
    };
};

//
// проверочная функа: я поставил в игре объект "Сфера 10 см",
// обозовал его как eo__objTarget
//
 
funcSetObjToSight = {
    _this setpos (call funcGetSightOnLandscapePosition)
};

waitUntil {
    eo__objTarget call funcSetObjToSight;
    false;
};

Перейти к сообщению


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 10

#1 OFFLINE   Sledo

Sledo

    Ефрейтор

  • Пользователи
  • 74 сообщений

Отправлено 06 September 2015 - 14:54

Все мы знаем что в компьютере нет случайных чисел, поэтому, хорошая практика для начала расчета функцией случайных чисел, брать действительно случайное число, например координаты мышки на экране. Вопрос - есть ли что то подобное в Арме?


  • 0

#2 OFFLINE   TankiSD

TankiSD

    Ст. Прапорщик

  • Пользователи
  • 680 сообщений

Отправлено 06 September 2015 - 15:01   Лучший Ответ

Я не совсем понял вопрос, но когда-то давно, на АрмА2, я пилил миссию с командованием, где команды отдавались через кнопки и всё такое.

И вот так искался центр экрана\куда смотрит мышка, если мне не изменяет память. 

Хотя скорее всего, скинул не то, что надо. 

Надо ведь позицию мышки вычислить?


//
// Упс, в начале надо подключить:
//

#define x(a) ((a) select 0)
#define y(a) ((a) select 1)
#define z(a) ((a) select 2)

//
// И еще, один момент выяснился, worldToScreen может возвращать пустой массив, если проекция невозможна. Так что добавил проверку:
//

funcGetSightOnLandscapePosition = {
    private ["_boneHeadName", "_headPosition", "_weaponDirection", "_screenPosition"];
    _boneHeadName = getText (configFile >> "CfgVehicles" >> typeof player >> "boneHead");
    _headPosition = player modelToWorld (player selectionPosition _boneHeadName);
    _weaponDirection = player weaponDirection "throw";
    _screenPosition = worldToScreen [
        x(_headPosition) + x(_weaponDirection) * 10000,
        y(_headPosition) + y(_weaponDirection) * 10000,
        z(_headPosition) + z(_weaponDirection) * 10000
    ];
    if (count _screenPosition == 2) then {
        screenToWorld _screenPosition
    } else {
        [1e+39, 1e+39] // 1e+39 дает в арме 1.#INF, то есть это позиция в бесконечность
    };
};

//
// проверочная функа: я поставил в игре объект "Сфера 10 см",
// обозовал его как eo__objTarget
//
 
funcSetObjToSight = {
    _this setpos (call funcGetSightOnLandscapePosition)
};

waitUntil {
    eo__objTarget call funcSetObjToSight;
    false;
};


  • 0

#3 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 06 September 2015 - 16:27

Sledo, позицию мышки узнать в Арме нельзя (Только подключать расширения)
Но зачем вам потребовалось действительно случайное число в ИГРЕ?

Сообщение отредактировал vlad333000: 06 September 2015 - 16:29

  • 0

#4 OFFLINE   TankiSD

TankiSD

    Ст. Прапорщик

  • Пользователи
  • 680 сообщений

Отправлено 06 September 2015 - 18:50

Так нужен то

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

и всё что ль? 


  • 0

#5 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 06 September 2015 - 18:55

TankiSD, ну видишь ли ему нужно не псевдослучайное число (которое скорее всего и выдает эта команда), а прям настоящее случайное! (На первый взгляд бред (рандом выдает не случайное число), но если вникнуть в суть то станет понятно). Но я вот одно понять не могу - на кот хрен ему нужно упороться до такой степени в ИГРЕ?
  • 0

#6 OFFLINE   TankiSD

TankiSD

    Ст. Прапорщик

  • Пользователи
  • 680 сообщений

Отправлено 06 September 2015 - 19:00

vlad333000, ну может он мазохист?!

 

а так да, нам ещё препод говорил, что рандома нет, что в зависимости от каких-то там параметров, система просто выбирает число.

 

Я так понимаю, ему число нужно от чего-то?

например от кол-ва патронов в магазине? 

только тут всё касательно координат мышки.


  • 0

#7 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 06 September 2015 - 19:16

TankiSD, Да, ему нужно зерно для функции рандомного числа, но зерно, которое прям реально рандомное. В обычных языках программирования сие чудо обычно делают в виде того сколько секунд прошло с 1970 года (вроде), но вот в Арме хз как это сделать

Сообщение отредактировал vlad333000: 06 September 2015 - 19:16

  • 0

#8 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 06 September 2015 - 19:16

Как вариант построить отталкиваясь от такого примера

dayz_objectUID = {
	private["_position","_dir","_key","_object"];
	_object = _this;
	_position = getPosATL _object;
	_dir = direction _object;
	_key = [_dir,_position] call dayz_objectUID2;
    _key
};

dayz_objectUID2 = {
	private["_position","_dir","_key"];
	_dir = _this select 0;
	_key = "";
	_position = _this select 1;
	{
		_x = _x * 10;
		if ( _x < 0 ) then { _x = _x * -10 };
		_key = _key + str(round(_x));
	} forEach _position;
	_key = _key + str(round(_dir));
	_key
};

на выходе даёт рандомный ID

 

Или как вариант попытать подобный подход

_rndSeed = (random 1) * (random 1) * (random 1);
_rnd = 100 * _rndSeed;






Сообщение отредактировал SteelRat: 06 September 2015 - 19:17

  • 0

#9 OFFLINE   Sledo

Sledo

    Ефрейтор

  • Пользователи
  • 74 сообщений

Отправлено 07 September 2015 - 03:00

Sledo, позицию мышки узнать в Арме нельзя (Только подключать расширения)
Но зачем вам потребовалось действительно случайное число в ИГРЕ?

Да ладно вам сразу штампы кидать, уполоться, игре и т.д. Я не привык делать что то на половину, я не привык делать что то лишь бы работало - я привык делать так, что бы это работало и всегда (по возможности конечно)). А вот тесты с 

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

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

 

Как вариант построить отталкиваясь от такого примера

...

на выходе даёт рандомный ID

 

Или как вариант попытать подобный подход

Спс, первый вариант похож на правду, надо потестить, а вот второй сомнителен.

 

 

Я не совсем понял вопрос, но когда-то давно, на АрмА2, я пилил миссию с командованием, где команды отдавались через кнопки и всё такое.

И вот так искался центр экрана\куда смотрит мышка, если мне не изменяет память. 

Хотя скорее всего, скинул не то, что надо. 

Надо ведь позицию мышки вычислить?

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

- да, именно то что надо. 


  • 0

#10 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 08 September 2015 - 18:21

 

SteelRat сказал(а) 06 Сен 2015 - 18:16:snapback.png

Как вариант построить отталкиваясь от такого примера

...

на выходе даёт рандомный ID

 

Или как вариант попытать подобный подход

Спс, первый вариант похож на правду, надо потестить, а вот второй сомнителен.

_rndSeed = (random 1) * (random 1) * (random 1);

Какова вероятность получить одинаковое значение переменной

_rndSeed

?


ЗЫ

Даже стало интересно, на ночь заряжу скриптик на jave, интересно до утра удастся получить равной значение)?


  • 0

#11 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 08 September 2015 - 18:28

ЗЫ_2

Полный хардкор)

_iterations = 1000;
_rnd = 1;

for "_i" from 1 to _iterations do {
	_rnd = _rnd * (random 1);
};

  • 0




Яндекс.Метрика