Autor |
Nachricht |
< Ein Objekt per Zufall verstecken |
|
Verfasst am:
Mi, 19 Jul 2006 - 3:53
|
|
|
Wasserträger
Anmeldungsdatum: 16.07.2006
Beiträge: 28
Wohnort: Japan
|
|
Folgende Idee:
In einem Zimmer sind viele Moebelstuecke, die man untersuchen kann. Es gilt einen Gegenstand zu finden, der aber per Zufall einem der Moebelstuecke zugewiesen wird. Bei jedem Spiel liegt er also woanders.
Ich habe jetzt eine umstaendliche Loesung, indem es bei jedem Moebelstueck eine Prozentchance gibt, dass dort der Gegenstand gefunden wird. Man kann dann aber auch ein Moebelstueck x-mal untersuchen, bis der Gegenstand erscheint.
Das geht bestimmt auch eleganter... |
|
|
|
|
|
Verfasst am:
Mi, 19 Jul 2006 - 7:06
|
|
|
Experte
Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München
|
|
RobinOsaka hat folgendes geschrieben: | Ich habe jetzt eine umstaendliche Loesung, indem es bei jedem Moebelstueck eine Prozentchance gibt, dass dort der Gegenstand gefunden wird. Man kann dann aber auch ein Moebelstueck x-mal untersuchen, bis der Gegenstand erscheint. |
Ja, diese Lösung ist nicht ideal. Denn man kann nicht nur dasselbe Möbelstück so lange untersuchen, bis man den Gegenstand findet, sondern man kann auch alle vier Möbelstücke untersuchen, ohne dass man überhaupt etwas findet. (Das passiert in mehr als 30% aller Fälle, wenn man jedes der vier Verstecke einmal untersucht und die Chance etwas zu finden pro Möbel 25% ist!)
Du solltest am Anfang einmal festlegen, wo dein Objekt versteckt ist, und die in einer Objektvariable festhalten:
Code: |
ObjVar Versteck
Aktion Anfang
Ausf
Zufall Versteck (Stuhl Tisch Schrank Bett)
...
EndeAusf
|
Dann prüfst du bei jedem Objekt, ob es das Versteck ist:
Code: |
Deko Stuhl
Name 'Stuhl' m
Subst 'stuhl' m
Ort Billardsalon
NachAusf
(untersuchen)
wenn (Versteck = selbst) dann
sei Versteck 0
ObjNach Schlüssel1 beimir
Text 'Du findest einen Schlüssel!'
Ende
EndeAusf
Attr Sitz Ablage
|
Wenn ja, verschiebe das Objekt zum Spieler und lösche die Referenz auf das Versteck.
Dummerweise hast du jetzt denselben Code viermal, bei jedem Möbelstück. Du könntest den Code in eine Aktion auslagern:
Code: |
Aktion Möbel_untersuchen
Ausf
wenn (Versteck = aObj) dann
sei Versteck 0
ObjNach Schlüssel1 beimir
Text 'Du findest einen Schlüssel!'
Ende
EndeAusf
Deko Stuhl
Name 'Stuhl' m
Subst 'stuhl' m
Ort Billardsalon
NachAusf
(untersuchen)
Ausf Möbel_untersuchen
EndeAusf
Attr Sitz Ablage
|
(Achtung, hier musst du aObj prüfen!)
Oder du könntest eine Objektklasse definieren:
Code: |
ObjKlasse Möbel
NachAusf
(untersuchen)
wenn (Versteck = selbst) dann
sei Versteck 0
ObjNach Schlüssel1 beimir
Text 'Du findest einen Schlüssel!'
Ende
EndeAusf
Attr fest
Obj Stuhl (Möbel)
Name 'Stuhl' m
Subst 'stuhl' m
Ort Billardsalon
Attr Sitz Ablage
|
Und noch eine Variante, bei der man immer alle vier Möbel untersuchen muss. (Diese Methode wird sehr oft, wahrscheinlich zu oft verwendet.)
Code: |
Flagge abgesuchte_Möbel
ObjAttr abgesucht
ObjKlasse Möbel
NachAusf
(untersuchen)
wenn /(selbst abgesucht) dann
AttrHin selbst abgesucht
inkr abgesuchte_Möbel
wenn (abgesuchte_Möbel = 4) dann
ObjNach Schlüssel1 beimir
Text 'Du findest einen Schlüssel!'
Ende
Ende
EndeAusf
Attr fest
|
_________________ Every silver lining has a cloud. |
|
|
|
|
|
Verfasst am:
Mi, 19 Jul 2006 - 14:43
|
|
|
Wasserträger
Anmeldungsdatum: 16.07.2006
Beiträge: 28
Wohnort: Japan
|
|
Puh, das muss ich erstmal verdauen. Jedenfalls wieder sehr lehrreich, danke!
Vielen Dank fuer die ausfuehrlichen Antworten. Ich bin begeistert, dass dieses Forum lebendig ist und ich diese Hilfsbereitschaft erfahre. Ich werde versuchen mich zu zuegeln, um nicht bei jedem Problem gleich nachzufragen. ;-) |
|
|
|
|
|
Verfasst am:
Mi, 19 Jul 2006 - 15:43
|
|
|
Wasserträger
Anmeldungsdatum: 16.07.2006
Beiträge: 28
Wohnort: Japan
|
|
Ok, gerafft. Das Meiste zumindest.
Nicht klar ist mir der Unterschied zwischen 'selbst' und 'aObj', warum ist das nicht gleich.
Und 'Aktion' werde ich mir im Handbuch nochmal durchlesen. |
|
|
|
|
|