正直言って、私はおそらくそこに悪いタイトルがあるので、説明することができます。 (タイトルの提案は大歓迎!)C# - カスタムクラスのリスト内の座標に基づいてダイヤモンド形状の半径を選択してください
まず最初に、私は「リスト」を適切にTileListという名前で持っています。 Tileはいくつかの変数を含むクラスですが、重要なものはpublic int xCoorとpublic int yCoorです。
TileListは自動的に外部関数によって埋められます。この場合、Tileクラスの100個のインスタンスで満たされています。それぞれxCoorとyCoorのxCoorsと0〜9のyCoors、0〜9のyCoors、基本的に10x10グリッドをシミュレートします。
外部関数で埋められているため、必ずしも10x10であるとは限りません.5x15または20x20などとすることもできます。
私は1つは、これまで完璧に動作することをFindTile-という名前の特定のタイルを、グラブ機能を持っている...
しかし、今、私は出発点に基づいて、グリッドからダイヤモンド形状を選択1を必要とし、半径。そして、私自身の試み、FindDiamond関数..は非常に乱雑であり、永久にロードされます。実際にはうまくいきません。
これは私が何をしたいのか、基本的である:Grid example
コードがダウンして以下の通りです:率直
public class Tile
{
public int xCoor;
public int yCoor;
//more variables
}
public class TileFinder
{
public List<Tile> TileList = new List<Tile>();
//Give back tiles when generated
public void SaveGeneratedTiles(List<Tile> Save)
{
TileList = Save;
}
public Tile FindTile(int tileX, int tileY)
{
for (int i = 1; i < TileList.Count; i++)
{
if (TileList[i].xCoor == tileX && TileList[i].yCoor == tileY)
{
return TileList[i];
}
}
return null;
}
public List<Tile> FindDiamond(int tileX, int tileY, int radius)
{
List<Tile> ReturnList = new List<Tile>();
for (int r = 0; r <= radius; r++)
{
int curx = tileX + r;
int cury = tileY;
if (curx == tileX) { FindTile(curx, cury); }
else
{
while (curx != -r)
{
curx--;
cury--;
ReturnList.Add(FindTile(curx, cury));
}
while (cury != -r)
{
curx++;
cury--;
ReturnList.Add(FindTile(curx, cury));
}
while (curx != r)
{
curx++;
cury++;
ReturnList.Add(FindTile(curx, cury));
}
while (curx != -r)
{
curx--;
cury++;
ReturnList.Add(FindTile(curx, cury));
}
}
}
return ReturnList;
}
}
、私は終わりを行い、この作品を作るためのより良い方法、を探しています私のコードの他の部分は、実際にはこれも最良の方法ではないかもしれませんが、これを介して自分のやり方をやっています。 :)
TL;一番など、私はアドバンスウォーズのようなものをエミュレートしようとしている、と私は戦争のビジョンの霧のために範囲を選択するために、ダイヤモンド形状を必要とする、間接的な攻撃DR
は、外部関数によって自動的に満たされます。今私はそれを質問に追加したはずなので、私はそれを編集したはずです。0(1)操作対0(n)線形検索の意味は何ですか? ..また、インデックス1でその間違いを抱えてうれしく思いました。それは本当に0だったはずです。ありがとう。とにかく、私はこれを試してみる、これは実際には良いアイデアのように聞こえる。私もダイヤモンドの内側が欲しいということを忘れないでください。しかし、私はもうちょっと小さな半径でこれをループすることができます。 – Speedy
これは受け入れられた答えだと思っています.2D配列は確かに良い選択であり、私はすでに2次元配列に変更して以来、私のコードを半減しました。 ^^;ありがとう、ロテム – Speedy