IF-Forum

» IF-Forum - Autorencafé - Schreiben! - Ein Objekt per Zufall verstecken
AntwortenNeues ThemaNeue Umfrage

Ein Objekt per Zufall verstecken

Geschrieben um 04:53 am 19.07.2006 | Zitat | Editieren | Löschen
RobinOsaka
Mitglied
Student Gumby
Beiträge: 28

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...

Geschrieben um 08:06 am 19.07.2006 | Zitat | Editieren | Löschen
Martin
Avatar
Mitglied
Prof Gumby
Beiträge: 634

RobinOsaka:

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:


ObjVar Versteck

Aktion Anfang

Ausf

    Zufall Versteck (Stuhl Tisch Schrank Bett)

    ...

EndeAusf

Dann prüfst du bei jedem Objekt, ob es das Versteck ist:


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:


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:


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.)


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
Geschrieben um 15:43 am 19.07.2006 | Zitat | Editieren | Löschen
RobinOsaka
Mitglied
Student Gumby
Beiträge: 28

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. ;-)

Geschrieben um 16:43 am 19.07.2006 | Zitat | Editieren | Löschen
RobinOsaka
Mitglied
Student Gumby
Beiträge: 28

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.

AntwortenNeues ThemaNeue Umfrage
Powered by Spam Board SVN © 2007 - 2021
Impressum / Datenschutz