私の質問を記述するために私の特定のユースケースを使用しますが、いくつかのデフォルトに基づいてサブクラスを作成する他のアプリケーションがあるかもしれないので、 。これは「私の宿題をする」という質問ではありません。C#のサブクラスを使用した特定のクラスインスタンスの作成
私は現在、単純なテトリスゲームに取り組んでいます。ここでは、私のプレーフィールドをboolで満たされた2次元配列として定義しています。私は関数を追加し、私のコードを分割するクラスのグリッドでこれを行いました。テロミノが特定の場所に移動できるかどうかを確認するために、ある特定の場所にその上に別のグリッドを追加できるかどうかを確認できる機能を開発しました。
テトリミノ(グリッド)はあらかじめ定義された図形とサイズになっているので、各図形を1回作成するだけでよいので、現在の落下ブロックを私が望むように、あらかじめ定義したテトロミノを操作してください。
私はこれらの定義済みの形状を初期化する2つの方法を知っています:最初のグリッド(Columns、Rows)をテトミノごとに1回呼び出し、手動で正しい座標をtrueに設定するイニシャライザのメインTetrisクラスで開始するか、 charクラス(テロミノ名L、J、S、Z、T、X、I)を取得し、すでに構築した他のコンストラクタを使用して3x3または4x4グリッドを初期化し、次に手動で正しい座標を再び真にしてください。
これらの方法はどちらも、醜い感じのクラスに混乱を与えます。私はテクニカルにtetriminosが特定のタイプのグリッドであると考えて、サブクラスを使用する代わりに可能であることを望んでいた。
そうのような今まで私が見つけることができるようのためのサブクラスではコンストラクタのみ、サブクラスのコンストラクタに与えられたデフォルトパラメータまたはパラメータに渡すことができます。
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.
}
}
今、これが通過するために私を必要としますこれはあらかじめ設定されていると考えて奇妙に感じるテトミノの寸法について。私が好むものは、これらの行に沿ったものです。
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.
}
}
}
これらの行には何かがありますか?もしそうなら、それはどうすればできますか?そうでなければ、グリッドやテトリスクラスを混乱させないクリーンな代替ソリューションがありますか?私は別のことをしなければならないでしょうか?
テトロニノス - うわー、それは言葉です! –