# 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.