C # окна формы угадать образ игры - PullRequest
0 голосов
/ 14 января 2019

По сути, я создаю проект с Windows Form C # в Visual Studio. Я пытаюсь угадать образ игры. Я сделал две кнопки, одна случайным образом отображает изображение, а другая покажет, правильно ли они догадались или нет. Я борюсь за нажатие второй кнопки, так как не знаю, как получить количество изображений от первой до второй кнопки.

private void Button1_Click(object sender, EventArgs e)
{
    Random r = new Random();
    rInt = r.Next(1, 21);
    string path = @"C:/Users/User/Desktop/Badges/Badges/";
    pictureBox1.Image = Image.FromFile(path + rInt.ToString() + ".png");
}

private void Button2_Click(object sender, EventArgs e)
{
    string path = @"C:/Users/User/Desktop/Badges/Badges/";
    if (textBox1.Text = rInt)
    {
        label3.Text = "You Guessed Correctly, Well Done!!";
    }
    else
    {
        label3.Text = "Incorrect Guess, Try Again!";
    }
}

Ответы [ 4 ]

0 голосов
/ 14 января 2019

Непонятно, как должна работать эта игра.
Нужно ли пользователям вводить число в textBox1, и ваш щелчок проверяет этот номер?

Если это так, вы можете сделать это следующим образом.
Он просто сохраняет случайное число в свойстве тега pictureBox1, чтобы вы могли получить к нему доступ из другого события щелчка.

private void Button1_Click(object sender, EventArgs e)
{
    Random r = new Random();
    int rInt = r.Next(1, 21);
    string path = @"C:/Users/User/Desktop/Badges/Badges/";
    int i = r.Next();
    pictureBox1.Image = Image.FromFile(path + rInt.ToString() + ".png");

    // store the random number in the pictureBox
    pictureBox1.Tag = rInt;
}

private void Button2_Click(object sender, EventArgs e)
{
    if (textBox1.Text == pictureBox1.Tag.ToString())
    {
        label3.Text = "You Guessed Correctly, Well Done!!";
    }
    else
    {
        label3.Text = "Incorrect Guess, Try Again!";
    }
}
0 голосов
/ 14 января 2019

Вы можете просто создать поле . Напишите свой int i; (или лучше int selctedImage;) над первым методом кнопки с модификатором доступа private. private int i;

Ваш оба метода смогут получить доступ к этому полю и использовать его как локальную переменную. Но напомните, что это поле может быть неинициализировано во время выполнения второго метода!

Как это:

private int selectedImage;
private void Button1_Click(object sender, EventArgs e)
{
    Random r = new Random();
    selectedImage = r.Next(1, 21);
    string path = @"C:/Users/User/Desktop/Badges/Badges/";
    // int i = r.Next();
    pictureBox1.Image = Image.FromFile(path + selectedImage.ToString() + ".png");

}

private void Button2_Click(object sender, EventArgs e)
{
    string path = @"C:/Users/User/Desktop/Badges/Badges/";
    if (textBox1.Text == selectedImage.ToString())
    {
        label3.Text = "You Guessed Correctly, Well Done!!";
    }
    else
    {
        label3.Text = "Incorrect Guess, Try Again!";
    }
}
0 голосов
/ 14 января 2019

Попробуйте разместить переменную номера изображения вне двух методов нажатия кнопки. Это сделает его доступным для обоих методов. Вот так:

int i = 0; // Place it here instead
private void Button1_Click(object sender, EventArgs e)
{
    // Assign i here like you did
    i = r.Next();
}

private void Button2_Click(object sender, EventArgs e)
{
    // i is usable here now!
}

Причина, по которой он не был доступен в вашем примере, заключается в том, что каждый метод находится в отдельной области видимости. Переменные, объявленные в одной области видимости, «невидимы» для другой области видимости. Таким образом, переменные, которые вы объявляете внутри MethodA (), невидимы для MethodB ().

0 голосов
/ 14 января 2019

Вы можете сделать RInt членом поля формы. Затем вы можете установить его в button1 click и проверить его в button2 click.

INT? randomIndex = null; //f.e.

Было бы лучше, если бы вы опубликовали код напрямую, так как его было бы легче редактировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...