Schwierigkeitsgrad:***** Vorwissen: Ein paar grundlegende Scriptkentnisse.
Die Funktionen
Es gibt zwei Funktionen die in Frage kommen wenn eine zufällige Zahl ausgegeben werden soll, welche dazu benutzt werden kann den Zufall in dein Clonkscript einzubauen. Zum einen Random und RandomX.
Random
Die Funktion Random gibt eine Zahl zwischen null und dem angegebenen Zahlenwert (iMaxVal) aus. Will ich eine Zufallszahl zwischen 0 und 10 sieht das dann so aus:
Code:
Random(10);
Random schließt hier die Null mit ein, sprich sie kann auch ausgegeben werden, die Zehn ist allerdings ausgeschlossen, der Maximale Zahlenwert wird nie ausgegeben.
RandomX
Die Funktion RandomX gibt eine Zahl zwischen der ersten angegebenen Zahl (iVal1) und der zweiten angegebenen Zahl (iVal2) aus. Will ich eine Zufallszahl zwischen 0 und 10 sieht das hier so aus:
Code:
RandomX(0,10); oder RandomX(10,0);
Es ist egal ob die höhere Zahl vorne oder hinten steht, der Einfachheit halber ist es aber sinnvoll sie hinten hin zu schreiben. Des weiteren sind beide Zahlenwerte mit eingeschlossen, es kann sowohl iVal1 als auch iVal2 ausgegeben werden.
Welche Funktion soll ich verwenden?
Es ist auf jeden Fall sinvoller auf RandomX zu setzen denn:
-Random kann keine negativen Zahlen ausgeben. Gibt man als iMaxVal eine negative Zahl ein kommt aberwitziger Blödsinn raus, allerdings kein Error, was die Sache noch fieser macht. -Bei RandomX können beide Grenzen selbst gesetzt werden, so hat man nicht Null als vorgegebene Grenze sondern kann die Unter/Obergrenze auch unter/über Null setzen. -RandomX kann Random leicht ersetzen indem einer der Zahlenwerte mit Null angegeben wird.
Man kann zwar alles auch mit Random schreiben aber das machts bloß kompliziert schauts euch unten an und urteilt selbst.
Praktische Anwendung
Eine wichtiger Anwendungmöglickeit liegt natürlich in if-Funktionen.
Je nach Ausgabewert von Random/RandomX kann man verschiedene Ereignisse eintreten lassen. Zum Beispiel:
Code:
func Hit() { if(RandomX(0,1)) Explode(18); }
Wahrscheinlichkeit von 50:50 das das Ding beim Aufprall Explodiert.
Code:
func Hit() { if(Random(2)) Explode(18); }
Dasselbe nur mit Random.
Man kann natürlich auch die Explosionsstärke zufällig machen.
Code:
func Hit() { Explode(RandomX(20,30); }
Explodiert beim Aufprall mit einer Stärke von 20 bis 30.
Code:
func Hit() { Explode(20+Random(11)); }
Dasselbe mit Random.
Oder einen Winkel.
Code:
func Winkel() { angle = RandomX(88,92); }
Der Winkel zeigt nicht immer stur nach rechts sondern variiert 2° nach oben bzw. unten. "angle" müssen wir zuvor als local definieren.
Ich hab hier nur wenige der zahllosen Anwendungsmöglickeiten aufgezeigt die die Random Funktionen bieten. Man kann sie mit sehr vielen anderen Befehlen und Funktionen im Clonkscript kombinieren udn sozusagen hintereinanderschalten, man muss nur kreativ sein. Ich hoffe das Tutorial ist verständlich, die Materie ist ja an sich nicht sehr kompliziert. Und ich weiß Scriptkentnisse werden groß geschrieben aber der macht das immer klein.
Zuletzt von Extremclonk am So Aug 30, 2009 6:50 pm bearbeitet; insgesamt 6-mal bearbeitet
Bowserkoopa Staatsrat
Alter : 30 Anmeldedatum : 21.12.08
Thema: Re: Random und RandomX So Aug 30, 2009 5:35 pm
Ist wirklich einfach erklärt. Werde in Zukunft also auf RandomX setzen, ist ja besser. Und ich dachte mir gerade, ich schreibe mal heute ein Tutorial über Random. Tja, warst wohl schneller. Kann man eigentlich irgendwo Tutorials reservieren? Außerdem muss man das Tutorial noch in die Gesamtliste eintragen.
Extremclonk Staatsrat
Ort : Am Anti-Spam-Limes Anmeldedatum : 19.01.09
Thema: Re: Random und RandomX So Aug 30, 2009 5:39 pm
Tja Bowserkoopa wer zu spät kommt den bestraft das Leben. Nun ich denke wenn du klar sagst "Ich werde ein solches Tut machen, bitte kein solches Tut schreiben" wird das wohl respektiert werden, von mir zumindest. Aber auf ein "ich weiß nicht vllt. mach ich das mal" geb ich nix. Es ist schon in der gesamt Liste, als Mod kann ichs einfach eintragen.
Bowserkoopa Staatsrat
Alter : 30 Anmeldedatum : 21.12.08
Thema: Re: Random und RandomX So Aug 30, 2009 5:54 pm
Achso, wollte nur das mans nicht vergisst. Wusste erst nicht ob ich eben Random, oder SolidMasks nehme. Kamen ja verschiedene Vorschläge.
Sir_Jones Leutnant
Anmeldedatum : 18.08.09
Thema: Re: Random und RandomX So Aug 30, 2009 6:18 pm
Genau so hab eich mir das vorgestellt
Höfi SFT
Alter : 29 Anmeldedatum : 20.10.08
Thema: Re: Random und RandomX So Aug 30, 2009 6:22 pm
Also ich nutze für alles Random(), aber das ist Geschmacksache^^
Bowserkoopa Staatsrat
Alter : 30 Anmeldedatum : 21.12.08
Thema: Re: Random und RandomX So Aug 30, 2009 6:29 pm
Bis jetzt habe ich auch immer Random verwendet, aber nach dem lesen des tuts bin ich mir nicht sicher.
Extremclonk Staatsrat
Ort : Am Anti-Spam-Limes Anmeldedatum : 19.01.09
Thema: Re: Random und RandomX So Aug 30, 2009 6:39 pm
Na ja mit etwas geschick kann man auch random für alles verwenden, ich hab das Tut noch ergänzt aber ehrlich: Das ist doch keine schöne Syntax.
Bowserkoopa Staatsrat
Alter : 30 Anmeldedatum : 21.12.08
Thema: Re: Random und RandomX So Aug 30, 2009 6:44 pm
Also solange es gut erklärt ist, und schön mit Beispielen gezückt ist, ists ja Super. Du kannst ja noch hinzuschreiben, das Random für den Zufall und Warscheinlichkeit benutzt wird, denn als Anfänger weiß man nicht, was man mit ner zufälligen Zahl anfangen soll.
Rouby Major
Alter : 36 Ort : Bremen Anmeldedatum : 02.09.09
Thema: Re: Random und RandomX Mi Sep 02, 2009 4:23 pm
Zitat :
-Random kann keine negativen Zahlen ausgeben. Gibt man als iMaxVal eine negative Zahl ein kommt aberwitziger Blödsinn raus, allerdings kein Error, was die Sache noch fieser macht.
Das stimmt doch garnicht. Bei mir hat es immer gut funktioniert und die Doku gibt es sogar als Beispiel an:
Zitat :
SetXDir(RandomX(-20,+20)); Setzt die horizontale Geschwindigkeit des Objekts auf einen Zufallswert zwischen -20 und +20.
Extremclonk Staatsrat
Ort : Am Anti-Spam-Limes Anmeldedatum : 19.01.09
Thema: Re: Random und RandomX Mi Sep 02, 2009 4:27 pm
Wer lesen kann ist klar im Vorteil. Im ersten Zitat geht es um die Funktion Random im zweiten um RandomX. Das sind 2 verschiedene Funktionen.
Rouby Major
Alter : 36 Ort : Bremen Anmeldedatum : 02.09.09
Thema: Re: Random und RandomX Mi Sep 02, 2009 4:29 pm
*censored by Höfi*
Burning Thing Brigadegeneral
Alter : 26 Ort : Wien Anmeldedatum : 07.06.09
Thema: Re: Random und RandomX Mi Sep 02, 2009 4:54 pm
Ich finde das Tut gut und es hilft mir sehr.
Rouby schrieb:
Fällt das nicht genau in den Bereich Spam?
Zuletzt von Burning Thing am Fr Jul 30, 2010 6:25 pm bearbeitet; insgesamt 1-mal bearbeitet
Extremclonk Staatsrat
Ort : Am Anti-Spam-Limes Anmeldedatum : 19.01.09
Thema: Re: Random und RandomX Mi Sep 02, 2009 5:07 pm
Erstmal danke für das Lob und von wegen Spam, na ja ein Smiley ist selten ne richtige antwort aber in dem Fall, nun ja er hat einen guten Grund zu antworten und was er sagen will verstehn wir ja alle oder?
Gast Gast
Thema: Re: Random und RandomX Do Okt 15, 2009 3:24 pm
Ein sehr gutes Tut, welches richtig gut erklärt worden ist.
Voltago Brigadegeneral
Anmeldedatum : 25.09.09
Thema: Re: Random und RandomX So Okt 25, 2009 6:24 pm
Also wenn ich einem Clonk eine unbestimmte Anzahl an z.b. Pfeile geben will wär das dann:
CreateContents(AROW,pClonk)-> RandomX(0);
?
Flinti Kadett
Alter : 31 Anmeldedatum : 07.04.09
Thema: Re: Random und RandomX So Okt 25, 2009 6:33 pm
Hä? Nein.
Dein Script macht folgendes: "Erstelle ein Objekt der ID AROW in pClonk, rufe dann in diesem Objekt RandomX(0,0) auf. Gebe mir dann den Wert zurück" Was passiert? pClonk bekommt ein Objekt AROW(Was aber kein Pfeil ist!), und das ganze gibt 0 zurück, weil RandomX(0,0) nur 0 zurückgeben kann. Schriebest du also
Code:
var rnd = CreateContents(AROW,pClonk)-> RandomX(0);
ist rnd 0, wenn es AROW gibt, ansonsten bekommst du einen Fehler "Object Call: Target is Zero", weil die Engine kein Objekt der ID AROW erstellen konnte.
Erzeugen wir 10-20 Pfeile im Clonk:
Code:
CreateContents(ARRW,pClonk, RandomX(10, 20));
Voltago Brigadegeneral
Anmeldedatum : 25.09.09
Thema: Re: Random und RandomX So Okt 25, 2009 6:37 pm
Ja die ID ist nicht ganz richtig aber ich meine gehört zu haben, dass, wenn man 0 eingibt ein unbeliebige Zal an Objekten rauskommen :S
Flinti Kadett
Alter : 31 Anmeldedatum : 07.04.09
Thema: Re: Random und RandomX So Okt 25, 2009 6:39 pm
Wenn man wo 0 angibt?
Voltago Brigadegeneral
Anmeldedatum : 25.09.09
Thema: Re: Random und RandomX So Okt 25, 2009 7:06 pm
Voltago schrieb:
CreateContents(AROW,pClonk)-> RandomX(0);
hinter RandomX in den Klammern
Flinti Kadett
Alter : 31 Anmeldedatum : 07.04.09
Thema: Re: Random und RandomX So Okt 25, 2009 8:46 pm
Ne, du sagst nur, dass das erstellte Objekt RandomX(0) ausführen soll, wie ich oben beschrieben habe. Undefinierte Anzahl wäre eh Mist, was willst du mit 245572 Pfeilen?
Voltago Brigadegeneral
Anmeldedatum : 25.09.09
Thema: Re: Random und RandomX So Okt 25, 2009 9:30 pm
Also stimmt das jetzt mit der undefinierten Zahl?
Und das bringt was für KIs die dann eine FAST unerschöpfliche Quelle an Pfeilen hätten
Flinti Kadett
Alter : 31 Anmeldedatum : 07.04.09
Thema: Re: Random und RandomX So Okt 25, 2009 10:29 pm
Ich dachte, das sei klar geworden. Natürlich stimmt das nicht. Der KI kannst du einfach wieder neue Pfeile nachgeben, per Timer. Eine KI hat ja sowieso immer mindestens einen Timer.
Voltago Brigadegeneral
Anmeldedatum : 25.09.09
Thema: Re: Random und RandomX So Okt 25, 2009 11:24 pm
aber so gehts einfacher
Flinti Kadett
Alter : 31 Anmeldedatum : 07.04.09
Thema: Re: Random und RandomX Mo Okt 26, 2009 12:39 am
Nimm 1410065407 . Größte Zahl in Clonk, wenn ich mich nicht irre. Die Engine wird sich freuen !