🧊 cub3D - Projeto Raycasting da Escola 42
Este projeto é uma introdução à técnica de Raycasting em gráficos 3D, inspirada nos primeiros jogos First-Person Shooter (FPS) como Wolfenstein 3D. O objetivo principal é renderizar uma visão 3D de um labirinto a partir de um mapa 2D, utilizando a biblioteca MiniLibX para a janela, gráficos e eventos.
- Renderização 3D: O núcleo do projeto é o algoritmo de Raycasting que projeta o mapa 2D do labirinto em uma visão 3D para o jogador.
- Controles de Movimento: O jogador pode mover-se para a frente, para trás, e virar (rotação) à esquerda e à direita.
- Detecção de Colisão: Implementamos a colisão de paredes, impedindo que o jogador atravesse os limites do labirinto.
- Gestão de Texturas: As texturas são aplicadas às paredes (Norte, Sul, Leste, Oeste) e às cores do chão e do teto são definidas (Flat).
- Parsing do Mapa: Leitura e validação do ficheiro de configuração do mapa (
.cub), garantindo que o mapa é válido (fechado, caracteres válidos, etc.).
O projeto é construído usando a biblioteca MiniLibX. Certifique-se de que a biblioteca está instalada e configurada no seu ambiente 42 (geralmente já está).
Navegue até o diretório raiz do projeto e execute o comando make:
1. Clone the repository
git clone https://github.com/TiagoDev88/cub3D.git2. Compile
makeIsso criará o executável principal chamado cub3D.
3. Run
./cub3D <caminho/para/ficheiro.cub>Exemplo:
./cub3D maps/basic.cubO ficheiro de mapa deve incluir informações de configuração e o layout do labirinto.
| Chave | Descrição | Exemplo |
|---|---|---|
| NO | Textura para a parede Norte | NO ./textures/north.xpm |
| SO | Textura para a parede Sul | SO ./textures/south.xpm |
| WE | Textura para a parede Oeste | WE ./textures/west.xpm |
| EA | Textura para a parede Leste | EA ./textures/east.xpm |
| F | Cor do Chão (RGB) | F 220,100,0 |
| C | Cor do Teto (RGB) | C 225,30,0 |
O mapa deve ser definido por:
- '1': Parede
- '0': Espaço Vazio
- 'N', 'S', 'E', 'W': Posição e Orientação Inicial do Jogador
- Espaços: Podem ser usados para criar margens ou separar o mapa da configuração.
Regras de Validação:
- Deve haver exatamente uma posição inicial do jogador (N, S, E, ou W).
- O mapa deve ser fechado/rodeado por paredes '1'.
- Apenas caracteres válidos ('0', '1', 'N', 'S', 'E', 'W', e espaço) são permitidos no mapa.
| Tecla | Ação |
|---|---|
| W | Mover para a Frente |
| S | Mover para Trás |
| A | Mover para a Esquerda (Strafe) |
| D | Mover para a Direita (Strafe) |
| Setas Esquerda / Direita | Rodar a Câmara / Virar |
| ESC | Sair do Jogo |
C
MiniLibX (biblioteca gráfica)
42 login: tfilipe- / GitHub: @TiagoDev88
42 login: edfreder / GitHub: @EdgarFir
