# Um jogo de adivinhação em Rust > [!NOTE] Um jogo de adivinhação em Rust > Conteúdo **:: Referência ::** [Programming a Guessing Game - The Rust Programming Language](https://doc.rust-lang.org/book/ch02-00-guessing-game-tutorial.html) # Notas ## Inicialização Para configurar um novo projeto, vá para o diretório _projects_ que você criou no Capítulo 1 e crie um novo projeto usando Cargo, assim: ```shell $ cargo new guessing_game $ cd guessing_game ``` O primeiro comando, `cargo new`, recebe o nome do projeto (`guessing_game`) como o primeiro argumento. O segundo comando muda para o diretório do novo projeto. Agora vamos compilar este programa “Olá, mundo!” e executá-lo na mesma etapa usando o comando `cargo run`: ```shell $ cargo run Compiling guessing_game v0.1.0 (file:///projects/guessing_game) Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.08s Running `target/debug/guessing_game` Hello, world! ``` O comando `run` é útil quando você precisa iterar rapidamente em um projeto, como faremos neste jogo, testando rapidamente cada iteração antes de passar para a próxima. Reopen the _src/main.rs_ file. You’ll be writing all the code in this file. ## Escrevendo as funcionalidades O código final pode ser visto abaixo ```rust use rand::Rng; // Adiciona uma dependencia. Utilize `cargo add rand` no terminal para adicionar a dependência ao projeto use std::cmp::Ordering; use std::io; // Adiciona uma dependencia. Essa dependência é nativa // Adiciona uma dependencia. Essa dependência é nativa fn main() { println!("Este é um jogo de adivinhação! \nVocê deve adicinhar um número entre 1 e 100! "); // Mensagem de entrada para o usuário // Gera um número aleatório sempre que o programa executar let numero_secredo: u32 = rand::rng().random_range(1..=100); // Define uma variável imutável utilizando a dependência //println!("O número secreto é: {}", numero_secredo); // Imprime a variável para debuggar o código/ COMENTE PARA JOGAR! // Adiciona um laço de repetição infinito loop { // Coleta um chute do usuário println!("Qual o número secreto? "); // Mensagem para o usuário let mut chute: String = String::new(); // Cria uma nova variável do tipo String na memória io::stdin() .read_line(&mut chute) .expect("Falha ao ler uma linha"); // Coleta do usuário um número a ser usado como chute let chute: u32 = chute .trim() .parse() .expect("Por favor coloque um número válido!"); // Transforma a entrada do usuário em um inteiro println!("Você chutou o número {} ... ", chute); // Indica para o usuário o número chutado // Compara o número secreto ao número que foi chutado pelo usuário. match chute.cmp(&numero_secredo) { Ordering::Less => println!("Valor muito baixo!"), Ordering::Greater => println!("Valor muito alto!"), Ordering::Equal => { println!("Você acertou o número secreto !!!!"); break; } } } } ``` Este projeto foi uma forma prática de apresentar a você muitos novos conceitos de Rust: `let`, `match`, funções, o uso de crates externas e muito mais.