0

私のコードの一部には、変数の1つである唯一の違いであるifステートメントが何度も何度も繰り返されるセクションがあります。コードを構造化するより良い方法はありますか?

if (buttonArray[m, j].BackColor == levelTwo && buttonArray[m, a].BackColor == levelTwo
 && buttonArray[i, j].BackColor == levelTwo)

{
    buttonArray[i, j].BackColor = levelThree;
    buttonArray[m, j].BackColor = Color.Transparent;
    buttonArray[m, a].BackColor = Color.Transparent;
}

if (buttonArray[m, j].BackColor == levelThree && buttonArray[m, a].BackColor == levelThree
 && buttonArray[i, j].BackColor == levelThree)
{
    buttonArray[i, j].BackColor = levelFour;
    buttonArray[m, j].BackColor = Color.Transparent;
    buttonArray[m, a].BackColor = Color.Transparent;
}

if (buttonArray[m, j].BackColor == levelFour && buttonArray[m, a].BackColor == levelFour
 && buttonArray[i, j].BackColor == levelFour)
{
    buttonArray[i, j].BackColor = levelFive;
    buttonArray[m, j].BackColor = Color.Transparent;
    buttonArray[m, a].BackColor = Color.Transparent;
}

if (buttonArray[m, j].BackColor == levelFive && buttonArray[m, a].BackColor == levelFive
 && buttonArray[i, j].BackColor == levelFive)
{
    buttonArray[i, j].BackColor = levelSix;
    buttonArray[m, j].BackColor = Color.Transparent;
    buttonArray[m, a].BackColor = Color.Transparent;
}

if (buttonArray[m, j].BackColor == levelSix && buttonArray[m, a].BackColor == levelSix
 && buttonArray[i, j].BackColor == levelSix)
{
    buttonArray[i, j].BackColor = levelSeven;
    buttonArray[m, j].BackColor = Color.Transparent;
    buttonArray[m, a].BackColor = Color.Transparent;
}

if (buttonArray[m, j].BackColor == levelSeven && buttonArray[m, a].BackColor == levelSeven && buttonArray[i, j].BackColor == levelSeven)
{
    buttonArray[i, j].BackColor = levelEight;
    buttonArray[m, j].BackColor = Color.Transparent;
    buttonArray[m, a].BackColor = Color.Transparent;
}
4

3 に答える 3

4

メソッドを作成できます(ただし、レベルのタイプはわかりません...)

private void CheckLevel(int levelIndex)
{
    if (buttonArray[m, j].BackColor == levelArray[levelIndex] && buttonArray[m, a].BackColor == levelArray[levelIndex] 
        && buttonArray[i, j].BackColor == levelArray[levelIndex])
    {
        buttonArray[i, j].BackColor = levelArray[levelIndex + 1];
        buttonArray[m, j].BackColor = Color.Transparent;
        buttonArray[m, a].BackColor = Color.Transparent;
    }

}

そしてあなたのコードで:

CheckLevel(LevelTwoIndex);
CheckLevel(LevelThreeIndex);
CheckLevel(LevelFourIndex);
于 2013-02-06T19:01:36.610 に答える
2

何かが起こるたびに、これらすべてのボタンの色を循環させようとしているようです。

以下は、その概念をより重要に書き直したものです。

これには、使用される順序private Queue<Color> colors = new Queue<Color>(); で循環しているすべての色が含まれます。

フォームが最初に作成されたときに入力できます。

colors.Enqueue(Color.Red);
colors.Enqueue(Color.Yellow);
colors.Enqueue(Color.Violet);
//Add other colors

次に必要なのは、「次の」色を任意の数のコントロールに適用するメソッドです。

public void ApplyNextColor(params Control[] controls)
{
    Color nextColor = colors.Dequeue();
    colors.Enqueue(nextColor);//add to end so that we cycle; 
    //you can optionally remove and do nothing if there are not items.

    foreach (Control control in controls)
        control.BackColor = nextColor;
}

次に、たとえばボタン クリック イベントまたはタイマー ティック イベントからこれを呼び出すことができます。

ApplyNextColor(buttonArray[m, j], buttonArray[m, a]);
于 2013-02-06T19:09:31.070 に答える
0
if (buttonArray[m, j].BackColor == buttonArray[m, a].BackColor 
        && buttonArray[m, a].BackColor == buttonArray[i, j].BackColor) {
    if (buttonArray[m, j].BackColor == levelThree) { // or a switch - case
        ....
    }
}
于 2013-02-06T19:05:08.770 に答える