Este trabalho prático apresentado para a disciplina de Programação e Desenvolvimento de Software 1 (2025.1 - UFMG) consistiu no desenvolvimento de um jogo completo em linguagem C usando a biblioteca Allegro5. Nele, implementei uma versão de Space Invaders, inspirada no clássico de 1978, porém com acréscimos para tornar a jogabilidade mais interessante e cumprir requisitos para pontuação extra.
O jogo inclui a mecânica clássica de ter que eliminar todos os aliens antes que eles alcancem o chão ou toquem o canhão. Além disso, há um sistema de fases disponivel após vencer o primeiro nível, nesse sistema a cada nível os aliens ficam mais rápidos, ganham mais vida mas dão mais pontos. A pontuação dada por cada alien varia conforme o tipo de alien (diferenciados pelo sprite), os aliens mais altos tem maior pontuação. Além disso, o sistema de tiro também foi repensado para incluir diferentes tipos de tiros além do clássico, os novos tiros são:
- tiro de linha (8%), elimina uma linha inteira;
- tiro bomba (10%), elimina aliens adjacentes ao atingido.
Cada tipo de tiro vem acompanhado de uma probabilidade do jogador obter ao acertar um tiro qualquer, essa probabilidade pode ser alterada no método void init_shot_type(struct Player *player) do arquivo player.c. A quantidade de tiros especiais que um jogador possui é indicada na parte inferior da tela.
Os controles do jogo são feitos da seguinte forma para cada jogador:
| Ação do jogador 1 | Tecla |
|---|---|
| Movimentação para esquerda | A |
| Movimentação para direita | D |
| Tiro clássico | W |
| Tiro de linha | E |
| Tiro bomba | R |
| Ação do jogador 2 | Tecla |
|---|---|
| Movimentação para esquerda | ← |
| Movimentação para direita | → |
| Tiro clássico | ↑ |
| Tiro de linha | space |
| Tiro bomba | L |
Outros controles relvantes é a tecla "ESC" para sair de determinadas telas, P para pausar um jogo e "AWSD" para se mover.
Incialmente, só há dois modos disponíveis, um novo jogo no nível zero ou o jogo para dois jogadores. No modo para dois jogadores, vence aquele que obter a maior pontuação ao fim do jogo. No modo "Novo Jogo", cria-se um novo player que poderá ser salvo na memória com a devida pontuação, esse player poderá repetir a fase, criar um novo jogo ou apenas sair do jogo, registrando o progresso que ele teve (progresso não poderá ser retomado). Uma vez que o jogador avança um nível, ele pode jogar o nível seguinte no modo "New Game Plus" ou repetir o ultimo nível jogado.
Ao salvar o progresso, a pontuação e nome do jogador serão registrador em um ranking, exibido de forma ordenada com as maiores pontuações em destaque.
A compilação é feita através do arquivo Makefile. Os targets aceitos pelo make são as seguintes:
| Target | Ação |
|---|---|
| all | Compila o projeto (padrão) |
| windows | Compila o projeto (Windows) |
| clean | Remove arquivos gerados |
| rebuild | Recompila completamente |
| help | Mostra os targets |
Uma vez que o projeto foi desenvolvido e testado em ambiente linux, acredito que é o mais prático para jogar. Caso seja usado o Windows, pode ser necessário baixar algumas DLLs.
Para o funcionamento do jogo é fundamental a existência dos arquivos em "assets/classic/", visto que neles estão todas as assets usadas. Além disso, ao jogar será criado o diretório "game_data", onde estarão os registros de pontuação máxima e ranking.
Outras informações, como detalhes dos aliens e formação dele, formas de implementações e sistemas podem ser encontradas nos arquivos de headers documentados.

