Sokoban Devlog #00: esqueleto da aplicação - codamos.com.br
Nawarian 28 janeiro 2022 jogos
Vamos preparar o nosso ambiente de desenvolvimento
Uma janela simples usando raylib
Automação de build com make
A raylib é uma biblioteca de desenvolvimento de jogos escrita em C. Não traz consigo coisas como gerenciamento de assets, gravidade e outras ferramentas prontas. Apenas o básico que alguém precisa para desenvolver jogos sem muita dor de cabeça.
Desde que eu comecei a usar a raylib com o PHP, comecei a tomar gosto por desenvolver com a linguagem C. E acho que já está mais do que na hora de encarar um projeto em C do começo ao fim. Portanto vou iniciar a série Sokoban usando raylib.
A ideia de escrever um jogo do tipo Sokoban é simples: eu não sou um Game Designer e a única habilidade que eu quero desenvolver é a de programar em C. Sokoban é um jogo simples o suficiente em termos de gráficos e que vai me permitir praticar bastante minhas habilidades em C.
Sokoban é um estilo de jogo do tipo puzzle, onde você passa de fase ao empurrar caixas no lugar correto de forma a resolver o quebra cabeças. Aqui tem um vídeo que ilustra bem como um jogo do tipo Sokoban se parece:
O primeiro post, naturalmente, vai tratar do ambiente de desenvolvimento. E neste caso vou manter tudo muito simples. As ferramentas que vou utilizar para desenvolvimento:
VIM - editor de textos
clang - compilador C, padrão no MacOS
make - ferramenta de automação de build
pkg-config - nos ajuda a encontrar diretório das bibliotecas no computador
raylib - biblioteca de programação de jogos
Uma única linha de comando já deve instalar tudo o que a gente precisa no MacOS:
$ brew install vim make pkg-config raylib
Com tudo instalado, vamos criar um projeto vazio e rodar a nossa primeira janela para ter certeza de que tudo está funcionando.
Vou criar um novo repositório chamado Terrario/sokoban. E já vou inicializar este repositório com um README.md, licença GPL-3 e um .gitignore básico.
Com o repositório criado, posso fazer o clone na minha máquina:
$ git clone [email protected]:Terrario/sokoban.git
$ cd sokoban/
E agora já posso preparar a janela do Raylib e deixar tudo certo pra compilar e rodar o programa.
Vou criar um arquivo src/sokoban.c que vai conter a nossa função main(). Nele vou colocar o seguinte snippet:
InitWindow(800, 600, "Sokobão");
O programa acima não faz nada de mais. Em sequência nós:
Criamos uma janela de 800x600 e título "Sokobão"
Definimos que o nosso jogo roda em 60 frames por segundo
Montamos o loop infinito (game loop)
Dentro do loop infinito, desenhamos na tela
Primeiro pintamos a tela toda de preto
Depois desenhamos o framerate nas coordenadas x = 0, y = 0 da tela
Ao sair do loop (pressionar ESC), fechamos a janela
Vamos compilar e ver se funciona!
$ clang src/sokoban.c -o build/sokoban -lraylib
$ ./build/sokoban
Parece funcionar bonitinho 🎉
Agora vamos automatizar a build um pouco.
Vamos criar um arquivo chamado Makefile com o seguinte conteúdo:
CFLAGS=`pkg-config --cflags raylib` -std=c99
LIBS=`pkg-config --libs raylib`
RMDIR=rm -rf
OUT_DIR=build
OBJS=$(OUT_DIR)/sokoban.o
all: $(OUT_DIR) $(OBJS)
$(CC) $(OBJS) -o $(OUT_DIR)/sokoban $(LIBS)
$(OUT_DIR)/sokoban
$(RMDIR) $(OUT_DIR)
$(OUT_DIR)/%.o: $(SRC_DIR)/%.c
$(CC) -c $< -o [email protected] $(CFLAGS)
$(MKDIR) $(OUT_DIR)
Lembre-se: Makefile não usa espaços para indentação, mas sim tabulações.
Se o Makefile ficou estranho, me dá um alô que eu posso escrever um tutorial só sobre makefiles. O que é importante pra gente é a variável OBJS que no momento só aponta para um objeto. Conforme nós adicionarmos mais arquivos .c no projeto, vamos modificar aquela variável.
É possível fazer isso de forma mais dinâmica, mas eu não acho que esse projeto vá crescer tanto em número de arquivos. Se crescer, eu mudo o Makefile 😛.
Agora basta rodar make clean run pra recompilar o projeto todo e executar a nossa janelinha:
$ make clean run
Vamos deixar tudo organizadinho antes de fechar o post e limpar o repositório um pouco.
Nós não queremos nunca que a pasta build suba para o repositório. Então vou adicionar estas linhas ao arquivo .gitignore:
Agora vamos adicionar jogar tudo para o Github. Afinal de contas, se não está na internet, não existe 😉.
Se quiser saber como subir arquivos no Github, dá uma olhada neste post fera do João Apostulo sobre como subir arquivos no github.
O próximo passo vai ser carregar os assets para o nosso projeto e fazer um bonequinho se mexer na tela.
Eu vou usar os assets Open Source do Kenney pra isso. Aqui tem uma imagem de exemplo direto do site dele: