Не уверен что правильно понял проблему, поэтому если окажется что мой ответ не подходит не стесняйтесь уточнять и спрашивать в комментариях, будем разбираться как починить.
Код в обработчике
button1_Click выполняется последовательно. После того как сработает первое условие вы уменьшаете значение на единицу и следующий if тоже становится верным.
Первое что вам нужно сделать это вынести количество попыток в приватную переменную.
kolvopotytok не самое подходящее название (и хотя я, например, могу понять что тут имеется ввиду количество попыток) лучше использовать названия на английском. Давайте возьмем
countOfAttempts . Так как вы хотите отслеживать количество, то вам нужно завести еще одну переменную для учета их изначального (максимального) числа:
public Form2(int digitfrom, int digitto)
{
InitializeComponent();
Random rnd = new Random();
r = rnd.Next(digitfrom, digitto);
maxCountOfAttempts = countOfAttempts = 3;
}
private int r;
private int maxCountOfAttempts, countOfAttempts;
Затем вы можете заметить что каждый раз код внутри проверочного условия одинаковый.
А теперь представьте, что диапазон будет достаточно широкий (скажем около сотни), а количество попыток увеличиться до 10. Копировать один и тот-же участок раз за разом не слишком эффективно. Давайте тогда вынесем весь код в отдельную функцию, которая будет принимать значение и в зависимости от него выводить информационное сообщение. Если пользователь угадал, то функция вернет
true, в противном случае -
false:
private bool CheckResult(int a)
{
if (a == r)
{
MessageBox.Show($"Поздравляем!!! Вы угадали число с {countOfAttempts - 1} раза.");
return true;
}
else if (a > r)
{
MessageBox.Show($"Число которое загадал ИИ меньше вашего!\nУ вас осталось {countOfAttempts - 1} попытки.");
return false;
}
else
{
MessageBox.Show($"Число которое загадал ИИ больше вашего!\nУ вас осталось {countOfAttempts - 1} попытки.");
return false;
}
}
Теперь немного изменим сам обработчик:
private void button1_Click(object sender, EventArgs e)
{
if (IsDigitsOnly(answer.Text))
{
int a = Convert.ToInt32(answer.Text);
if (CheckResult(a))
this.Close();
else
{
countOfAttempts--;
if (countOfAttempts == 0)
{
MessageBox.Show("К сожелению вы проиграли\nЗагаданное число: " + r);
this.Close();
}
}
}
else
{
MessageBox.Show("Некорректный ввод данных", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
answer.Clear();
}
Должно работать. Как видите код достаточно близкий к вашему, но в то-же время немного понятнее.
И, если позволите, небольшой совет на будущее: старайтесь избегать использования
goto.