Hauptmenü

Neuigkeiten:

Bitte unterstützt uns und bestellt über diese Links bei Amazon  oder HumbleBumble!

Zufallsgenerator

Begonnen von ZAK, 09. Juli 2012, 20:38:52

Vorheriges Thema - Nächstes Thema

ZAK

Hi, wie schreibe ich es im Skript so, das ein Objekt per Zufall erscheint (ähnlich wie bei MM die Telefonnummer im Bad)?
Ich habe 3 Objektgruppen und es soll per Zufall ausgewählt werden welche dann erscheint.
Danke für die Hilfe
Ich bin mal kurz weg, mich suchen. Wenn ich zurück komme bevor ich wieder da bin, sagt mir bitte das ich warten soll!

Rocco

[ags]
int welches_object = Random(2);

if(!welches_object)
oObject1.Visible = true;
else if(welches_object == 1)
oObject2.Visible = true;
else
oObject3.Visible = true;
[/ags]

ZAK

Hallo Forum,

besteht eigendlich auch die Möglichkeit das ich beim Raumwechsel den Raum via Zufall auswählen kann?
Beipiel:
ich habe eine Maschine (Objekt oder hotspot) im Raum 1 und durch das drücken an einen Knopf wird der player zufällig an eine position in Raum 2, 3 oder 4 "tele"transportiert.

[ags]
function hKnopf_AnyClick()
{
  o01.Visible = true;
  aSound8.Play();
  Wait(20);
  o01.Visible = false;
  Wait(20);
  player.ChangeRoom(2, 120, 120) // oder(3, 120, 120) oder (4, 120, 120) ;
}[/ags]
Ich bin mal kurz weg, mich suchen. Wenn ich zurück komme bevor ich wieder da bin, sagt mir bitte das ich warten soll!

Kiwa

#3
Hallo ZAK,

mach mal folgendes:

int raumNummer = Random(19); //für 20 unterschiedliche Räume (0 bis 19), für eine andere Anzahl einfach die Zahl ändern

player.ChangeRoom(raumNummer, X, Y);

Ich habs ausprobiert, es funktioniert. Aber Vorsicht, das Ergebnis von Random kann auch 0 sein. Das must du per if-Abfrage abfangen (falls 0 unerwünscht ist).

Die Koordinaten X und Y kannst du natürlich auch per Zufall generieren lassen, sofern das gewollt ist. Dafür brauchst du dann natürlich auch 2 neue int Variablen. Falls irgendwelche Zufallszahlenbereiche nicht gewünscht sind, bzw. du z.B. nur eine Zahl zwischen z.B. 100 und 150 willst must du den Zahlengenerator (also das Random) in eine Schleife packen und diese erst verlassen wenn die Zahl im gewünschten Bereich liegt.

Beispiel:

bool weiter = true;
int raumNummer = 1;
while(weiter == true){
   raumNummer = Random(20);
   if (raumNummer > 10) weiter = false;
}
player.ChangeRoom(raumNummer, X, Y);

So wirst du nur in Räume teleportiert welche eine Raumnummer größer 10 haben. Für die X und Y Koordinaten gehe trivial vor.
Das Leben ist ein Adventure. Aber ohne Komplettlösung.

Für fast alles gibt es eine logische Erklärung. Für alles andere ein Placebo.

KhrisMUC

Das geht auch einfacher:
Zufallsraum 8, 9, 10 oder 11:

player.ChangeRoom(8 + Random(3));

Kiwa

#5
Zitat von: KhrisMUC in 27. März 2013, 14:58:11
Das geht auch einfacher:
Zufallsraum 8, 9, 10 oder 11:

player.ChangeRoom(8 + Random(3));

Jap, zugegeben. Das ist viel einfacher. Ich wusste nicht das man in der Klammer auch Operationen ausführen kann. -> Wieder was gelernt   :)
Das Leben ist ein Adventure. Aber ohne Komplettlösung.

Für fast alles gibt es eine logische Erklärung. Für alles andere ein Placebo.

KhrisMUC

Man kann jederzeit überall soviele Operationen ausführen, wie man will, solange am Schluss ein passender Wert herauskommt. Das muss keinesfalls vom ChangeRoom-Befehl eingeplant sein, man nutzt schlicht und einfach die Methode, wie beim Programmieren Zeilen verarbeitet werden.
Man kann natürlich auch dieses hier machen:
[ags]  int new_room = 8 + Random(3);
  player.ChangeRoom(new_room);[/ags]
Aber wenn der Wert danach nicht mehr gebracht wird, kann man das Ganze jederzeit zusammen ziehen.

Das hier geht auch:
[ags]  player.ChangeRoom((player.x >= 160) * 8 + (player.x < 160) * 10);[/ags]
Das schickt den player in Raum 8 oder 10, je nachdem, wo er sich befindet (true wird zu 1, false zu 0, falls mit anderen ints gerechnet wird).