Capítulo 06: Matrizes (Arrays Bidimensionais) 🔴⚪

Neste capítulo, vamos aprender a armazenar dados em formato de grade (tabela) usando as Matrizes em Rust, com o tema Pokémon!


📖 O que são Matrizes?

Uma matriz é um array de arrays. Ou seja, é uma estrutura de dados com duas dimensões: linhas e colunas. No Rust, declaramos especificando o tipo e o tamanho de cada dimensão.


📖 Exemplo Guiado: Mapa de Grama Alta

Vamos criar uma matriz 3x3 que representa um pequeno mapa de grama alta. Onde tiver o número 1, significa que há um Pokémon selvagem escondido!

  1. Crie o arquivo mapa_pokemon.rs na pasta src/:
fn main() {
    // Criando uma matriz 3x3 de inteiros
    let mapa: [[i32; 3]; 3] = [
        [0, 1, 0],
        [0, 0, 1],
        [1, 0, 0]
    ];
 
    println!("--- Mapa de Grama Alta ---");
    
    // Percorrendo a matriz com laços
    for i in 0..3 {
        for j in 0..3 {
            if mapa[i][j] == 1 {
                print!("[P] "); // P de Pokémon
            } else {
                print!("[ ] "); // Grama vazia
            }
        }
        println!(); // Quebra de linha ao fim de cada linha da matriz
    }
}

🕹️ Como Executar e Testar no VS Code

  1. Abra le terminal integrado.
  2. Compile: rustc mapa_pokemon.rs
  3. Execute: ./mapa_pokemon

Resultado Esperado:

--- Mapa de Grama Alta ---
[ ] [P] [ ] 
[ ] [ ] [P] 
[P] [ ] [ ] 

📊 Ilustração Visual: Grade da Matriz

Veja como os índices de linha e coluna localizam os elementos:

graph TD
    subgraph "Matriz 3x3"
    A["[0][0]"] --- B["[0][1] (P)"] --- C["[0][2]"]
    D["[1][0]"] --- E["[1][1]"] --- F["[1][2] (P)"]
    G["[2][0] (P)"] --- H["[2][1]"] --- I["[2][2]"]
    end

🛠️ Prática Obrigatória 1: Batalha Naval Pokémon

Crie um programa chamado batalha_pokedex.rs que tenha a mesma matriz do exemplo. O programa deve usar variáveis fixas para linha e coluna (ou ler do teclado se quiser o desafio) e dizer se encontrou um Pokémon ou não.


🔑 Gabarito de Código

Prática 1: batalha_pokedex.rs

fn main() {
    let mapa: [[i32; 3]; 3] = [
        [0, 1, 0],
        [0, 0, 1],
        [1, 0, 0]
    ];
 
    let linha = 1;
    let coluna = 2;
 
    println!("Consultando posicao [{}][{}]...", linha, coluna);
 
    if mapa[linha][coluna] == 1 {
        println!("Incrivel! Voce encontrou um Pokemon selvagem!");
    } else {
        println!("Nada por aqui... Continue procurando.");
    }
}

Capitulo Anterior | Proximo Capitulo