PDA

Volledige versie bekijken : sorteren op nummer


mikespa
%Europe/Berlin %921 %2008, 22:06
hey,

ik ben bezig met een soort van puzzel te maken.
nu zou ik bij de oroep van de swf de puzzelstukken random op de stage willen plaatsen.
hierbij wel niet kris kras door elkaar maar er zijn 16 stukken en er zijn ook 16 posities voorzien. elke positie mag dan ook maar 1 stuk bevatten.

Nu had ik gedacht om de stukken een random getal mee te geven en deze stukken daarop te gaan sorteren. het stuk met het kleinste getal krijgt dan de eerste positie en zo voort.

dit zou me allemaal wel moeten lukken, enkel het sorteren op nummer krijg ik niet voor mekaar. kan iemand hiervoor een voorbeeldscriptje posten, of iets dergelijks met een woordje uitleg?

het zou een hele hulp zijn.

alvast bedankt

TheDutch
%Europe/Berlin %209 %2008, 05:02
Maak een array met alle 16 stukken en gebruik daarbij de onderstaande shuffle functie om ze door elkaar te gooien. Daarna loop je over de array om de stukken op de nieuwe plaats te zetten aan de hand van de nieuwe array index :).

private function shuffleArray(array:Array):Array {

var l:Number = array.length-1;

for (var it:uint = 0; it<l; it++) {

var r:int = Math.round(Math.random()*l)

var tmp:String = array[it];

array[it] = array[r];

array[r] = tmp;

}

return array;
}

Deze broncode heb ik hier vandaan: http://www.adobe.com/cfusion/communityengine/index.cfm?event=showdetails&productId=2&postId=9183

mikespa
%Europe/Berlin %944 %2008, 22:39
dank je wel voor de snelle reactie.
dit zal me een stuk verder helpen

BernardV
%Europe/Berlin %942 %2008, 22:36
De functie die hier genoemd is werkt wel, maar het laatste item in de array blijft eigenlijk altijd aan het einde staan.
Je kunt het nog makkelijker doen door de sort functie van Array te gebruiken.
Dan gaat het ongeveer zo:

private function randomSort(i:Object, j:Object):int
{
return Math.random()>0.5?1:-1;
}

var newArray:Array = oldArray.sort(randomSort);
Klaar ben je :)