Hallöle,
ich versuche immer, möglichst objektorientiert zu arbeiten und scheitere dennoch immer an meinen eigenen Konzeptverstrickungen. Deshalb möchte ich gerne eine kleine Diskussion über das sinnvollste Konzept starten, wie man ein Mühlespiel mit 0 bis 2 Computergegnern erarbeitet. Dies soll eher auf theoretischer als auf codereicher Ebene geschehen.
0 bis 2 Gegner meint, dass man entweder zu zweit als Menschen spielen, zwei Computern beim Spielen zusehen oder gegen einen Computer spielen kann.
Ich möchte einmal meine unmöglich umsetzbare Idee offenbaren, welche mich dazu brachte, dieses Thema zu eröffnen:
Ich habe einen ViewController, das ist die Startklasse, der Controller, der View und Data verwalten kann. Ja, es handelt sich um eine iOS-App (nicht weiter relevant, das geht ja bei jeder anderen Plattform so), der eine oder andere hat es vielleicht am Namen dieser Klasse erkannt. Nun hatte ich mir für die Daten folgendes überlegt:
[ul]
[li]Mill (eng. Mühle) ist die Klasse, welche alle anderen Datenklassen enthält. Das sind also ein Player-Array, das Feld und möglicherweise Infos, wer am Zug ist, usw.
[/li][li]Field enthält einen Array aus allen Feldern, die verfügbar sind. Wie man das bei nem Mühlefeld clever in ein- oder mehrdimensionale Array packt, das ist ja eher trivial, sei hier mal nicht diskutiert.
[/li][li]Player ist die Spielerklasse, die Methoden wie das Setzen von Zügen (Mühle hat drei Phasen, Steinsetzen, Steinverschieben und Springen) enthält. Ferner gibt es ja noch statische Informationen wie den Namen, die Anzahl verfügbarer Steine und derartigen Krimskrams.
[/li][li]KI erbt vom Player und hat im Prinzip also die gleichen Methoden. Das heißt es ist auch Teil des Player-Arrays, da es sich streng genommen um einen solchen handelt. Es enthält zusätzlich das KI-“Gehirn”, also komplexe Methoden zum Nachdenken, was man denn setzen könnte.
[/li][/ul]
So und hier bin ich auch schon beim Problem angelangt. Die Methoden zum Setzen von Zügen können gar nicht im Player drin sein, da es zum Beispiel gar nicht auf das Feld zugreifen kann, da Player und Field ja in Mill initialisiert wurden. Diese Methoden könnten im Notfall ja auch in Mill direkt drin sein, aber dann ist die Auslagerung auch nicht ziemlich konsequent.
Das größere Problem ist hier die KI. Sie hat ja die gleichen Probleme. Sie kann nicht auf das Feld zugreifen.
Wie würdet ihr das lösen? Ich möchte nicht, dass am Ende wieder alles nur in der Hauptklasse herumliegt, das ist ja nicht der Sinn der Sache.
Schöne Grüße
FranzFerdinand