2016-07-11 4 views
-7

Привет, я пытаюсь сделать игру в кости и продолжать получать эту ошибку, не уверен, что это такое или что-то не так с моим алгоритмом. Любая помощь будет оценена по достоинству. Спасибо :) Это показывает ошибку:Звонок неоднозначная ошибка - игра в кости

The call is ambiguous between the following methods or properties: 'Form1.UpdateGameStatus(int)' and 'Form1.UpdateGameStatus(int)'

private int UpdateGameStatus(int sumDice) 
    { 

     if (sumDice == 2) 
     if (sumDice == 3) 
     if (sumDice == 14) 
      lblSum.Text = ("You lost!"); 
     if (sumDice == 9) 
     if (sumDice == 10) 
      lblSum.Text = ("You're winner!"); 
     if (sumDice == 0) 
      lblSum.Text = ("Roll again please!"); 
     return; 

    } 

    int point = 0; 
    int gamestatus = 0; 
    private void UpdateGameStatus(int sumDice) 
    { 
     while (sumDice == 4 || sumDice == 5 || sumDice == 6 || sumDice==||sumDice == 9 || sumDice == 10) 

      point = sumDice; 

     if (sumDice == point) 
      lblSum.Text = ("You're winner!"); 
     gamestatus = 1; 
     if (sumDice == 7) 
      lblSum.Text = ("You lost!"); 
     gamestatus = -1; 
     return; 
    } 
    private void btnRollDice_Click(object sender, EventArgs e) 
    { 

     int die1 = 0, die2 = 0; 
     RollDice(out die1, out die2); 
     UpdateGameStatus(sumDice);  
    } 
} 
}  
+0

Как насчет ошибки, разве вы не понимаете? – Servy

+0

Мне сказали использовать как void, так и int, но это не позволяет мне. Можно ли использовать оба параметра с одним и тем же параметром и именем? – Flow101

+0

Сообщение об ошибке конкретно отвечает на этот вопрос. – Servy

ответ

3

У вас есть два метода с той же подписью:

private void UpdateGameStatus(int sumDice) 

и

private int UpdateGameStatus(int sumDice) 

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

+0

Да, есть ли способ заставить его использовать оба? или я могу использовать его только. Я смущен этим. – Flow101

+1

У вас могут быть оба метода, но их нельзя назвать одинаковыми или, по крайней мере, не принимать одинаковые параметры. Поэтому либо переименуйте один из них, либо укажите один и тот же параметр. Это позволит компилятору узнать, когда вы вызываете каждого. Например, вы можете переименовать первый метод 'GetGameStatus (int)'. – Frecklefoot

+1

НЕТ, вы не можете использовать оба варианта, если оба они имеют одинаковое имя и тот же ввод. Переименуйте тот, который вы не хотите использовать. – Paparazzi

0

Сообщение об ошибке сообщает вам, что не так: вы делаете двусмысленный вызов UpdateGameStatus. У вас есть два метода, оба из которых называются UpdateGameStatus, которые принимают целочисленное значение. Почему у вас нет только одной версии, которая возвращает сумму костей, а также устанавливает статус игры? Это решит вашу проблему. Вы дублируете код без необходимости здесь.

Редактировать: Я также заметил, что ваш первый метод фактически не обновляет статус игры, поэтому, если вы хотите сохранить оба, подумайте о переименовании этого.

Редактировать 2: Чтобы обобщить то, что было упомянуто в комментариях (и выйти за рамки только сообщения об ошибке), похоже, что у вас есть ненужное дублирование кода. Подумайте, что вы действительно хотите, чтобы этот метод делал. Вы хотите, чтобы текст был установлен на "you lose!"? Вы хотите, чтобы он отслеживал переменную gamestatus (1, 0 или -1)? Вы хотите, чтобы он возвращал переменную gamestatus? Выясните, что именно вы хотите, чтобы этот метод выполнял/возвращал и пытались удалить дублированный код.

+0

@ Flow101 кажется (насколько я могу судить), что пустота просто делает некоторые из того, что делает целое число. Я бы рекомендовал использовать целочисленный код, обновив сообщение о статусе/выходе игры на основе результата рулона, а затем вернет результат рулона. Я не уверен, где именно это используется, но просто попытайтесь подумать о том, что именно делают эти функции и как вы используете данные. Используйте int one, если вы заботитесь о возвращаемом значении (1, 0 или -1) и о пустоте, если вы этого не сделали (вам нужно только настроить gamestatus) –

+0

@ Flow101 Другими словами, объедините их; взять лучшее из каждого и собрать их вместе. Вам нужно будет сделать звонок о том, что важно для себя, вы - тот, кто разрабатывает программу. –

Смежные вопросы