Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   выборка с рэндома и ограничения на рэндом (http://www.flasher.ru/forum/showthread.php?t=67428)

DJ_Baton 02.08.2005 22:59

выборка с рэндома и ограничения на рэндом
 
И так, делаю сейчас блэк джек, нужна ваша помощь :)
Что б сильно не нагружать вас подробностями спрашу только детали. В общем есть у меня мувик, в нём 52 карты (без джокеров), я на первом кадре установил gotoAndPlay(random(52)); но допустим у меня там сто кадров, как делать выборку из рендома, то есть задавать кадры или первый и последний кадр рендома из которых он будет выбирать ?

Вопрос второй, у меня появляется мувик с именем Z1, потом такой же с именем Z2, Z3, Z4, Z5. а теперь главная проблема, раз это колода карт, и используется для неё 1 мувик, как задать, что бы в каждом новом мувике была проверка что-то по типу _currentframe нового мувика не должен быть таким же как у предыдущих при выборке рендомом из 52 карт...? А то запарился уже, буду знать это сделаю блэк джек :(

iNils 02.08.2005 23:21

Сделай по аналогии:
Код:

arrayA = new Array ("A", "B", "C", "D", "E", "F", "G");
arrayB = new Array (0, 1, 2, 3, 4, 5, 6);
for (i = 0; i < arrayA.length; i++) {
        rnd = Math.floor (Math.random () * arrayB.length);
        del = arrayB.splice (rnd, 1);
        value = arrayA[del];
        trace (value);
}


Takato 02.08.2005 23:24

Цитата:

В общем есть у меня мувик, в нём 52 карты (без джокеров), я на первом кадре установил gotoAndPlay(random(52)); но допустим у меня там сто кадров, как делать выборку из рендома, то есть задавать кадры или первый и последний кадр рендома из которых он будет выбирать ?
gotoAndPlay(random(52)) + номер "первого" кадра (из выборки).

Цитата:

Вопрос второй, у меня появляется мувик с именем Z1, потом такой же с именем Z2, Z3, Z4, Z5. а теперь главная проблема, раз это колода карт, и используется для неё 1 мувик, как задать, что бы в каждом новом мувике была проверка что-то по типу _currentframe нового мувика не должен быть таким же как у предыдущих при выборке рендомом из 52 карт...?
Ну сделай например массив, из которого будут удалятся выбрнные ранее карты

DJ_Baton 02.08.2005 23:29

Да, совсем забыл, вот ещё третий вопрос, я создал мувик, типа выскакивание карты из колоды, но так как последующие карты появляются со сдвигом вправо, то и анимация сдвигается, делать кучу мувиков не хочется разных, вот и хочу узнать, можно ли первую точку моушн твина сделать фиксированной относительно позиции _x и _y по руту, то есть координатам главного мувика, тогда где бы мувик не находился карта всегда вылетала бы из колоды.
Заранее благодарен !

DJ_Baton 02.08.2005 23:37

iNils, расскажи подробнее про это, распиши пожалуйста, а то я не силён в этих вещах, по ходу это массив ? как он работает, принцип, как его привязать к моему мувику ?

>>Ну сделай например массив, из которого будут удалятся выбрнные ранее карты

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

Takato 02.08.2005 23:46

Цитата:

Сообщение от DJ_Baton
расскажи подробно как это делать и как массив обнулять для каждой новой сдачи, распиши подробнее, а то я не очень силён в скрипте... у меня большая часть игры построена на логике...

Хм... Открой в помощи словарь и посмотри "Array" (массив) - там куча про него написано. Сюда это будет слишком долго всё расписывать

iNils 03.08.2005 00:01

В твоем случаи:
Код:

arrayB = new Array ();
num = 52;
for (i = 0; i < num; i++) {
        arrayB[i] = i + 1;
}
for (i = 0; i < num; i++) {
        rnd = Math.floor (Math.random () * arrayB.length);
        // данное значение это номер кадра с картой
        value = arrayB[rnd];
        del = arrayB.splice (rnd, 1);
        trace (value);
}


DJ_Baton 03.08.2005 01:05

Цитата:

Сообщение от iNils
В твоем случаи:
Код:

arrayB = new Array ();
num = 52;
for (i = 0; i < num; i++) {
        arrayB[i] = i + 1;
}
for (i = 0; i < num; i++) {
        rnd = Math.floor (Math.random () * arrayB.length);
        // данное значение это номер кадра с картой
        value = arrayB[rnd];
        del = arrayB.splice (rnd, 1);
        trace (value);
}


Огромное спасибо за готовый скрипт, если можешь напиши как его использовать в случае который опишу ниже.
в руте находится мувик CARDS1, содержащий раздачу в 5 карт для меня и второй мувик CARDS2 содержащий раздачу в 5 карт для крупье, структура у них одинаковая.
Структура мувиков CARDS:
в начале 1 пустой кадр со стопом, потом твин вылета первой карты из колоды, stop();, второй и стоп, третьей и так далее на стопе стоит наш мувик с рендомным выбором одной из 52 карт, который я буду копи пастить в CARDS1 и CARDS2 меняя Instance name, Z1, Z2 и т.д. то есть я их даже генерить не буду, просто вставлю пять таких мувиков в CARDS1 и 5 в CARDS2, может просто можно прописать для постоянной обработки, с обнулением в конце каждой партии -

onClipEvent(enterFrame){
//тут както перечислить все мои инстансы
_root.CARDS1.Z1
_root.CARDS1.Z2
_root.CARDS1.Z3
_root.CARDS1.Z4
_root.CARDS1.Z5
_root.CARDS2.Z6
_root.CARDS2.Z7
_root.CARDS2.Z8
_root.CARDS2.Z9
_root.CARDS2.Z10
}

и как-то привязать к ним функцию, чтоб у этих Z-ов не было одинаковых _currentframe при рендомном выборе ?

iNils 03.08.2005 02:19

дай исходик.

DJ_Baton 03.08.2005 03:10

Исходник дать не могу, извени, просто примета плохая показывать незаконченную работу, да и вообще... столько работы проделано уже...
В общем вот скрипт мне предложили для моей ситуации, оцени плиз:
var RandNums;
var i;
var goodrand;
var num;
var nameCard;
RandNums = new Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
for (i=1; i<11; i++) {
goodrand = 0;
while (goodrand == 0) {
num = (random(52))+1;
if ((num != RandNums[0]) && (num != RandNums[1]) && (num != RandNums[2]) && (num != RandNums[3]) && (num != RandNums[4]) && (num != RandNums[5]) && (num != RandNums[6]) && (num != RandNums[7]) && (num != RandNums[8]) && (num != RandNums[9])) {
if (i<6) {
nameCard = eval("_root.CARDS1.Z"+i);
} else {
nameCard = eval("_root.CARDS2.Z"+i);
}
nameCard.gotoAndStop(num);
goodrand = 1;
} else {
goodrand = 0;
}
}
}


Часовой пояс GMT +4, время: 23:39.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.