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.
- Crie o arquivo
dungeon.cna pastasrc/:
#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
- Abra o terminal integrado.
- Compile:
gcc dungeon.c -o dungeon - 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)