Este puzzle é um jogo do gênero Hitori, desenvolvido em C no âmbito da cadeira Laboratórios de Informática II, do curso de Engenharia Informática na Universidade do Minho (ano letivo 2024/25).
O enunciado do projeto pode ser consultado aqui.
O objetivo do programa é permitir que o utilizador resolva interativamente um puzzle lógico, aplicando um conjunto de regras que determinam como cada casa do tabuleiro deve ser marcada.
Cada casa contém um símbolo (uma letra minúscula), e o jogador deve decidir quais as casas que devem ser:
- Pintadas a branco → a letra passa para maiúscula
- Riscadas → substituídas por um cardinal (
#)
- Em cada linha e coluna, só pode existir uma única réplica pintada a branco de cada símbolo.
- Todas as outras réplicas desse símbolo devem ser riscadas (
#). - Se uma casa for riscada, todas as suas vizinhas ortogonais (acima, abaixo, esquerda, direita) devem ser pintadas a branco.
- Deve existir um caminho ortogonal entre todas as casas brancas do tabuleiro — nenhuma pode ficar isolada.
Principais funcionalidades implementadas:
- Leitura e gravação de tabuleiros em ficheiros de texto
- Manipulação de casas — pintar (branco) e riscar (cardinal)
- Desfazer ações anteriores (histórico de jogadas)
- Verificação automática de todas as restrições do puzzle
- Sugestão de jogadas com base em deduções lógicas
- Aplicação iterativa de dicas até não haver mais alterações possíveis
- Resolução automática completa do tabuleiro
- Validação da conectividade das células brancas
- Testes unitários abrangendo todas as funcionalidades com cobertura de código
O jogo suporta os seguintes comandos:
| Comando | Descrição |
|---|---|
l [ficheiro] |
Carregar um tabuleiro a partir de um ficheiro |
g [ficheiro] |
Gravar o tabuleiro atual num ficheiro |
b [coluna][linha] |
Pintar a célula indicada (converter em maiúscula) |
r [coluna][linha] |
Riscar a célula indicada (substituir por #) |
d |
Desfazer a última ação realizada |
v |
Verificar as restrições e indicar infrações |
a |
Aplicar deduções automáticas simples |
A |
Aplicar deduções até não haver mais alterações |
R |
Resolver o tabuleiro automaticamente |
h |
Mostrar novamente a lista de comandos |
S |
Mostrar o estado atual do jogo |
s |
Sair do programa |
Para compilar o projeto, é necessário ter o gcc instalado no sistema. O projeto utiliza uma Makefile com os seguintes targets principais:
make jogo
./jogoPara correr todos os testes automatizados:
make testar- Matheus Monteiro Azevedo - a111430
- Francisco Luciano Martins - a111775