Задать вопрос
  • Как сделать, что бы после закрытия messageboxа не открывались следующие?

    FoggyFinder
    @FoggyFinder
    Не уверен что правильно понял проблему, поэтому если окажется что мой ответ не подходит не стесняйтесь уточнять и спрашивать в комментариях, будем разбираться как починить.

    Код в обработчике 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.
    Ответ написан
    Комментировать
  • Видеоуроки - долго, и много воды. Стоит ли тратить на них время?

    Zoominger
    @Zoominger Куратор тега IT-образование
    System Integrator
    Нет, не стоит.
    Вы тупо будете слушать, как картавый мычащий Васян пересказывает какой-нибудь learnjavascript, пропуская половину тем, которые сам не понимает.
    И таких видео - 90%.
    Ответ написан
    12 комментариев
  • Чем заменить printf_s("%.0lf", s) в C#?

    edward_freedom
    @edward_freedom
    https://docs.microsoft.com/en-us/dotnet/standard/b...

    Format specifier Name Description Examples
    "C" or "c" Currency Result: A currency value.

    Supported by: All numeric types.

    Precision specifier: Number of decimal digits.

    Default precision specifier: Defined by NumberFormatInfo.CurrencyDecimalDigits.

    More information: The Currency ("C") Format Specifier. 123.456 ("C", en-US) -> $123.46

    123.456 ("C", fr-FR) -> 123,46 €

    123.456 ("C", ja-JP) -> ¥123

    -123.456 ("C3", en-US) -> ($123.456)

    -123.456 ("C3", fr-FR) -> -123,456 €

    -123.456 ("C3", ja-JP) -> -¥123.456

    и тд
    Ответ написан
    Комментировать