Capítulo 19: Projeto Final - Dungeon Crawler (Parte 1) 🗡️🛡️

Chegamos à reta final do curso! Nos capítulos 19 e 20, vamos juntar tudo o que aprendemos para criar um Jogo de Dungeon Crawler (Exploração de Calabouço) baseado em texto, com o tema The Legend of Zelda!

Nesta primeira parte, vamos planejar a estrutura e criar o mapa do jogo.


📖 O que vamos construir?

Um jogo onde o jogador (Link) se move por uma grade (matriz), encontra uma chave e deve chegar à porta de saída para vencer, evitando monstros! Usaremos:

  • Matrizes: Para o mapa.
  • Structs: Para a posição do jogador.
  • Condicionais e Repetição: Para o loop de movimento.

📖 Exemplo Guiado: Estrutura e Mapa

Vamos criar a estrutura do jogador e a função para desenhar o mapa.

  1. Crie o arquivo dungeon.c na pasta src/:
#include <stdio.h>
 
#define TAM 5 // Tamanho do mapa 5x5
 
// Estrutura para a posição do jogador
struct Jogador {
    int x;
    int y;
    int tem_chave;
};
 
// Função para desenhar o mapa
void desenhar_mapa(int mapa[TAM][TAM], struct Jogador j) {
    printf("\n--- DUNGEON ---\n");
    for (int i = 0; i < TAM; i++) {
        for (int j_atual = 0; j_atual < TAM; j_atual++) {
            // Se for a posição do jogador
            if (i == j.y && j_atual == j.x) {
                printf("[L] "); // L de Link
            } else if (mapa[i][j_atual] == 2) {
                printf("[K] "); // K de Key (Chave)
            } else if (mapa[i][j_atual] == 3) {
                printf("[D] "); // D de Door (Porta)
            } else {
                printf("[.] "); // Espaço vazio
            }
        }
        printf("\n");
    }
}
 
int main() {
    // 0: Vazio, 2: Chave, 3: Porta
    int mapa[TAM][TAM] = {
        {0, 0, 0, 0, 0},
        {0, 2, 0, 0, 0},
        {0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0},
        {0, 0, 0, 0, 3}
    };
 
    struct Jogador link;
    link.x = 0;
    link.y = 0;
    link.tem_chave = 0;
 
    desenhar_mapa(mapa, link);
 
    return 0;
}

🕹️ Como Executar e Testar no VS Code

  1. Abra o terminal integrado.
  2. Compile: gcc dungeon.c -o dungeon
  3. Execute: ./dungeon

Resultado Esperado:

--- DUNGEON ---
[L] [.] [.] [.] [.] 
[.] [K] [.] [.] [.] 
[.] [.] [.] [.] [.] 
[.] [.] [.] [.] [.] 
[.] [.] [.] [.] [D] 

📊 Ilustração Visual: Elementos do Jogo

Veja o que cada símbolo significa na matriz:

graph TD
    A["[L] = Jogador (Link)"]
    B["[K] = Chave (Key)"]
    C["[D] = Porta (Door)"]
    D["[.] = Espaço Vazio"]

🛠️ Prática Obrigatória 1: Movimento Básico

Adicione uma lógica simples na main que peça ao usuário para digitar ‘D’ (para mover para a direita) e mude o link.x de 0 para 1. Depois, chame desenhar_mapa de novo para ver o Link se movendo!


🔑 Gabarito de Código

Prática 1: Fragmento do código

    // Dentro da main, após o primeiro desenho:
    char comando;
    printf("Digite D para mover para a direita: ");
    scanf(" %c", &comando);
 
    if (comando == 'D' || comando == 'd') {
        link.x += 1;
    }
 
    desenhar_mapa(mapa, link);

📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)

(Siga o padrão estabelecido no Guia)


Capitulo Anterior | Proximo Capitulo