Avatar billede molok Nybegynder
07. oktober 2004 - 14:04 Der er 11 kommentarer og
1 løsning

Random array. Eller anden løsning?!

Hej,

Jeg sidder og arbejder med et lille spil, hvor jeg skal bruge x antal tilfældige tal, for at kunne præsentere nogle tilfældige kort.

eg.---------------------------------------------------

a = random(78)+1;
b = random(78)+1;
c = random(78)+1;

go = (a <> b) && (b <> c) && (c <> a)

if (go){
    cardA = ("card" + a);
    cardB = ("card" + b);
    cardC = ("card" + c);
    gotoAndStop ("deal");
}
---------------------------------------------------------

Dette er jo simpelt nok når man kun skal bruge 3 kort, men problemet bliver lidt uoverskueligt når man så skal bruge 10 ;o) Lige nu er min hjerne brændt sammen, så 50 point til den der lige hinter i den rigtige retning.

Mvh.
Avatar billede plx Nybegynder
07. oktober 2004 - 14:07 #1
En nem måde: du fylder et array med fortløbende tal

1 2 3 4 5 6

arrayet blander du bagefter: generer to tilfældige tal, og byt tallene på disse pladser om.. gør det x antal gange, og du får hvad du ønsker..
Avatar billede molok Nybegynder
07. oktober 2004 - 14:11 #2
Den fangede jeg ikke helt ?

hehehe... suk... Men det lyder ret plausibelt ;o)
Avatar billede plx Nybegynder
07. oktober 2004 - 14:24 #3
vi har vores array, 3 kort med værdierne 1, 2 og 3

kort[0] = 1
kort[1] = 2
kort[2] = 3

vi blander..

a = random(3)
b = random(3)

kort[a] = kort[b]
- og omvendt

blandingsrutinen udfører du så bare et vist antal gange, og du har x antal unikke og tilfældige tal
Avatar billede barklund Nybegynder
07. oktober 2004 - 14:34 #4
Well, skal du bruge 3 tilfældige tal ud af en 78, så er det hurtigere at generere tre tilfældige tal og sikre sig at de ikke er valgt, end at lave en liste på 78 tal, shuffle den og tage de 3 første.

De to metoder kunne se ud som:

function randomA(a, b, num) {
    // num tilfældige tal fra a til b, hvor b-a markant større end num
    var ret = new Array();
    var selected = new Object();
    var t, i;
    for (i = 0; i < num; i++) {
        do {
            t = a + Math.floor(Math.random() * (b - a + 1));
        } while (selected[t] != undefined);
        selected[t] = true;
        ret.push(t);
    }
    return ret;
}
function randomB(a, b, num) {
    // num tilfældige tal fra a til b, hvor b-a kun er lidt større end num
    var ret = new Array();
    var i, r, t, l = b-a+1;
    for (i = a; i <= b; i++) {
        ret.push(i);
    }
    for (i = 0; i < l; i++) {
        r = Math.floor(Math.random() * l);
        t = ret[r];
        ret[r] = ret[i];
        ret[i] = t;
    }
    return ret.splice(0, num);
}
trace(randomA(1, 10, 3));
trace(randomB(1, 10, 8));

--
Morten Barklund
Avatar billede molok Nybegynder
07. oktober 2004 - 14:39 #5
tricket er bare at jeg skal bruge 10 kort ind i mellem... Den kode jeg selv har lavet fungerer fint i forhold til 3 kort... Men jeg skal finte noget så jeg kan få op til 15 tilfældige kort ud.
Avatar billede barklund Nybegynder
07. oktober 2004 - 14:47 #6
Skal du bruge 15 tal mellem 1 og 78 skriver du:

randomA(1, 78, 15);

Så har du et array med position 0 til 14 med tilfældige, unikke tal.

--
Morten Barklund
Avatar billede molok Nybegynder
07. oktober 2004 - 14:54 #7
Jeg sad lige og tudede hen over mit keyboard, og så dukker du op ud af tågen!!!

Barklund er GUD! Hyldest er på sin plads ;)
Avatar billede barklund Nybegynder
07. oktober 2004 - 15:34 #8
Jaja, ro på nu - ikke så blasfemisk :)

Men jeg har vist allerede kastet et svar :)
Avatar billede molok Nybegynder
07. oktober 2004 - 15:36 #9
Hmmm.... Jeg trykker Accepter og nada sker ???
Avatar billede barklund Nybegynder
07. oktober 2004 - 15:43 #10
Du skal lige markere mit navn på (singleton) listen over navne først :)
Avatar billede molok Nybegynder
07. oktober 2004 - 15:45 #11
damn jeg er træt... Well,, tak for hjælpen... Nu kan jeg komme videre... Har aldrig været skrap til arrays.
Avatar billede barklund Nybegynder
07. oktober 2004 - 15:53 #12
Tark for points - held og lykke og kom snart igen :D
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester