Функция оценки с использованием значения bool CheckBox - PullRequest
2 голосов
/ 13 апреля 2019

Я все еще довольно новичок в кодировании, и я столкнулся с некоторой проблемой при создании системы подсчета очков для моей "игры на разницу", используя измененный триггер из состояния bool.
Я объявил public int и используя его в качестве начального значения, то, что я ожидаю, это когда игрок нажимает на поле изображения, которое я установил прозрачным, он проверяет CheckBox, поэтому, когда CheckBox был отмечен, он уменьшает значение int и так далее.
Но когда значение int исчерпано, не появляется MessageBox, который показывает игроку, что он / она закончил игру.

Я уже пытался создать свой собственный код, как показано ниже:

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;
        }
    }
}

Я ожидаю просто исправить систему оценки, вот и все.

СпасибоВы очень заранее.

Ответы [ 2 ]

0 голосов
/ 13 апреля 2019

Я бы использовал Словарь , чтобы связать каждый PictureBox с соответствующим CheckBox. Кроме того, я бы подключил все события Click () PictureBoxes к одному и тому же обработчику в событии 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!");
            }
        }
    }

}
0 голосов
/ 13 апреля 2019

Вы никогда не вызываете WinState, поэтому он никогда не показывает окно сообщения.Добавить WinState ();после каждого уменьшения значения Check, и оно будет работать.

или

replace Check--;с WinState ();и уменьшаем и проверяем этот метод, чтобы код выглядел лучше:

    private void WinState()
    {
        Check--;
        if (Check == 0)
        {
            MessageBox.Show("Congrats you win the game!");
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...