2
respostas

Faça como eu fiz: primeiro jogo com C#

Antes de partir para o código, eu criei um algoritmo para organizar a lógica do programa.

Algoritmo:

  1. O programa gera um número aleatório entre 1 e 100.

  2. O programa solicita que o usuário tente adivinhar o número.

  3. O usuário informa um número.

  4. Se o número for maior que o gerado:

    1. Exibe que o número é maior.
    2. Retorna à instrução 2.
  5. Se o número for menor que o gerado:

    1. Exibe que o número é menor.
    2. Retorna à instrução 2.
  6. Senão

    1. Exibe a mensagem: "Você venceu!"
    2. Encerra o programa.

Código

int gerarAleatorio(int valorMinimo, int valorMaximo) {
    Random rand = new Random();
    int numeroAleatorio = rand.Next(valorMinimo, valorMaximo);
    return numeroAleatorio;
}

int valorAleatorio = gerarAleatorio (1, 100+1);
do {
    Console.WriteLine ("================================");
    Console.WriteLine ("      Desafio do Aleatório      ");
    Console.WriteLine ("================================");
    Console.Write ("Tente advinhar o número --> ");
    int numeroUsuario = int.Parse(Console.ReadLine()!);
    if (numeroUsuario > valorAleatorio) {
        Console.WriteLine ("O número é maior, tente novamente.");
    }
    else if (numeroUsuario < valorAleatorio) {
        Console.WriteLine ("O número é menor, tente novamente.");
    }
    else {
        Console.WriteLine ("Você venceu!");
        break;
    }
} while (true);
2 respostas

Oii, Diego. Tudo bem?

Que excelente iniciativa organizar o pensamento através de um algoritmo antes de partir para a escrita do código. Essa prática ajuda muito a entender o fluxo da aplicação e evita erros de lógica durante o desenvolvimento.

O seu código ficou muito bem estruturado, especialmente pela decisão de isolar a geração do número em uma função específica. Isso deixa o programa organizado e fácil de ler.

Notei um pequeno detalhe na lógica das mensagens que aparecem para a pessoa que está jogando:

No trecho:

if (numeroUsuario > valorAleatorio) {
    Console.WriteLine ("O número é maior, tente novamente.");
}

A mensagem "O número é maior" pode confundir quem joga, pois dá a entender que o número secreto é maior que o chute, quando na verdade o número digitado pelo usuário é que foi maior que o alvo. Uma sugestão seria inverter para: "O número secreto é menor que o seu chute".

Sugestões para evoluir seu código:

Pra deixar seu projeto ainda mais completo, você pode explorar alguns pontos:

  • Tratamento de erros: Caso alguém digite uma letra em vez de um número, o int.Parse pode interromper a execução. Você pode pesquisar sobre o método int.TryParse para evitar que o programa feche inesperadamente.
  • Contador de tentativas: Que tal criar uma variável para contar quantas vezes o usuário tentou até acertar? Exibir isso ao final deixa o desafio mais interessante.
  • Limites dinâmicos: Você já usa variáveis para o valor mínimo e máximo na sua função. Poderia pedir para o usuário definir qual a dificuldade (o intervalo de números) antes de começar.

Para entender melhor como o C# lida com números aleatórios e as diversas formas de manipular entradas de dados, recomendo a leitura da documentação oficial da classe Random.

Continue com esse empenho e foco na organização.

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

Boa tarde, tudo bem sim!
Antes de tudo, quero agradecer por todas as dicas mas principalmente pela do TryParse. Inicialmente, foi um pouco difícil de implementar, mas depois que li a documentação de forma mais aprofundada, ficou bem mais fácil. Inicialmente, criei uma versão apenas com o TryParse. Todavia, senti que seria interessante também alterar um pouco o algoritmo para dar maior profundidade ao código, conforme as duas sugestões anteriores.

Variáveis Principais:

  • Inteiro para nível de dificuldade
  • Inteiro para valor aleatório
  • Inteiro para quantidade de erros
  • Inteiro para número do usuário

