Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用复选框bool值的评分函数_C#_Function - Fatal编程技术网

C# 使用复选框bool值的评分函数

C# 使用复选框bool值的评分函数,c#,function,C#,Function,我对编码还是一个新手,在使用已更改的布尔状态触发器为我的“点差游戏”制作计分系统时遇到了一些问题。 我已经声明了一个public int,并将其用作起始值,然后我期望的是,当播放器按下一个我设置为透明的图像框时,它会选中复选框,因此当选中复选框时,它会递减int值,依此类推。 但是当int的值被耗尽时,它不会生成消息框,向玩家显示他/她已经完成了游戏 我已经尝试编写自己的代码,如下所示: public partial class FTD_PG : Form { public int Ch

我对编码还是一个新手,在使用已更改的布尔状态触发器为我的“点差游戏”制作计分系统时遇到了一些问题。
我已经声明了一个
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();每次减量检查后,它都会工作

更换支票--;与WinState();和减量&检查该方法以使代码看起来更好:

    private void WinState()
    {
        Check--;
        if (Check == 0)
        {
            MessageBox.Show("Congrats you win the game!");
        }
    }
我将使用a将每个PictureBox与其各自的复选框相关联。此外,我还将PictureBoxes的所有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!");
            }
        }
    }

}
公共部分类FTD\u PG:表格
{
公共FTD_PG()
{
初始化组件();
}
私有字典差异=新字典();
私有无效FTD_PG_加载(对象发送方,事件参数e)
{

对于(int i=1;i),MessageBox显示在
WinState()
方法中,但您从未调用过它。有什么建议我必须把它放在哪里吗?呵呵~有用!非常感谢!下次XD看起来有点复杂时,我会尽量对细节更加谨慎,因为我从来不知道“字典”函数,但我下次会尝试。感谢您引入新类型的函数^^^没问题。字典非常有用,可用于许多不同的情况。它是您技能集中的一个好工具。祝您好运!