Jogo de puzzle Nonogram desenvolvido em C com interface gráfica usando a biblioteca Allegro 5. Projeto acadêmico desenvolvido para a disciplina de Laboratório de Programação (ELC1065) na Universidade Federal de Santa Maria (UFSM).
O Nonogram é um puzzle lógico onde o jogador deve preencher células de um tabuleiro com base em pistas numéricas dispostas nas linhas e colunas. Cada pista indica a quantidade e sequência de células consecutivas que devem ser pintadas naquela linha ou coluna.
Este projeto implementa um tabuleiro 8×8 com geração aleatória de puzzles e dois modos de jogo distintos.
- 🎲 Geração aleatória de puzzles com validação automática
- 🔢 Cálculo automático das pistas por linha e coluna
- 🏆 Detecção automática de vitória
- 🎮 Dois modos de jogo: Normal e Clássico
- ↩️ Sistema de desfazer jogadas (Modo Clássico)
- ❤️ Sistema de vidas com feedback visual de erros (Modo Normal)
- 📊 Contador de células restantes (Modo Clássico)
- 🔄 Botões: Limpar tabuleiro, Novo puzzle, Voltar ao menu
| Tecnologia | Uso |
|---|---|
| C | Linguagem principal |
| Allegro 5 | Renderização gráfica, eventos de mouse e teclado |
nonogram-c/
├── jogo.c # Lógica principal do jogo
├── util.c # Abstração da biblioteca Allegro 5
├── util.h # Cabeçalho das funções utilitárias
├── Makefile # Script de compilação
├── data/
│ └── Audiowide-Regular.ttf # Fonte utilizada na interface
├── docs/
│ └── screenshots/ # Capturas de tela do jogo
└── README.md
- GCC instalado
- Allegro 5 instalado
No Ubuntu/Debian:
sudo apt install gcc make liballegro5-devNo Arch Linux:
sudo pacman -S gcc make allegromakeOu manualmente:
gcc -o jogo jogo.c util.c -lallegro -lallegro_main -lallegro_color -lallegro_font -lallegro_ttf -lallegro_primitives -lallegro_image -lm./jogo
⚠️ Execute sempre a partir da raiz do projeto para que a fonte emdata/seja encontrada corretamente.
- Ao abrir o jogo, escolha o modo de jogo no menu principal
- Use as pistas numéricas nas bordas do tabuleiro para descobrir quais células pintar
- Clique em uma célula para interagir com ela
- Resolva o puzzle completando todas as células corretas
Cada número indica um grupo de células consecutivas pintadas naquela linha ou coluna. Grupos diferentes são separados por pelo menos uma célula vazia.
Exemplo: a pista 3, 1 significa: três células pintadas consecutivas, depois ao menos uma vazia, depois uma célula pintada.
- Você tem 3 vidas
- Clicar em uma célula errada marca com um ✗ vermelho e perde uma vida
- Clicar em uma célula correta a pinta automaticamente
- O jogo termina quando as vidas acabam ou o puzzle é resolvido
- Sem penalidade por erros — você decide livremente o que pintar
- Ciclo de estados por clique:
vazio → pintado → marcado (✗) → vazio - Botão Desfazer disponível para reverter a última jogada
- Contador "Restam X / Y" mostra o progresso em relação ao total de células corretas
- Uso de ponteiros e passagem por referência em C para gerenciar o estado do jogo entre funções
- Implementação de uma pilha manual (
historico[]+topo) para o sistema de desfazer - Integração com a biblioteca Allegro 5: renderização, eventos de mouse e gerenciamento de fontes
- Uso de enums para representar estados do jogo
- Tabuleiros de tamanhos variados (5×5, 10×10, 15×15)
- Sistema de cronômetro
- Tela de fim de jogo mais elaborada com o tabuleiro resolvido
- Suporte a clique direito para marcar células diretamente no Modo Normal
- Níveis de dificuldade com controle de densidade do puzzle
- Salvamento e carregamento de puzzles
Este projeto foi desenvolvido para fins acadêmicos na UFSM. Livre para uso educacional.
Desenvolvido por Arthur Trindade da Hora · UFSM · 2026




