Форум 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;
}
}
}

DJ_Baton 03.08.2005 03:40

закинул этот скрипт в первый фрэйм, в рут, потом по идее всё работает так, нажимаю кнопку и она играет мувик CARDS1, снимая его с паузы и запуская появление первой карты, после проигрывания анимации появляется мувик Z1 на тайм лайне, нажимаю опять кнопку "Ещё", идёт анимация появления карты и на тайм лайне в CARDS1 появляется карта с инстансом Z2, и так нажимая кнопку "Ещё" мы доходим до карты Z5, в общем как на зло выпадало то 2 десятки червовые, то ещё что :(

з.ы. напомню, что каждый из этих Z - это мувик в 52 карты, в начале которого скрипт gotoAndPlay (random(52)); и в каждом кадре стоит пауза :(

DJ_Baton 03.08.2005 06:18

Вложений: 1
ВОТ ИСХОДНИК СТРУКТУРЫ =)
нужно чтоб массив отслеживал все значения Z в обоих мувиках и записывал их _currentframe в массив

iNils 03.08.2005 12:05

Вложений: 1
вот...

Uvnik 03.08.2005 14:37

Вложений: 1
во тебе ещё....

DJ_Baton 03.08.2005 17:00

Цитата:

Сообщение от iNils
вот...

ОГРОМНОЕ СПАСИБО!!!! ВСЁ РАБОТАЕТ !!! :D , а нельзя ли как-то обойтись без функции _global ? а то у меня такая история... в общем дома виндовс МЕ, а флэш седьмой работает только под ХР, шестой ставил, но по истечению триала он само блокировался, да так что уже и креками никакими не поможешь, работаю дома в пятом флэше, а пятый функцию _global не понимает... если никак, буду мучать шестой, может удасться установить :(

DJ_Baton 03.08.2005 17:03

Цитата:

Сообщение от Uvnik
во тебе ещё....

спасибо, но я не просил давать мне чужие исходники Блэк Джека, это не рулезно перекрасить чужой и менять карты, у меня полностью свой, сделаный с нуля, при этом он ещё будет с горкой, то есть выиграл и пирамиду пробиваешь =)

iNils 03.08.2005 17:10

поменяй _global на _root

DJ_Baton 03.08.2005 17:19

Цитата:

Сообщение от iNils
поменяй _global на _root

Поменял на _root все глобалы в скрипте, вообще перестало работать :(

DJ_Baton 03.08.2005 17:23

Совсем забыл спросить, всё-таки скрипт есть, но хотелось бы разобраться как работает это чудо, ведь он ссылается на _root.razdacha но мувика и instance такого нет, как я понял это переменная, и при этом в самом скрипте не указаны ни мувики _root.CARDZ1 _root.CARDZ2 и так же нигде нет ссылок на Z+i, не понимаю как ты добился того чтоб скрипт обрабатывал именно данные Z-ов в мувиках _root.CARDZ1 и _root.CARDZ2

KidsKilla 03.08.2005 17:57

_global = Object.prototype
глобал оставь, допиши вначале

DJ_Baton 03.08.2005 18:01

Цитата:

Сообщение от KidsKilla
_global = Object.prototype
глобал оставь, допиши вначале

ничё не понял, пятый флэш не понимает функции _global, то есть ты предлагаешь ввести тот же _global как переменную, и приравнять её к - Object.prototype ?

KidsKilla 03.08.2005 18:16

угу..
ток я те соврал
Object.prototype._global = Object.prototype
http://proto.layer51.com/d.aspx?f=512

DJ_Baton 03.08.2005 18:24

Цитата:

Сообщение от KidsKilla
угу..
ток я те соврал
Object.prototype._global = Object.prototype
http://proto.layer51.com/d.aspx?f=512

ага, то есть прописать эту строчку перед скриптом и всё, он будет обрабатывать всё нормально в пятом флэше =) класс ;)
слушай, а можешь скачать poker.zip с предыдущей страницы и сказать как iNils написал скрипт который отлично работает и при этом не ссылается на мои мувики, я лазил по исходнику, вроде кроме самого добавления скрипта он ничего не менял, не понимаю в упор =) Да и ещё какую функцию нужно задать кнопке чтоб обнулять этот массив для последующей раздачи карт ?

iNils 03.08.2005 18:36

Я внутри мувика с картами в первый кадр поставил код:
this.gotoAndStop (_global.razdacha ());

Для обнуления массива надо вызвать _global.init();

DJ_Baton 03.08.2005 18:56

Цитата:

Сообщение от iNils
Я внутри мувика с картами в первый кадр поставил код:
this.gotoAndStop (_global.razdacha ());

Для обнуления массива надо вызвать _global.init();

всё, теперь окончательно всё понял, то есть если я захочу использовать в игре (когда человек горку пробивать будет) тот же скрипт, только перебить значение с раздачи например на RAZDACHA2 и вставить эту строчку в начало новой коллоды карт. Огромное тебе спасибо за помощь, как закончу игру скину ссылочку ;)


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

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