Autor Thema: Zufallsgenerator  (Gelesen 2700 mal)

ZAK

  • volljähriger Tentakel
  • *****
  • Beiträge: 503
  • Geschlecht: Männlich
    • Profil anzeigen
Zufallsgenerator
« am: 09. Juli 2012, 20:38:52 »
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

  • Administrator
  • alter Tentakel
  • *****
  • Beiträge: 2352
  • Geschlecht: Männlich
    • Profil anzeigen
    • Maniac Mansion Mania
    • E-Mail
Re: Zufallsgenerator
« Antwort #1 am: 09. Juli 2012, 20:48:20 »
[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

  • volljähriger Tentakel
  • *****
  • Beiträge: 503
  • Geschlecht: Männlich
    • Profil anzeigen
Re: Zufallsgenerator
« Antwort #2 am: 15. März 2013, 16:53:07 »
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

  • volljähriger Tentakel
  • *****
  • Beiträge: 779
  • Geschlecht: Männlich
    • Profil anzeigen
Re: Zufallsgenerator
« Antwort #3 am: 15. März 2013, 19:28:19 »
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.
« Letzte Änderung: 15. März 2013, 19:49:45 von Kiwa »
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

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 988
    • Profil anzeigen
Re: Zufallsgenerator
« Antwort #4 am: 27. März 2013, 14:58:11 »
Das geht auch einfacher:
Zufallsraum 8, 9, 10 oder 11:

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

Kiwa

  • volljähriger Tentakel
  • *****
  • Beiträge: 779
  • Geschlecht: Männlich
    • Profil anzeigen
Re: Zufallsgenerator
« Antwort #5 am: 27. März 2013, 21:10:32 »
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   :)
« Letzte Änderung: 28. März 2013, 12:06:59 von Kiwa »
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

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 988
    • Profil anzeigen
Re: Zufallsgenerator
« Antwort #6 am: 28. März 2013, 18:51:50 »
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).