# Generelles Problem: Entscheidungsfindung



## Rock45 (29. Nov 2015)

Hallo,

ich habe da ein Problem, welches mir immer wieder mal unter die Augen kommt und mich extrem nervt. Und zwar geht es um Entscheidungsfindungen. Beispw. kommt die Figur an eine Kreuzung. Sie kann sich entscheiden in welche Richtung sie laufen soll. Am Besten in die Richtung, in der in Sichtweite etwas wertvolles liegt. Falls es mehrer Richtung mit einem sichtbaren Gegenstand gibt, dann soll random entschieden werden. Genauso falls alle Gänge leer sind.
Dann soll auch noch geprüft werden, ob ein Wärter in dem Gang steht (in dem einfach im Array ein Feld weiter geprüft wird, ob ein Wärterobjekt vorhanden ist). Ist dies der Fall, soll die Figur die Flutcht ergreifen und wenn möglich nicht in die Richtung laufen, aus die die Figur gekommen ist.

Meine Methoden sehen schon in den einfachsten Fällen wie eine Katastrophe aus verschachtelten if-Anweisungen und Switchblöcken aus.

Das funktioniert dann in etwa so:
- Prüfe ob eine Kreuzung vorhanden ist
- Falls ja, dann prüfe ob es einen alternativen Weg gibt, vorzugsweise nicht der, aus dem man gekommen ist und natürlich...zufällig.
- Prüfe alle Richtungen, außer der aktuellen, ob ein Hindernis da ist
- prüfe nochmal ob ein Gegenstand in einem Weg liegt.
- Wenn ja, auch in den anderen wegen?
- Wenn nein, dann....

Und so läuft das in einer Tour.

Deshalb meine Frage:
Gibt es dafür irgendeine effiziente und vor allem elegante Lösung?
Mich nervten diese ganzen verschwachtelten if-Anweisungen und Riesenmethoden einfach so sehr, aber mir fiele nicht ein, wie ich das auch bei mehreren zu treffenden Entscheidungen kurz und knapp halten kann. 


Danke fürs lesen....


----------



## Khal Drogo (29. Nov 2015)

Hast du überhaupt Schleifen verwendet?
Ist jetzt ein bisschen schwer für uns, weil wir eigentlich nur raten können, was du gemacht hast.

Mit freundlichen Grüßen
Xelsarion


----------



## Major_Sauce (30. Nov 2015)

Nabend,

Ich denke, es wäre tatsächlich am einfachsten, einen Array anzulegen, der Zahlen beinhaltet. Länge des Arrays = Anzahl der möglichen Richtungen.

Nun machst du einfach eine for-Schleife, die eine Zahl "i" bis zur anzahl der möglichen Richtungen hochzählt.
In dieser schleife machst du die Abfrage, ob in gang "i" ein Gegenstand ist. Wenn ja, erhöhst du im array die zahl um 1.
Als nächstes machst du die Abfrage, ob da ein Wächter drin is. Wenn ja, verkleinerst du die Zahl im Array um 1. 
Das kannst du mit weiteren möglichen abfragen machen. Bei positiven sachen immer erhöhen, bei negativen immer verringern. 
Zum Beispiel: Schlafplatz vorhanden ? Wenn ja dann erhöhen.

Am Ende musst du nur noch durch den Array gehen und schauen welche id den größten Wert hat, diese ist dann die besste Richtung.

Ich hoffe du hast verstanden was ich meine, wenn nicht einfach fragen dass schilder ich das ein bisschen genaue.

mfg Major


----------



## Rock45 (30. Nov 2015)

@Xelsarion 
Tut mir Leid, dass ich dir jetzt kein Beispiel geschrieben habe. Hab eure Nachrichten jetzt erst gelesen und Major_Sauces Antwort finde ich perfekt so. 

@Major_Sauce 
Ja, ich denke ich verstehs und die Lösung halte ich für genial einfach. Also einfach gut. Danke dafür.


----------



## Major_Sauce (1. Dez 2015)

Kein Problem. Wenn du das nicht hinbekommst kannst dich gern nochmal melden, dann bekommst du Beispielcode bzw Pseudocode, kommt drauf an ob du mich grad auf der Arbeit erwischt oder nicht.

mfg Major


----------

