Maniac Mansion Mania Forum
MMM-Werkzeugkiste => Technik => Thema gestartet von: ZAK 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
-
[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]
-
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]
-
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 geht auch einfacher:
Zufallsraum 8, 9, 10 oder 11:
player.ChangeRoom(8 + Random(3));
-
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 :)
-
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).