ランダムな迷路を作成するためにいくつかのアルゴリズムを使用するプログラムを作成する必要があります。 私は以下のクラスを定義しました:(アルゴリズムが使用するデータ型です.Tは特定の実装で使用される型です。たとえば、迷路を表すために2D行列を使用した場合、Tは2D点になります)C#generics in interface、generic algorithm
class Entry<T>
{
private T elem; //the data saved in each entry
public T Elem
{
get { return elem; }
set { this.elem = value; }
}
public Entry(T elem)
{
Elem = elem;
}
public override int GetHashCode()
{
return Elem.GetHashCode();
}
}
そして次のインタフェース:
interface IRandomGeneretableMaze<T>
{
void SetRandomEntrance();
void SetRandomExit();
List<Entry<T>> GetNextPossibleEntries(Entry<T> entry);
void MakePath(Entry<T> entry1, Entry<T> entry2);
void RemovePath(Entry<T> entry1, Entry<T> entry2);
}
それがランダムgeneratble迷路を供給しなければならない動作を規定します。
interface IMaze<T>
{
Entry<T> GetEntrance();
Entry<T> GetExit();
List<Entry<T>> GetNextMoves(Entry<T> entry);
}
これは、迷路が動作するいくつかの一般的な方法を定義します。 (迷路は、いくつかの異なる方法で実装されている)
interface IRandomMazeGenerator<T>
{
IMaze<T> Generate(Type t);
}
それだけ迷路ジェネレータを定義Tを作成する迷路のちょうどタイプであるが、各アルゴリズムは、異なる方法で実装されるであろう。 (マトリックスベースの実装の場合1、グラフベースの実装の場合2など)。アルゴリズムはありません(とすべきではない)しながら、具体的なTのために私に尋ねる
class MatrixMaze : IMaze<Point2D>, IRandomGeneratable<Point2D> {...}
class GraphMaze : IMaze<Node>, IRandomGeneratable<Node> {...}
私はメソッドを実装しようとすると、私の問題があり、コンパイラが生成されますのは、私は次のクラスを作ったと仮定しましょうTに依存していて、私は同じアルゴリズムを書こうとはしません。異なるTに対してのみです。 Tの独立して動作するコードの単一の部分を書く方法はありますか?
エラーがあるコードを追加することはできますか? – Kalten