Klassen-Objekt übergeben
-
Mahlzeit zusammen,
ich bin noch immer beschäftigt mit meinem Schachprojekt.Ich habe für jede Figur eine Klasse, in der das Feld, Farbe der Figur (s/w) etc. gespeichert wird. Zur Zeit sitze ich an einer Methode, die alle möglichen Bewegungen einer Figur als int-Array zurückgeben soll (so kann ich alle möglichen Bewegungen als Felder blau markieren).
Nun, dazu muss ich prüfen, ob auf speziellen Feldern irgendeine andere Figur steht und wenn ja, was für eine (die eigene oder die des Gegners). Dazu habe ich mir überlegt, eine Klasse AllocationChess anzulegen, in der zu jedem Feld (1-64) ein Objekt zugewiesen wird (Entweder ein Figur-Objekt, oder wenn auf dem Feld kein Objekt vorhanden ist NULL). Da ich noch nie mit der Übergabe von Objekten gearbeitet habe, bin ich jetzt etwas verwirrt, wie das ganze funktioniert.
Sollte ich am besten 64 neue Figuren-Objekte erzeugen, wobei der Index der Objekte dann für das Feld steht? Oder sollte ich das Ganze doch lieber anders anpacken?
Gruß,
crephix
-
Hat niemand eine Idee??
-
scheinbar fehlen die hier einfach nur ein paar Grundlagen.
Könntest du das Schachbrett selber als 2D Array programmieren.
Ich würde also eine abstrakte Klasse Schachfigur mit abstrakten Methoden wie Move, Color (Schwarz oder Weiß) ... anlegen.
Die einzelnen Figuren wie Springer etc erben dann von Schachfigur und überladen die einzelnen Methoden.
Alternativ könntest du anstatt eine Move methode auch irgendwas anbieten womit was die Bewegungsmöglichkeiten der Figur liefert (das wäre wohl sogar nach dem Model, View, Control prinzip besser).auf alle fälle hast du dann irgendwo das Schachbrettarray mit referenzen auf die Figuren
z.b:
public class ChessFigure { .... } ... public class ChessBoard { ChessFigure[][] = new ChessFigure[8][]{ new ChessFigure[8] , /** Das ganze bitte 8 mal oder initalisiere im Constructor mit einer Schleife o.ä.**/..} }
Vorteil der Variante ist, das man sehr schnell ausgehend von einer Figur herausfinden kann ob auf den Zielfeld der Bewegungen schon figuren stehen. Ausserdem kann somit auf jeden Feld nur 1 Figur stehen.
Nachteil ist der erhöhte Speicherverbrauch. ich habe 64 Referenzen bei denen im besten Fall nur 32 belegt sind. Zusätzlich könnten durch Programmierfehler die selbe Figur auf mehreren Feldern stehen.Eine weitere möglichkeit bestände darin das Feld auf dem eine Figur steht direkt in der Figur zu speichern. Zusätzlich könnte es noch ein Sonderfeld geben auf dem die Figur steht wenn sie geschlagen ist. Da musst du aber wenn du eine Figur ziehst, für jede Figur prüfen ob sie auf einem Zielfeld steht. Das ganze hat aber den nachteil das durch programmierfehler auf den gleichen Feld zwei Figuren stehen könnten.
-
@Fedaykin:
Für C++/CLI fehlt bei der Klassen Definition noch ein ref / value und new soll gcnew sein. Nicht vergessen, hier ist C++/CLI...
-
hatte vergessen zu erwähnen das mein Beispiel in C# ist, die umstrickung zu CLI sollte ja prinzipiell nicht so schwer sein. Es fehlen sicherlich auch noch ein paar ^ Aber hier soll der Threadersteller mal selber schauen wie man sowas macht da die meisten online beispiele für irgendwas eh in C# sind.
-
hatte vergessen zu erwähnen das mein Beispiel in C#
Ah, daran hatt eich gar nicht gedacht...