Losowy numer zgadywania gra nie działa w C #

głosy
-3

Próbuję dostać tę grę losową liczbę zgadywać pracy. Trasy program, ale to nie daje Ci wygrane wiadomość po wprowadzeniu poprawnego numeru i funkcja podpowiedź nie daje sprzężeniem zwrotnym, to ma zbyt. Każda pomoc mile widziana.

using System;

namespace randomNumberGame
{
    class Program
    {
        static void Main(string[] args)
        {
            Random r = new Random();
            var val = r.Next(1, 100);
            var guess = 0;
            bool correct = false;
            var attemptsLeft = 5;


            Console.WriteLine(I'm thinking of a number between 1 and 100.);

            while (!correct && attemptsLeft >=  1)
            {

                Console.Write(You have  + attemptsLeft +  lives left. Please enter your Guess: );
                string input = Console.ReadLine();
                var message = ;
                var difference = val - guess;

                if (!int.TryParse(input, out guess))
                {
                    Console.WriteLine(That's not a number.);
                    continue;
                }
                if (difference == 0)
                {
                    Console.WriteLine(You have won);
                    correct = true;
                }


                else
                {

                    if (Math.Abs(difference) >= 50)
                    {
                        message = Math.Sign(difference) == -1 ? Very High : Very Low;
                    }
                    else if (Math.Abs(difference) < 50 && Math.Abs(difference) >= 20)
                    {
                        message = Math.Sign(difference) == -1 ? High : Low;
                    }
                    else if (Math.Abs(difference) < 20 && Math.Abs(difference) >= 10)
                    {
                        message = Math.Sign(difference) == -1 ? Moderatley High : Moderately Low;
                    }
                    else if (Math.Abs(difference) < 10)
                    {
                        message = Math.Sign(difference) == -1 ? Somewhat High : Somewhat Low;
                    }
                    else Console.WriteLine(???);
                }
                attemptsLeft--;


            }


        }
    }
}
Utwórz 10/10/2019 o 00:46
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
0

„To nie daje Ci wygrane wiadomość po wprowadzeniu poprawnego numeru”

Właściwie, to nie! Ale wtedy program wychodzi tak szybko, że nigdy go zobaczyć. Aby rozwiązać ten problem, należy dodać linię, która czeka, aby użytkownik mógł nacisnąć klawisz na końcu swojej Mainmetody, dzięki czemu można zobaczyć wynik końcowy:

// Add this as the last line of the main method:
Console.ReadKey();

„Funkcja podpowiedź nie daje zwrotnych to ma zbyt”

To dlatego, że nigdy nie wysyła wiadomość podpowiedź! Na końcu whilepętli, dodać linię, aby to zrobić:

// Add this as the last line of the while loop:
Console.WriteLine(message);

Te rzeczy można znaleźć łatwo, jeśli po prostu ustawić punkt przerwania w kodzie (w Vistal Studio, kliknij lewy margines obok jednej z linii i pojawi się czerwona kropka (lub naciśnij klawisz F9)). Następnie można prześledzić za pomocą kodu F10i można obserwować wartości zmiennych lokalnych zmiana i zobaczyć, co się dzieje krok po kroku.


Innym sposobem, aby uniknąć problemów (i do zawężenia gdzie one występują) jest wykupienie fragmentów kodu, który robi coś konkretnego i umieścić go w metodzie. Pozwoli to na łatwiejsze do debugowania w dłuższej perspektywie.

Na przykład, możemy napisać metody, które mają na sznurku, aby wyświetlić użytkownikowi jako zachęty do wprowadzania i powrót do wartości silnie wpisany w oparciu o ich wejściu. Możemy również wziąć te metody w opcjonalnej metody walidacji które mogą być używane do sprawdzania, że ​​wejście weszli upadki poza dozwolonym zakresem (jak numer od 1 do 100, lub nazwę, która nie jest dłuższy niż 25 znaków):

public static string GetStringFromUser(string prompt, 
    Func<string, bool> validator = null)
{
    string result;
    var cursorTop = Console.CursorTop;

    do
    {
        ClearSpecificLineAndWrite(cursorTop, prompt);
        result = Console.ReadLine();
    } while (!(validator?.Invoke(result) ?? true));

    return result;
}

public static int GetIntFromUser(string prompt, 
    Func<int, bool> validator = null)
{
    int result;
    var cursorTop = Console.CursorTop;

    do
    {
        ClearSpecificLineAndWrite(cursorTop, prompt);
    } while (!int.TryParse(Console.ReadLine(), out result) ||
                !(validator?.Invoke(result) ?? true));

    return result;
}

private static void ClearSpecificLineAndWrite(int cursorTop, 
    string message)
{
    Console.SetCursorPosition(0, cursorTop);
    Console.Write(new string(' ', Console.WindowWidth));
    Console.SetCursorPosition(0, cursorTop);
    Console.Write(message);
}

Możemy również napisać metodę pomocniczą, aby nasze „różnicy ciąg”, który mógłby podjąć w domyślić, numer i MIN i MAX wartości, a następnie obliczyć procent, jak blisko byli, a następnie powrócić odpowiedni ciąg znaków:

public static string GetDifferenceString(int guess, int number, 
    int minVal, int maxVal)
{
    var percentAway = 
        Math.Abs(guess - number) / (double)(maxVal - minVal) * 100;
    var direction = guess - number > 0 ? "High" : "Low";

    if (percentAway < 10) return $"Very close, but {direction}";
    if (percentAway < 20) return $"Just a little {direction}";
    if (percentAway < 30) return $"Somewhat {direction}";
    if (percentAway < 40) return $"Moderately {direction}";
    if (percentAway < 50) return $"{direction}";
    return $"Very {direction}";
}

Upraszcza to nasz główny kod usuwając pętle i sprawdzanie wyników tam, i pozwala nam skoncentrować się na naszych głównych zadań:

static void Main(string[] args)
{
    var randomNumber = new Random().Next(1, 101);
    var maxAttempts = 5;
    var guess = 0;

    Console.WriteLine("I'm thinking of a number between 1 and 100.");

    for (int attempt = 0; attempt < maxAttempts; attempt++)
    {
        Console.WriteLine($"You have {maxAttempts - attempt} " + 
            $"out of {maxAttempts} attempts remaining.");

        guess = GetIntFromUser("Please enter your guess (1 - 100): ", 
            i => i > 0 && i < 101);

        if (guess == randomNumber)
        {
            Console.WriteLine($"You have won in {attempt + 1} tries!");
            break;
        }

        Console.WriteLine(GetDifferenceString(guess, randomNumber, 1, 100));
    }

    if (guess != randomNumber)
    {
        Console.WriteLine("Sorry, you lose! The number was: " + 
            $"{randomNumber}");
    }

    GetKeyFromUser("\nDone! Press any key to exit...");
}
Odpowiedział 10/10/2019 o 01:44
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more