Náhodné číslo hádání hra nefunguje C #

hlasů
-3

Snažím se si to náhodné číslo hádanky práci. Program běží, ale to nedává jste vyhrál zpráva při zadání správného čísla a funkce náznak nedává zpětná vazba se předpokládá příliš. Jakákoliv pomoc ocení.

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--;


            }


        }
    }
}
Položena 10/10/2019 v 00:46
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
0

„To nedává jste vyhrál zpráva při zadání správného čísla“

Ve skutečnosti to dělá! Ale pak program ukončí tak rychle, že ji nikdy neuvidí. K vyřešení tohoto problému, přidejte řádek, který čeká na uživateli stisknout klávesu na konci své Mainmetody, takže můžete vidět konečný výsledek:

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

„Funkce náznak nedává zpětné vazby Předpokládá se příliš“

Je to proto, že jste nikdy výstup náznak zprávu! Na konci svého whilecyklu, přidat čáru k tomu:

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

Tyto věci lze snadno nalézt, pokud jednoduše nastavit zarážku v kódu (v Vistal Studio, klepněte na levý okraj vedle jedné z linek a objeví se červená tečka (nebo stiskněte klávesu F9)). Pak můžete krokovat kód pomocí F10a můžete sledovat hodnoty lokálních proměnných mění a uvidíme, co se děje, krok za krokem.


Dalším způsobem, jak předejít problémům (a zúžit, pokud k nim dojde), je uzavřít kousky kódu, který dělá něco specifického a dal ho do metody. To bude snazší ladění v dlouhodobém horizontu.

Například, my můžeme psát metody, které berou v řetězci se zobrazí uživateli jako výzvu pro vstup a vrátí silnými hodnotu založenou na jejich vstupu. Můžeme také mít tyto metody vzít v případném postupu ověřování, který může být použit k ověření, že vstup vešli spadá do platného rozsahu (jako číslo od 1 do 100, nebo název, který není delší než 25 znaků):

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);
}

Můžeme také napsat pomocnou metodu, aby naše „rozdíl řetězec“, které by mohly mít v odhadu, množství a minimální a maximální hodnoty, pak vypočítá procento, jak blízko byli, a pak se vrátit na příslušný řetězec:

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}";
}

To zjednodušuje náš hlavní kód odstraněním smyčky a kontrolovat výsledky tam, a umožňuje nám soustředit se na našich hlavních úkolů:

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...");
}
Odpovězeno 10/10/2019 v 01:44
zdroj uživatelem

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