Algoritmo:

  1. O programa gera a interface de dificuldade (abstração).
  2. O programa pergunta qual nível de dificuldade o usuário deseja escolher, podendo optar entre 3:
  • Caso Fácil (Opção 1): o número será gerado entre 1 e 10.
  • Caso Médio (Opção 2): o número será gerado entre 1 e 100.
  • Caso Difícil (Opção 3): o número será gerado entre 1 e 1000.
  1. O programa gera a interface do usuário (abstração).

  2. O programa solicita que o usuário tente adivinhar o número.

  3. O usuário informa um número.

  4. Se o número for maior que o gerado:

  • Exibe que " O seu número digitado é maior que o número secreto.".
  • Aumenta a quantidade de erros em 1.
  • Retorna à instrução 3.
  1. Se o número for menor que o gerado:
  • Exibe que "O seu número digitado é menor que o número secreto."
  • Aumenta a quantidade de erros em 1.
  • Retorna à instrução 3.
  1. Senão
  • Exibe a mensagem: "Você venceu com {quantiaErros} erros."
  • Encerra o programa.

Código Final

// Funções para abstrações
void exibirInterfaceDificuldade (){
    Console.Clear();
    Console.WriteLine ("===========================================");
    Console.WriteLine ("      Selecione a Dificuldade do Jogo      ");
    Console.WriteLine ("===========================================");
    Console.WriteLine ("Selecione o nível de dificuldade");
    Console.WriteLine ("1. Fácil");
    Console.WriteLine ("2. Médio");
    Console.WriteLine ("3. Difícil");
}
int entradaDificuldadeUsuario() {
    Console.Write ("Escolha a opção: ");
    int numeroDificuldade;
    bool verificao = int.TryParse(Console.ReadLine()!, out numeroDificuldade);
    if (verificao) return numeroDificuldade;
    else return 0;
}
int gerarAleatorio(int valorMinimo, int valorMaximo) {
    Random rand = new Random();
    int numeroAleatorio = rand.Next(valorMinimo, valorMaximo);
    return numeroAleatorio;
}
void exibirInterface (){
    Console.Clear();
    Console.WriteLine ("=====================================");
    Console.WriteLine ("      Desafio do Número Secreto      ");
    Console.WriteLine ("=====================================");
}
int entradaNumeroUsuario() {
    Console.Write ("Tente advinhar o número --> ");
    int numeroUsuario;
    bool verificao = int.TryParse(Console.ReadLine()!, out numeroUsuario);
    if (verificao) return numeroUsuario;
    else return 0;
}

// Código Principal
exibirInterfaceDificuldade();
int nivelDificuldade = entradaDificuldadeUsuario();
int quantiaErros = 0;
int valorAleatorio;

if (nivelDificuldade == 1) valorAleatorio = gerarAleatorio (1, 10+1);
else if (nivelDificuldade == 2) valorAleatorio = gerarAleatorio (1, 100+1);
else if (nivelDificuldade == 3) valorAleatorio = gerarAleatorio (1, 1000+1);
else valorAleatorio = gerarAleatorio (1, 100+1);

do {
    exibirInterface();
    int numeroUsuario = entradaNumeroUsuario();
    if (numeroUsuario > valorAleatorio) {
        quantiaErros++;
        Console.WriteLine ("O seu número digitado é maior que o número secreto.");
        Console.WriteLine ("Digite qualquer tecla para continuar...");
        Console.ReadKey();
    }
    else if (numeroUsuario < valorAleatorio) {
        quantiaErros++;
        Console.WriteLine ("O seu número digitado é menor que o número secreto.");
        Console.WriteLine ("Digite qualquer tecla para continuar...");
        Console.ReadKey();
    }
    else {
        Console.WriteLine ($"Você venceu com {quantiaErros} erros.");
        Thread.Sleep(2000);
        break;
    }
} while (true);