| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| It's all a Game Registriert seit: Sep 2004 Ort: Berlin
Beiträge: 53
|
Hallo liebe Flasher, ich habe ein Randomscript entwickelt, das innerhalb eines bestimmten Maximums bereits "gewürfelte" Nummern notiert und eine Wiederwahl ausschließt bis nicht alle möglichen Nummern einmal gewürfelt worden. Verstanden? Funktion: Also zuerst wird ein Maxmimum festgelegt (z.B. Maximum = 5) dann wird zum ersten Mal "gewürfelt" (d.h. Math.random(max) ausgeführt) und das Ergebnis in einem Array (EXCLUDE) festgehalten. Der Array wächst von Wurf zu Wurf und vergleicht jedes Random-Ergebnis so lange bis eine Zahl entspringt, die noch nicht im Array gelistet wurde. Wenn soviel Mal gewürfelt wurde wie es dem Maximum entspricht, wird der Array neugestartet und die Prozedur wiederholt sich von vorne. Ein gutes Anwende-Beispiel: Alienscript Das kleine Alien auf der rechten Seite spielt zufällig ausgewählte MP3-Streams ab. Um lästige Wiederholungen der kurzen Loops zu vermeiden kommt das Lucky-Number-Script zum Einsatz und hält mögliche Wiederholungen so lange zurück bis jeder Loop einmal gespielt wurde! ![]() Anwendung Script einfach in eine neue Flash-Datei kopieren und ausprobieren ActionScript:
__________________ //Iss nich immer so viel sinnlosen Zucker! //Iss mal ne Banane zur Abwechslung! viel.Vitamine = Gesund (Duuuuuuu! Ganove ;-) Links: Mein Kofferradio. Mit lauter Smith-Songs Mein MySpace Account |
| | |
| | #3 (permalink) |
| It's all a Game Registriert seit: Sep 2004 Ort: Berlin
Beiträge: 53
|
Siehste, und ich hab's mir selbst beigebracht =)
__________________ //Iss nich immer so viel sinnlosen Zucker! //Iss mal ne Banane zur Abwechslung! viel.Vitamine = Gesund (Duuuuuuu! Ganove ;-) Links: Mein Kofferradio. Mit lauter Smith-Songs Mein MySpace Account |
| | |
| | #4 (permalink) |
| - Registriert seit: Jan 2004
Beiträge: 3.002
|
hm, der Algorithmus ist aber ziemlich ineffizient, da mixXit ja u.U. unendlich oft aufgerufen wird, falls zufällig immer genau die Zahlen kommen, die schon waren. Außerdem läuft die For-Schleife nach dem (verschränkt-)rekursiven Aufruf noch weiter, was zu nicht gewünschtem Verhalten füren könnte (muss man im Ergebnis nicht sehen, aber intern kann da einiges schief laufen). Mein Tipp wäre es nach dem folgenden Prinzip vorzugehen: Maximum setzen, zahlen von 1 bis Maximum in ein Array nochZuZiehen schreiben. Per Random aus nochZuZiehen.length ein Element des Array auswählen. Dieses aus dem array löschen und in ein Array schonGezogen packen (falls man das wissen will). Das macht man so lange, wie nochZuZiehen.length > 0 ist. Anschließend füllt man das Array neu (löscht ggf das schonGezogen Array, es seiden man möchte die gesamte Ziehungsreihenfolge dokumentieren) und speichert vorher aber, welche Zahl zuletzt gezogen wurde, um dann den Sonderfall auszuschließen zu können, bei dem z.B. 3 als letztes gezogen wurde und dann nach einem neu Befüllen des Arrays wieder als erstes 3 gezogen wird und somit 2 mal das gleiche Element vorkommt. Dürfte dann effizienter und leichter zu durchschauen sein. Aber an sich ist ein solcher Stuff-Eintrag sicherlich für den ein oder anderen hilfreich ![]() Ferner könnte man sogar komplett auf MAXIMUM verzichten und einfach nur die Arrays betachten. Was in den Arrays drinsteht ist eigentlich für den Algorithmus egal. //Edit: Könnte dann z.B. so aussehen (wobei hier jetzt nicht das letzte gezogene gespeichert wird): ActionScript:
Beispiel zum Benutzen der Klasse: ActionScript:
__________________ mfG, Robert Tutorials: [TUTORIAL] XML-Files in Flash einlesen+weiter verarbeiten Steuerung zwischen Zeitleisten & Movieclips [TUTORIAL] MP3-Player (+XML) [TUTORIAL] MP3-Player (+XML) Part II Geändert von pape (16-01-2008 um 01:02 Uhr) Grund: Kleinigkeit |
| | |
| | #5 (permalink) |
| It's all a Game Registriert seit: Sep 2004 Ort: Berlin
Beiträge: 53
|
Danke, dass Du Dich mit dem Script befasst hast. Ich hab' zwar leider zu wenig Erfahrung mit der Art von Action-Script, mit dem Du das geschrieben hast, um weiter mitreden zu können, finde aber Deinen Beitrag echt cool. Außerdem habe ich momentan wenig Zeit zum Flashen, da ich mich mit dutzenden Farbproofs und Visitenkarten außeinandersetzen muss. (Pain in the Ass ) Man will das perfekte Farbergebnis von mir. Wobei Leonard Cohen es doch so schön singt: "Forget your perfect offering. There is a crack in everything, that's how the light get's in." Grüße Paul
__________________ //Iss nich immer so viel sinnlosen Zucker! //Iss mal ne Banane zur Abwechslung! viel.Vitamine = Gesund (Duuuuuuu! Ganove ;-) Links: Mein Kofferradio. Mit lauter Smith-Songs Mein MySpace Account |
| | |
| | #6 (permalink) |
| It's all a Game Registriert seit: Sep 2004 Ort: Berlin
Beiträge: 53
|
Hallo ich habe begriffen, was Robert sich ausgedacht hat und habe die Idee auch mal umgesetzt. Einen Array schrumpfen zu lassen ist viel besser als die mögliche Endlosschleife zwischen zwei Funktionen zu provozieren. Im Code seht ihr ein vereinfachtes Beispiel fürs Ausgabe-Fenster. Die luckyNumber() Funktion operiert hier als einfache return-Methode. Wichtig dabei ist, dass die Initialisierung vor der Anwendung der luckyNumber() Funktion ausgeführt wird, da sonst der Array leer ist. Danke Robert =) Code: function initLuckyNumber() {
var maximal = 10;
possible = [];
for (var i = 0; i<maximal; i++) {
possible[i] = i;
}
}
function luckyNumber() {
var wert;
var rndm;
rndm = random(possible.length);
wert = possible[rndm];
possible.splice(rndm, 1);
if (possible.length<=0) {
initLuckyNumber();
}
if (wert == 0) {
wert = 0;
}
return wert;
}
//
initLuckyNumber();
//
// Anwendung
for (var i = 1; i<20; i++) {
trace(i+". Ergebnis: "+luckyNumber());
}
__________________ //Iss nich immer so viel sinnlosen Zucker! //Iss mal ne Banane zur Abwechslung! viel.Vitamine = Gesund (Duuuuuuu! Ganove ;-) Links: Mein Kofferradio. Mit lauter Smith-Songs Mein MySpace Account |
| | |
| | #8 (permalink) |
| ~~~~~~~~~~~~ Registriert seit: May 2002 Ort: AUSTRIA (OÖ)
Beiträge: 3.298
|
Ich denk keinen ![]() mein AS1/2 is schon etwas eingerostet aber ich denk so könnt mans auch machen (über ne Art Array mischen funktion) PHP-Code:
__________________ --- :P --- Blog Bei unerwünschten Nebenwirkungen zerreißen Sie die Packungsbeilage oder erschlagen ihren Arzt oder Apotheker |
| | |
| | #9 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.326
|
bis auf eine kleinigkeit perfekt ;-) deshalb: http://www.seibsprogrammladen.de/fra...rithmen/Zufall Zufallsreihenfolgen aneinander reihen Erzeugt immer wieder eine neue Reihe von Zufallszahlen, wobei die letzte Zahl nicht mit der ersten Zahl der neuen Reihe identisch ist.
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de |
| | |
| | #10 (permalink) |
| It's all a Game Registriert seit: Sep 2004 Ort: Berlin
Beiträge: 53
|
Ich habe die "if wert == 0" Möglichkeit mit eingebunden, weil es beim üblichen Math.random() keinen Null-wert gibt sondern höchstens "0.0003123". Außerdem kann eine Null bei der Aleatorik zum kompletten Löschen eines Wertes beitragen und in der if Operation kann man verhindern, dass eine Null ausgespuckt wird. Übrigens kann man an der Stelle "return wert" noch eine /10 einfügen also "return wert/10" so dass es mehr Ähnlichkeit mit Math.random() erhällt. ![]() Gruß Paul
__________________ //Iss nich immer so viel sinnlosen Zucker! //Iss mal ne Banane zur Abwechslung! viel.Vitamine = Gesund (Duuuuuuu! Ganove ;-) Links: Mein Kofferradio. Mit lauter Smith-Songs Mein MySpace Account |
| | |
| | #11 (permalink) | |
| voidboy Registriert seit: Sep 2004 Ort: München
Beiträge: 5.588
| Zitat:
![]() Arbeitet dein Compiler anders? PHP-Code: Geändert von rendner[i] (25-04-2008 um 11:01 Uhr) | |
| | |
| | #12 (permalink) |
| It's all a Game Registriert seit: Sep 2004 Ort: Berlin
Beiträge: 53
|
Ich habe das Script nun optimiert und jeglichen Schnick Schnack weggelassen!! Die Methode ist jetzt einfach anzuwenden ohne vorherige Initiierungs-Funktion. Einzige Veränderung die passiert wenn das Script im Film eingefügt wird sind ein Array (PB) der nach außen geht. (Wenn man mehrere Instanzen des Scriptes benötigt, muss der Array unbedingt umbenannt werden, da es zu Konflikten kommen wird.) luckyNumber() ist jetzt eine einfache return-Methode. Ziel ist es nach wie vor Zufallszahlen zu erzeugen, die sich innerhalb eines Maximalwertes nicht wiederholen. PHP-Code: Wenn man return wert/10; schreibt und das MAXIMUM auf 10 Setzt ähnelt es dem Math.random() Wenn alles klappt poste ich bald eine URL, in der ich das Script ziemlich cool angewandt habe. Dauert aber noch
__________________ //Iss nich immer so viel sinnlosen Zucker! //Iss mal ne Banane zur Abwechslung! viel.Vitamine = Gesund (Duuuuuuu! Ganove ;-) Links: Mein Kofferradio. Mit lauter Smith-Songs Mein MySpace Account Geändert von Kandidat (08-05-2008 um 19:31 Uhr) Grund: Refaktorierung |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |