C# не распознающая переменная - PullRequest
0 голосов
/ 23 февраля 2020

Я пытаюсь сравнить со значением p, сгенерированным в void aim, я запускаю функцию aim() в таймере, но когда дело доходит до if (score>p), он не распознает переменную P, как я могу сделать так что оператор if работает, где он сравнивается со значением P, сгенерированным в целевой функции.

void aim()
{
    int p;
    p = n.Next(2, 5);
    OppScore.Text = (string.Format("Target Score: {0}", p));
}

Random m = new Random();
Random n = new Random();

public void RunTimer_Tick(object sender, EventArgs e )
{
    target();

    if (lives <= 0)
    {
        left--;
        lives = 2;
        TimesLeft.Text = (string.Format("attempts left: {0}", left));
        TimesLeft.Text = Convert.ToString(left);
    }

    if (left <= 0)
    {
        this.Hide();
        new Game_Over().Show();
        RunTimer.Stop();
    }

    if (counter<1)
    {
        aim();
        counter++;
    }

    if (score > p)
    {
        this.Hide();
        new Winner().Show();
        RunTimer.Stop();
    }
}

Ответы [ 3 ]

0 голосов
/ 23 февраля 2020

Попробуйте переместить строку:

int p;

Для перехода на следующую строку под:

Random n = new Random();
0 голосов
/ 23 февраля 2020

Переменная p видна только методу aim() из-за области действия. Это очень базовая c конструкция программирования.

Чтобы сделать переменную видимой для других методов в том же классе, вам нужно будет перевести ее в область действия уровня класса

private int p;

Random m = new Random();
Random n = new Random();

void aim()
{
    p = n.Next(2, 5);
    OppScore.Text = (string.Format("Target Score: {0}", p));
}



public void RunTimer_Tick(object sender, EventArgs e)
{
    target();

    if (lives <= 0)
    {
        left--;
        lives = 2;
        TimesLeft.Text = (string.Format("attempts left: {0}", left));
        TimesLeft.Text = Convert.ToString(left);
    }

    if (left <= 0)
    {
        this.Hide();
        new Game_Over().Show();
        RunTimer.Stop();
    }

    if (counter < 1)
    {
        aim();
        counter++;
    }

    if (score > p)
    {
        this.Hide();
        new Winner().Show();
        RunTimer.Stop();
    }
}

В приведенном выше коде вы можете видеть, что, объявив переменную вне метода и внутри класса, ваша переменная становится видимой для всех методов в классе.

private int p;
0 голосов
/ 23 февраля 2020

Льюис,

, как сказано в комментариях всех, вы локально инициализировали переменную 'p'.

RunTimer_Tick(...)

отличается от aim(...), так что если вы хотите, чтобы Затем вы должны поместить переменную 'p' глобально, чтобы ее значение было сохранено для всей программы, а не просто использовать ее в качестве локальной переменной.

Я надеюсь, вы получили то, что мы пытаемся сказать.

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