número aleatório jogo de adivinhação não funciona C #

votos
-3

Eu estou tentando obter este número aleatório de adivinhação de trabalho jogo. O programa é executado, mas ele não lhe dá a mensagem que você ganha quando você digita o número correto e o recurso de sugestão não dá o feed back que é suposto também. Qualquer ajuda apreciado.

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


            }


        }
    }
}
Publicado 10/10/2019 em 00:46
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

"Não dá a mensagem que você ganha quando você digita o número correto"

Na verdade, ele faz! Mas, em seguida, o programa sai tão rápido que você nunca vê-lo. Para resolver isso, adicione uma linha que espera que o usuário pressione uma tecla no final do seu Mainmétodo, para que possa ver o resultado final:

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

"O recurso de sugestão não dá o feed back que é suposto também"

Isso é porque você nunca saída a mensagem dica! No final do seu whileciclo, adicione uma linha para fazê-lo:

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

Essas coisas podem ser facilmente encontrados se você simplesmente definir um ponto de interrupção em seu código (em Vistal Studio, clique na margem esquerda ao lado de uma das linhas e um ponto vermelho aparecerá (ou pressione F9)). Depois, você pode percorrer o código usando F10e você pode assistir os valores das variáveis locais mudar e ver o que está acontecendo passo-a-passo.


Outra maneira de ajudar a evitar problemas (e para diminuir, onde eles ocorrem) é tirar pedaços de código que faz algo específico e colocá-lo em um método. Isto tornará mais fácil para depurar a longo prazo.

Por exemplo, podemos escrever métodos que levam em uma string para mostrar ao usuário como um pedido de entrada e retornar um valor fortemente tipado com base em sua entrada. Nós também pode ter estes métodos tomar um método de validação opcional que pode ser usado para validar que a entrada eles entraram quedas dentro de um intervalo válido (como um número de 1 a 100, ou um nome que não é maior que 25 caracteres):

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

Também pode escrever um método auxiliar para obter o nosso "string diferença", o que poderia levar na suposição, o número e os valores mínimo e máximo, em seguida, calcular a percentagem de quão perto eles estavam e, em seguida, retornar a string apropriada:

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

Isso simplifica nosso código principal removendo os loops e verificação dos resultados lá, e permite-nos concentrar em nossas principais tarefas:

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...");
}
Respondeu 10/10/2019 em 01:44
fonte usuário

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