0

マッチングゲームを作っています。私が達成しようとしているのは、以前にクリックされたボタンのタグが「現在」クリックされたボタンのタグと一致するかどうかを確認するチェックです。これらのタグが一致すると、両方のボタンがゲームのオプションではなくなったため、両方のボタンが無効になります。私の混乱の一部は、私の作業の大部分を台無しにすることなく、コードのこの部分をどこに統合するかということです。

Random myRandom = new Random();
    var buttons = new List<Button> { button1, button2, button3, button4, button5, button6, button7, button8, button9, button10, button11, button12 };
    var carString = new List<string> { "Camaro", "Mini Cooper", "Porsche 944", "Ford Focus", "Chevy Blazer", "Model T", "Camaro", "Mini Cooper", "Porsche 944", "Ford Focus", "Chevy Blazer", "Model T" };
    while (matchingButtonIndex < numOfButtons)
        {
            int index = myRandom.Next(carString.Count);
            var name = carString[index];
            if (name != null)
        {
        buttons[matchingButtonIndex].Tag = name;
        carString[index] = null;
        matchingButtonIndex = matchingButtonIndex + 1;
     }
   }
 }
    void SwitchTagWithText()
    {
        string text = lastButton.Text;
        lastButton.Text = lastButton.Tag.ToString();
        lastButton.Tag = text;
    }
    private void button1_Click(object sender, EventArgs e)
    {
        if (lastButton != null)
        {
            SwitchTagWithText();
        }

        lastButton = sender as Button;
        SwitchTagWithText();

        buttoncount++;
        label2.Text = buttoncount.ToString();
    }
4

3 に答える 3

0

これを処理するために新しいクラスを作成することをお勧めします。

public class ButtonManager {
    private Button lastButton;

    public void SwitchTagWithText(Button button){
        string text = lastButton.Text;
        lastButton.Text = lastButton.Tag.ToString();
        lastButton.Tag = text;

        // Or whatever the logic is you need.
    }

    public void ButtonClicked(Button button){
        this.SwitchTagWithText(button);
        // Or whatever the logic is you need.
    }
}

上記は不完全ですが、うまくいけば、主なアイデアが実現します。タグ値の読み取り/設定を処理し、ボタンを無効にするかどうかを決定するための別のクラスがあります。

ButtonManagerしたがって、from loadで、フォームのコード全体で使用できる新しいインスタンスを作成し、それをフィールドにします。

于 2012-12-14T14:35:31.363 に答える
0

クリックするたびにインクリメントするボタンカウント変数があります。だからあなたはそれを使うことができます:

private void button1_Click(object sender, EventArgs e)
{
    thisButton = sender as Button;

    buttoncount++;

    SwitchTagWithText(thisButton);

    if (buttoncount == 1)
    {
        lastButton = thisButton;
    }
    else if (buttoncount == 2)
    {
        if (lastButton.Tag == thisButton.tag)
        {
            // Disable both buttons.
        }
        else
        {
            // Switch buttons back
        }

        buttoncount = 0;
    }
}
于 2012-12-14T14:35:34.433 に答える
0

何かのようなもの:

private void button1_Click(object sender, EventArgs e)
    {
        if (lastButton != null)
        {
            SwitchTagWithText();
            var thisButton = sender as Button;
            if(thisButton.Text != lastButton.Text 
                 && thisButton.Tag.ToString() == lastButton.Tag.ToString())
            {
                //two different buttons with the same tag were clicked in succession
                thisButton.Enabled = false;
                lastButton.Enabled = false;
                lastButton = null;
                return;
            }
            lastButton = thisButton;
        }
        else
        {
           lastButton = sender as Button;
        }

        SwitchTagWithText();

        buttoncount++;
        label2.Text = buttoncount.ToString();
    }
于 2012-12-14T14:55:51.977 に答える