Вызывая EvenOrOdds () изнутри себя, чтобы «воспроизвести снова», вы фактически создаете рекурсивный вызов функции.
Вы переопределяете Counter в области действия каждого экземпляра EvenOrOdds (), который вы вызываете, в результате чего Counter всегда заканчивается 1.
Один простой вариант - переместить определение Counter в переменную уровня класса, что означает, что оно будет использоваться всеми вашими вызовами EvenOrOdds ()
class MainClass
{
//class-level static variable
private static int Counter;
public static void Main(string[] args)
{
Console.WriteLine("Hey! Welcome to Ray's Dice Game! Let's Start");
Console.WriteLine();
EvenOrOdds();
}
// rest of code here
Это означает, что вы можете удалить определение Counter из вашего кода EvenOrOdds (). Теперь при увеличении счетчика он обновляет переменную уровня класса, что приведет к ожидаемому поведению счетчика.
Console.WriteLine("Do you want to play again? Please enter in all caps YES or NO");
String UserInput = Console.ReadLine();
if (UserInput == "YES")
{
//increment the counter first
Counter = Counter + 1;
//then call the method again for a new game
EvenOrOdds();
}
Также вы можете изменить «Counter = Counter + 1;» В строке вы используете встроенный оператор инкремента ++: "Counter ++;" который будет делать то же самое.
Примечание : Существуют и другие способы реализации этого типа функции «повторить игру», которые были бы лучше, например, использование циклов и т. Д., Но без переписывания того, что вы уже сделали, моего совета достаточно как незначительное изменение, которое достигает того, что вы хотите сделать. Удачи!
Редактировать: Сначала обновляется счетчик, прежде чем снова вызывать EventOrOdds () - в результате счетчик корректно увеличивается для каждой сыгранной игры.