Ich werde meinen spezifischen Anwendungsfall verwenden, um meine Frage zu beschreiben, aber es sollte breiter anwendbar sein, wenn man bedenkt, dass andere Anwendungen eine Unterklasse basierend auf einigen Standardeinstellungen erstellen möchten . Dies ist keine Frage "mach meine Hausaufgaben für mich".Erstellen bestimmter Klassen Instanzen durch eine Unterklasse in C#
Ich arbeite gerade an einem einfachen Tetris-Spiel, bei dem ich mein Spielfeld als ein zweidimensionales Array mit Bools definiert habe. Ich habe dies in einem Klassenraster getan, um Funktionen hinzuzufügen und meinen Code zu teilen. Ich habe eine Funktion entwickelt, mit der ich überprüfen kann, ob ich an einem bestimmten Ort ein weiteres Gitter hinzufügen kann, um zu überprüfen, ob ein Tetromino an eine bestimmte Stelle verschoben werden kann. (nicht beide Bools an einer Stelle)
Da Tetrominos (auch ein Gitter) in vordefinierten Formen und Größen vorkommen, ist es nur notwendig, jede Form einmal zu erstellen, und dann kann ich meinen aktuellen fallenden Block auf eine Kopie von setzen das vordefinierte tetromino zu manipulieren, wie ich es wünsche.
Jetzt kenne ich zwei Möglichkeiten, diese vordefinierten Formen zu initialisieren: Start in der Haupt-Tetris-Klasse in einem Initialisierer, wo ich ein Raster (Spalten, Zeilen) für jedes Tetromino einmal aufruft und manuell die richtigen Koordinaten auf true oder Erstellen eines zweiten Konstruktors in der Grid - Klasse, der ein char (die Tetromino - Namen L, J, S, Z, T, X, I) verwendet und ein 3x3 - oder 4x4 - Raster mit dem anderen Konstruktor initialisiert, den ich bereits erstellt habe korrigiere die Koordinaten wieder auf wahr.
Beide Methoden hinzufügen Unordnung zu diesen Klassen, die sich hässlich anfühlt. Ich hatte gehofft, dass es möglich wäre, stattdessen eine Unterklasse zu verwenden, wenn man bedenkt, dass die tetriminos technisch eine Art von Gitter sind.
nun der Konstruktor in der Unterklasse für so weit ich nur finden können auf Standardparameter oder Parameter übergeben können, die an die Unterklasse Konstruktor gegeben wurden, etwa so:
class Grid
{
bool[,] grid;
public Grid(int x, int y)
{
// Creates grid, fills it with bools.
}
}
class Block : Grid
{
public Block(char blockShape, int x, int y) : base(x, y)
{
// Add additional logic here.
}
}
Jetzt würde mich das erfordern passieren auf die Dimensionen des Tetromino, das sich seltsam anfühlt, wird dies voreingestellt sein. Was ich sehr bevorzugen würde ist etwas in dieser Richtung:
class Block : Grid
{
public Block(string blockShape)
{
if ("IX".Contains(blockShape))
{
this = new Grid(4, 4);
// Add additional logic here.
}
if ("JLSZT".Contains(blockShape))
{
this = new Grid(3, 3);
// Add additional logic here.
}
}
}
Ist etwas in dieser Richtung möglich? Wenn ja, wie könnte es getan werden? Wenn nicht, gibt es eine saubere alternative Lösung, die meine Grid- oder Tetris-Klasse nicht stört? Sollte ich etwas anderes machen?
Tetrominos - Wow, das ist ein Wort! –