ゴール:
私は現在、既存のライブラリ (迷路ジェネレーター) への追加に取り組んでいます。私がやろうとしているのは、迷路を保存する新しい方法を定義することです (一部はメモリに、一部はハードディスクに)。
-質問だけを見たい場合は、問題の段落にスキップしてください。まったく別のアプローチを提案する可能性があるため、追加情報を追加しました。
現在の状況:
迷路ジェネレーターが迷路を (メモリに) 格納する現在の方法は、マップを使用することです。Map には、それぞれが迷路内のピクセルの行を含む一連の InnerMapArrays が含まれています。ポイントは、次のように迷路で読み書きできます。
… //Code that creates maze map
map[x][y] = true;
Map クラスには、正しい配列 (x) を返すメソッドがあります。
public override InnerMapArray this[int x]
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get
{
return innerData[x];
}
}
次に、同様のメソッドを含む innerData で [y] を呼び出して、最終的に正しいピクセルを返します。
問題:
やりたいことに戻ると、迷路の一部をメモリに保存し、迷路の一部をディスクに保存する新しい Map タイプを作成します。たとえば、行ごとではなく、100x100 ピクセルのセットで迷路の領域をロードしたい。(下の画像では、例えばピクセル x=50,y=50 を変更すると赤い部分が読み込まれます)
Map/InnerMapArray 構造体の現在の実装では、これが許可されていません。私が欲しいのは、1 つのメソッドで渡される X と Y を実際に取得する方法です。おそらくうまくいくと思ったのは次のとおりです(動作しないコード):
public override InnerMapArray this[int x][int y]
{
get
{
//load a certain 100x100 part of the maze in memory and set it as current
//so while generating the maze pixels near the currently generated/read pixel
//can be read really fast while others far away won't use any memory
}
}
残念ながら、C# コンパイラはこれを許可していません。この問題を「いい」方法で解決するのに役立つ手がかりを誰かが持っていますか?