使用复选框布尔值的评分函数



我对编码还很陌生,在使用已更改的布尔状态的触发器为我的"发现差异游戏"制作评分系统时遇到了一些问题。
我已经声明了一个public int并将其用作起始值,然后我期望的是当播放器按下我设置为透明的图像框时,它会选中复选框,因此当选中复选框时,它会减少int值,依此类推。
但是,当int的值耗尽时,它不会生成向玩家显示他/她已完成游戏的消息框。

我已经尝试制作自己的代码,就在下面:

public partial class FTD_PG : Form
{
    public int Check = 5;
    private void check_1_Click(object sender, EventArgs e)
    {
        this.check_1_stat.Checked = true;
        Check--;
    }
    private void check_3_Click(object sender, EventArgs e)
    {
        this.check_3_stat.Checked = true;
        Check--;
    }
    private void check_2_Click(object sender, EventArgs e)
    {
        this.check_2_stat.Checked = true;
        Check--;
    }
    private void check_4_Click(object sender, EventArgs e)
    {
        this.check_4_stat.Checked = true;
        Check--;
    }
    private void check_5_Click(object sender, EventArgs e)
    {
        this.check_5_stat.Checked = true;
        Check--;
    }
    private void WinState()
    {
        if (Check == 0)
        {
            MessageBox.Show("Congrats you win the game!");
        }
        else
        {
            return;
        }
    }
}

我期望的只是修复评分系统,仅此而已。

提前非常感谢你。

你从不调用 WinState,这就是为什么它从不显示消息框。添加 WinState((;每次减少检查后,它都会起作用。

将 Check--; 替换为 WinState((; 并递减并签入该方法以使代码看起来更好:

    private void WinState()
    {
        Check--;
        if (Check == 0)
        {
            MessageBox.Show("Congrats you win the game!");
        }
    }

我会使用字典将每个 PictureBox 与其各自的复选框相关联。 此外,我会将 PictureBox 的所有 Click(( 事件连接到窗体的 Load(( 事件中的同一处理程序。 您可以使用您建立的命名模式搜索控件。 单击每个控件时,将其从字典中删除。 当字典为空时,游戏已经获胜:

public partial class FTD_PG : Form
{
    public FTD_PG()
    {
        InitializeComponent();
    }
    private Dictionary<PictureBox, CheckBox> differences = new Dictionary<PictureBox, CheckBox>();
    private void FTD_PG_Load(object sender, EventArgs e)
    {
        for(int i = 1; i <=5; i++)
        {
            PictureBox pb = this.Controls.Find("check_" + i.ToString(), true).FirstOrDefault() as PictureBox;
            CheckBox cb = this.Controls.Find("check_" + i.ToString() + "_stat", true).FirstOrDefault() as CheckBox;
            if(pb != null && cb != null)
            {
                differences.Add(pb, cb);
                pb.Click += Pb_Click;
            }
        }
    }
    private void Pb_Click(object sender, EventArgs e)
    {
        PictureBox pb = sender as PictureBox;
        if (differences.ContainsKey(pb))
        {
            CheckBox cb = differences[pb];
            cb.Checked = true;
            differences.Remove(pb);
            if (differences.Count == 0)
            {
                MessageBox.Show("Congrats you win the game!");
            }
        }
    }
}

最新更新