Der ein oder andere möchte sicherlich auch mal eine Zufallszahl mit einer Picaxe berechnen.
Jeder kennt dazu den englischen Begriff : Random
Auch bei der Picaxe heißt dieser Befehl : Random w0
Für diese Funktion wird bei der Picaxe eine WORD-Variable benötigt.
Warum ?
Das ist der Knackpunkt , ..... "Pferdefuss" ..... bei der Picaxe :(
Die Picaxe generiert eine Zufallszahl im Bereich von 0 - 65535 !
Möchte man jetzt jedoch nur eine Zahl in einem bestimmten Bereich , fangen jetzt viele an
das mit IF Anweisungen zu lösen .
IF w0 > xxxx then ...
IF w0 > yyyyy then ...
IF w0 > zzzzz then ...
IF w0 > nnnn then ...
kann man natürlich machen ... :? .... jedoch nicht der effektivste Weg und kostet einiges
an Speicherkapzität.
Es gibt natürlich einen "Trick" , wie man dies etwas eleganter lösen kann ;)
Dazu bedient man sich der Funktion : MOD ( Modulo )
MOD ist die Berechnung eines Restwertes.
Hier mal eine Seite , auf der man online die Funktion MOD probieren kann mit Erklärung :
http://www.mathe24.net/modulo.html?action=do
Und hier jetzt mal ein Beispielcode für die Picaxe , wo eine Zufallszahl von 1-18 generiert werden soll :
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#picaxe 08M2
symbol Zufallszahl = w0 ' = b0 + b1
symbol neue_Wunschzahl = b2 ' = w1
symbol vorherige_Wunschzahl = b3 ' = w1
do
random Zufallszahl ' Zufallszahl errechnen lassen ( 0 -65535)
neue_Wunschzahl=Zufallszahl // 18+1 ' Umrechnen / Begrenzen auf Wunschbereich ( 1-18 )
if neue_Wunschzahl<>vorherige_Wunschzahl then ' Abfragen ob neue Zufallszahl <> alte Zufallszahl ( keine Wiederholung )
vorherige_Wunschzahl=neue_Wunschzahl ' neue Zufallszahl merken
sertxd (#neue_Wunschzahl,13,10) ' Zufallszahl über Tx ausgeben ( 4800 , n , 8 , 1 )
endif ' Abfrage schliessen
loop
Einzig "Besonderheit" hierbei ist , das ich bei jeder neuen generierten Zufallszahl vor der Übernahme erst
abfrage , ob diese <> als die vorherige Zufallszahl war um nicht 2 auf einander folgende gleiche Zahlen zu bekommen. :ugeek:
Um eine Zufallszahl innerhalb eines Bereichs zu generieren muß man auch hier ein wenig tricksen ....
.... da die Picaxe nur von 0 bis 65535 kann.
Möchte man jetzt z.B. eine Zufallszahl von 5 bis 10 , müßte man eine Zahl mittels MOD von 1-6 generieren lassen.
Diesen Wert dann mit 4 addieren , so das man einen Wertebereich von 5-10 erhält.
Beispiel :
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#picaxe 08M2
symbol Zufallszahl = w0 ' = b0 + b1
symbol neue_Wunschzahl = b2 ' = w1
symbol vorherige_Wunschzahl = b3 ' = w1
do
random Zufallszahl ' Zufallszahl errechnen lassen ( 0 -65535)
neue_Wunschzahl=Zufallszahl // 6+1 ' Umrechnen / Begrenzen auf Wunschbereich ( 1-6 )
if neue_Wunschzahl<>vorherige_Wunschzahl then ' Abfragen ob neue Zufallszahl <> alte Zufallszahl ( keine Wiederholung )
vorherige_Wunschzahl=neue_Wunschzahl ' neue Zufallszahl merken
neue_Wunschzahl=neue_Wunschzahl+4 ' Zufallszahl mit Startwert addieren ( 4 + xxx => Bereich: 5 - 10 )
sertxd (#neue_Wunschzahl,13,10) ' Zufallszahl über Tx ausgeben ( 4800 , n , 8 , 1 )
endif ' Abfrage schliessen
loop