<aside> 🕹️ Notas sobre o que precisei aprender para desenvolver meu primeiro jogo 2D 🤓 Como aprendi a Minilibx, como migrei do WSL local para o Workspaces, e no geral como desenvolvi meu projeto — especialmente as dicas que eu gostaria de ter escutado antes de ter alguns problemas hehehe
</aside>
palavras-chave: jogo 2D, biblioteca gráfica, eventos, renderização, janelas, valgrind
<aside> ⚠️ Sabemos que não é todo mundo que tem o privilégio de poder dedicar 100% do seu tempo integralmente para a 42. Estes guias surgiram com o objetivo de agilizar o processo de descobrir quais os conhecimentos necessários para conseguir resolver o problema proposto pelo projeto, economizando tempo valioso pra codar. Evitei ao máximo dar soluções prontas — porque desenhar, implementar, testar e construir a solução também faz parte do seu aprendizado na 42. Mesmo assim, esta página pode conter alguns spoilers de implementação, por isso, prossiga com precaução!
</aside>
Esse foi sem dĂşvidas o projeto MAIS MASSA que já fiz atĂ© o momento, e tambĂ©m o maior / mais desafiador - apesar de que no final, como sempre, vc olha pra trás e pensa que "nem foi tĂŁo difĂcil assim".
O desafio do so_long Ă© construir uma fase de um videogame fictĂcio, que possui uma personagem principal que navega pela fase, coleta itens e por fim encerra a fase saindo por uma porta de saĂda. Para isso, vocĂŞ vai utilizar a biblioteca minilibx — criada pelo staff da 42 Paris que gravou os vĂdeos lá na intra kkk — para abrir uma janela e colorir os pixels dentro dela, e programar a partir de eventos, as duas bases para um jogo eletrĂ´nico gráfico rodar.
A primeira dificuldade é aprender a como de fato usar a minilibx. A documentação oficial em si não é tão completa/informativa, mas é um bom ponto de entrada. Nela você encontra quais flags são necessárias pra conseguir compilar seu programa, e alguma informação das funções mais básicas da lib.
A documentação oficial da minilibx é escassa e não vai além do básico pra abrir uma janela/desenhar com pixels. Felizmente, outras pessoas fizeram os seus guias para usar a minilibx, que foram o que me ajudaram a entender melhor como utilizá-la. Deixo aqui as referências e dicas que me foram úteis.
Por se tratar de um projeto consideravelmente maior comparado com os projetos anteriores — printf, get_next_line, libft —, Ă© uma Ăłtima oportunidade de usar o Git pra ir salvando seu progresso aos poucos, aprender a usar o Valgrind (pfvr use desde o inĂcio!), criar uma estrutura de pastas pra organizar os arquivos (tem vários arquivos complementares de mapas e sprites), e utilizar structs pro seu cĂłdigo ficar mais organizado e semântico.
Por fim, acho importante trazer a atenção para uma transição muito sutil que acontece quando vocĂŞ transiciona do primeiro anel do Holy Graph (libft, printf, gnl) para o segundo (so_long, pipex, push_swap): nenhum dos projetos que vocĂŞ entregou atĂ© agora possuĂa uma main! O que significa que agora, independentemente de qual projeto vocĂŞ escolheu para fazer, vocĂŞ está construindo um programa inteiro, que tem começo, meio e fim — diferente do que veio antes, que eram pedaços de cĂłdigos (funções) que vocĂŞ poderiam ser chamados aqui ou ali dentro de outros programas. Será sua primeira oportunidade de entender de perto como Ă© que um programa de verdade funciona, qual Ă© a cara que um programa tem, e como lidar com a complexidade de um programa — que tem um Ăşnico ponto de entrada, mas possivelmente vários pontos de saĂda. Aqui vocĂŞ vai botar Ă prova de fogo as suas habilidades de gerenciamento de memĂłria!
Eu escolhi reviver um clássico da minha infância usando os sprites de Pokemon Yellow para o Gameboy, e foi simplesmente mágico! Espero que sua experiência com esse projeto seja tão divertida quanto foi pra mim. Boa sorte 🍀
A minilibx Ă© uma biblioteca escrita por cima de outra biblioteca — a X11, que sĂŁo as funções construĂdas para manipular o sistema de janelas X (X Window System) — que por sua vez Ă© um programa para sistemas Unix-like (tipo o Linux) que serve para criar interfaces gráficas em um computador e interagir com mouse e teclado. Nesse sentido, a minilibx Ă© uma simplificação de um sistema maior com funções mais especĂficas / complexas; e condensa o básico que iniciantes precisam aprender para começar a construir janelas e elementos gráficos num computador do tipo Unix (vulgo nĂłs). Esse básico se resume a eventos de perifĂ©ricos (mouse e teclado), gerenciamento de janelas, e desenhar em janelas.
Para entender a relação entre a biblioteca X11 e a minilibx, a melhor analogia que eu consegui pensar (talvez ñ seja a melhor de todas) foi a de uma bicicleta com rodinhas: a bicicleta Ă© a X11, que Ă© um sistema complexo que precisa de bastante habilidade motora e equilĂbrio pra ser operado. A minilibx Ă© uma bicicleta com rodinhas — ou seja, executa a mesma função que uma bicicleta sem rodinhas, mas com uma camada de complexidade a menos (a criança nĂŁo precisa se preocupar com se equilibrar dos lados, apenas em pedalar e usar o guidon). Dessa forma, a minilibx adiciona uma camada de abstração Ă X11, permitindo que nĂłs, n00bs, foquemos em aprender a manipular somente o essencial da X11, ao invĂ©s de se perder em meio a detalhes tĂ©cnicos excessivos que a biblioteca oferece.
O repositĂłrio oficial da minilibx Ă©:
https://github.com/42Paris/minilibx-linux
Se você decidir fazer seu projeto no workspaces como eu fiz, essa etapa é tranquila, só adicionar umas flags de compilação no seu Makefile, e boa. Se decidir fazer no seu sistema local Linux/Mac, o repo dá as instruções do que instalar pra conseguir rodar a minilibx.