c#每个按钮的个别变量

问题描述 投票:-1回答:1

我目前正在Windows窗体中制作一个小游戏,只是为了好玩。

你必须点击按钮来“破坏”他们,如果他们失去足够的健康,他们就会被摧毁。所有这一切都工作正常,但我在第一级只有50个按钮,因此我有每个按钮:

RGB颜色有3个变量,button_click事件有1个方法,健康再生有1个计时器+方法。

我想创建一个类或编辑按钮类,为每个按钮提供这些属性。

我找到了这行代码来为表单中的每个按钮着色,但这对我帮助不大。 GetSelfAndChildrenRecursive(this).OfType<Button>().ToList().ForEach(b.BackColor = Color.FromArgb(255, 0, 0));

我的每个按钮的代码:

按钮类变量:( button1的RGB颜色的变量)

public int btn1r = 0;
public int btn1g = 255;
public int btn1b = 0;

button1_click事件:(点击后,将其颜色从绿色更改为红色)

if (btn1g > 11)
            btn1g = btn1g - 10;
        if (btn1r < 245)
            btn1r = btn1r + 10;
        if (btn1r > 245)
            button1.Visible = false;

        button1.BackColor = Color.FromArgb(btn1r, btn1g, btn1b);

timer_tick事件:(随着时间的推移将颜色从红色变回绿色)

if (btn1g > 11 && btn1g < 245)
            btn1g += 2;
        if (btn1r < 245 && btn1r > 11)
            btn1r -= 2;

        button1.BackColor = Color.FromArgb(btn1r, btn1g, btn11b);

我知道我的代码很笨拙,现在它有效。 :d

这是游戏板的截图。正如你所看到的那样,有很多按钮,可以玩更多关卡。我真的不知道为每个按钮制作数百个颜色变量,定时器和事件.. ^^ enter image description here

c# forms button
1个回答
0
投票

你的问题缺少细节,但我猜你想要的东西:

public class GameButton : System.Windows.Forms.Button
{
    System.Windows.Forms.Timer timer;

    public GameButton(string text, Rectangle rect, Color backgroundColor, TimeSpan interval)
        : base()
    {
        Location = rect.Location;
        Size = rect.Size;
        Text = text;
        BackColor = backgroundColor;

        timer = new Timer();
        timer.Interval = Convert.ToInt32(interval.TotalMilliseconds);
        timer.Tick += Button_Tick;
        timer.Start();
    }

    private void Button_Tick(object sender, EventArgs e)
    {
        BackColor = ????;
    }

    public new void Dispose()
    {
        timer.Dispose();
        base.Dispose();
    }
}

在您的游戏逻辑中,您将执行以下操作:

 gb = new GameButton("One", new Rectangle(120, 12, 80, 20),
      new Color(???), new TimeSpan(0, 0, 2));
 this.Controls.Add(gb);

然后摆脱游戏按钮:

this.Controls.Remove(gb);
gb.Dispose();
© www.soinside.com 2019 - 2024. All rights reserved.