Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

Desafio: Primeiro Jogo Com C#

Antes de programar elaborei o seguinte fluxograma do fluxo do jogo, adicionei uma validação de entrada antes de validar o número informado e o número sorteado

Fluxograma - Draw.io

//Jogo de adivinhar o número


Console.WriteLine(@"

▄▀█ █▀▄ █ █░█ █ █▄░█ █░█ █▀▀   █▀█   █▄░█ █░█ █▀▄▀█ █▀▀ █▀█ █▀█   █▀ █▀▀ █▀▀ █▀█ █▀▀ ▀█▀ █▀█
█▀█ █▄▀ █ ▀▄▀ █ █░▀█ █▀█ ██▄   █▄█   █░▀█ █▄█ █░▀░█ ██▄ █▀▄ █▄█   ▄█ ██▄ █▄▄ █▀▄ ██▄ ░█░ █▄█

");

var numeroSorteado = new Random().Next(1, 101);
int numeroInformado;
bool tentativaValida;

Console.WriteLine("Bem vindo ao jogo de adivinhação! Gerei um número aleatório entre 1 e 100, tente adivinhar qual é!");

do {
    do {

        Console.Write("\nDigite a sua tentativa: ");
        string tentativa = Console.ReadLine() ?? string.Empty;

        tentativaValida = validarTentativa(tentativa, out numeroInformado);

        if (tentativaValida == false)
        {
            Console.WriteLine("O valor digitado não é válido, digite um número entre 1 e 100!");
        }

    } while (!tentativaValida);

    switch (numeroInformado) {
        case int n when n > numeroSorteado:
            Console.WriteLine("Você errou! O número sorteado é menor!");
            break;
        case int n when n < numeroSorteado:
            Console.WriteLine("Você errou! O número sorteado é maior!");
            break;
    }

} while (numeroInformado != numeroSorteado);


Console.WriteLine("Parabéns você adivinhou o número secreto (" + numeroSorteado + ")! Até a próxima!");


bool validarTentativa(string tentativa, out int numeroValidado)
{
    if (int.TryParse(tentativa, out int tentativaInt)) 
    {
        if (tentativaInt > 0 && tentativaInt < 101) {
            numeroValidado = tentativaInt;
            return true; 
        } 
        else {
            numeroValidado = tentativaInt;
            return false;
        }
    }
    else {
        numeroValidado = tentativaInt;
        return false;
    }
}

1 resposta

Oi, Matheus. Tudo bem com você?

Muito legal você ter elaborado o fluxograma antes de começar a programar. Ele ajuda a visualizar as decisões do jogo e, no seu código, dá para perceber que você conseguiu transformar essa lógica em C# de forma coerente. A validação da entrada também foi uma boa adição, principalmente porque evita que valores como texto, números fora do intervalo ou entradas inválidas sejam tratados como tentativas do jogador.

No código, a combinação de int.TryParse() com out ficou adequada para validar a entrada sem causar uma exceção quando o usuário digita algo que não pode ser convertido para inteiro. O uso do do while também permite repetir a tentativa até que seja informado um número válido. Outro ponto interessante é o switch com when, que você utilizou para comparar a tentativa com o número sorteado sem precisar criar vários if separados.

Depois de montar esse fluxo, que outra regra você acrescentaria ao jogo para deixá-lo mais completo?

Parabéns pelo trabalho e por compartilhar tanto o fluxograma quanto o código. Continue registrando esse processo no fórum, pois acompanhar diferentes formas de resolver o mesmo problema também ajuda outros estudantes. O fórum está à disposição.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!