5

配列内の列挙型の要素を取得する方法を理解する必要があります。基本的に、私は9x9ボタンのグリッドを持っています。これらの値を格納する2つの多次元配列があります。1つは彼らの名前を収容します(名前が43の場合)、それは5ダウン、4アクロス(0から始まるため)を意味します。名前も、配列内のそれ自体のELEMENTと同じです。

string[,] playingField = new string[9, 9];
enum CellType { Empty, Flag, Hidden, Bomb }
CellType[,] cells = new CellType[9, 9];

ボタンの名前はplayingFieldに保持されます。
各セルのステータスはセルに保持されます(空の場合、爆弾がある場合など)。

上記を提供したAbdElRaheimの功績。これを行う理由は、両方の配列で同じになるボタン名(要素名とまったく同じ)を取得できるようにするためです。
例:私はこれを行うことができます:

string dim1 = Convert.ToString(btn.Name[0]);
string dim2 = Convert.ToString(btn.Name[1]);
if (cells[Convert.ToInt32(dim1), Convert.ToInt32(dim2)] == CellType.Bomb)

(私のひどい変換を許してください。後で修正します;))そして上記のことはあなたがクリックしたセルがその下に爆弾を持っているかどうかを見ることができるということです。

しかし、私が今しなければならないことは、本質的にこれの逆です。上記では、要素名がボタン名と同じであるため、比較したい要素名がわかります。ただし、ここで行う必要があるのは、にあるすべての要素の要素を取得して、要素名(ボタン名)を見つけることです。Bombcells

これを行う方法がわかりません、私は試しました:

foreach (CellType Bomb in cells)
{

しかし、それは何もしません。'cells'ですべての'bomb'を見つけて、要素名を返す必要があります。そうすれば、その要素名を使用して文字列に変換し、StringToButtonメソッドを使用してボタンへの参照を作成できます。

これは、参考のために、そしてあなたがもう少しよく理解するのを助けるために、私が現在それをしている方法ですが、これは私がそれを続けたい方法ではないことに注意してください。私はそれを私が上で尋ねた方法でやりたいです:)

foreach (string i in minedNodes)
{
    Button buttonName = StringToButton(Convert.ToString(i));
    buttonName.Image = new Bitmap(dir + "mine.png");
}

ありがとう!

4

1 に答える 1

2

セル配列をトラバースする方法を探している場合は、次のようにします。

int oi, ii;
for (oi = 0; oi <= cells.GetUpperBound(0); ++oi)
{
    for (ii = 0; ii <= cells.GetUpperBound(1); ++ii)
    {
        System.Diagnostics.Debug.WriteLine(
            "Checking: " + oi + "," + ii + " : " + cells[oi, ii].ToString()
        );
    }
}

次に、目的の値に一致するcells [oi、ii]コンテンツへの参照のリストを保存できます。

于 2012-10-31T14:42:47.087 に答える