Disciplina: FGA0210 - PARADIGMAS DE PROGRAMAÇÃO - T01
Nro do Grupo: 03
Paradigma: Funcional
Matrícula | Aluno |
---|---|
190124997 | Amanda Nobre |
200017772 | Fellipe Pereira da Costa Silva |
190028122 | Gabriel Sabanai Trindade |
200037994 | Guilherme Barbosa Ferreira |
190029731 | Ingrid da Silva Carvalho |
190046848 | Laís Portela de Aguiar |
221007653 | Luciano Ricardo da Silva Junior |
190033681 | Luiz Henrique Fernandes Zamprogno |
200025449 | Natan Tavares Santana |
200042416 | Pablo Christianno Silva Guedes |
Este projeto implementa o jogo Termo em Haskell, proporcionando uma experiência interativa e textual. O objetivo do jogador é adivinhar uma palavra secreta de cinco letras em até seis tentativas, utilizando feedback fornecido após cada palpite.
- Seleção de Palavra Secreta:
- Uma palavra aleatória de cinco letras é escolhida a partir de uma lista pré-definida de palavras válidas.
- Interface Textual:
- O jogador interage com o jogo através do terminal, inserindo palpites e recebendo feedback.
- Feedback para o Jogador:
- Letras corretas na posição certa são destacadas com a cor verde.
- Letras corretas, mas em posições erradas, recebem a cor amarelo.
- Letras incorretas não são destacadas.
- Validação de Entradas:
- Apenas palavras válidas (cinco letras e pertencentes ao dicionário) são aceitas.
- O jogador é solicitado a tentar novamente em caso de entrada inválida.
- Condição de Vitória ou Derrota:
- O jogo termina com vitória se o jogador adivinhar a palavra dentro do limite de tentativas.
- Caso contrário, a palavra secreta é revelada ao final do jogo.
Linguagens: Haskell
Tecnologias: Cabal
Para jogar é necessário entrar no diretório termo
:
cd termo
E subir a aplicação:
make
Ao rodar esse comando, é iniciado o processo de criação e execução da imagem docker, permitindo que o usuário interaja com o jogo pelo terminal.
O comando make
só precisa ser executado uma única vez para incializar o container, caso o projeto não tenha sido modificado, nas próximas execuções basta rodar:
make run
Este comando apenas executará a imagem já criada.
Ao final, caso não queira mais jogar, basta rodar o seguinte comando para limpar a imagem Docker:
make clean
Também é possível usar o Cabal para executar o projeto:
cabal build
cabal run
As opções iniciais do jogo aparecerão da seguinte forma, e o jogador poderá interagir através de inputs no terminal:
Após ter buildado o jogo pela primeira vez com o make
, é possível utilizar o comando make run
para jogar novamente!
Aqui está a tabela com os nomes em ordem alfabética:
Nome do Membro | Contribuição | Significância da Contribuição para o Projeto (Excelente/Boa/Regular/Ruim/Nula) | Comprobatórios |
---|---|---|---|
Amanda Nobre | Configuração do ambiente de desenvolvimento, contribuição em código | Excelente | Configuração Inicial, Menu do Jogo, Padronização de cores, Documentação |
Felipe Pereira | Contribuição em código | Boa | Feedback com cores nas palavras |
Gabriel Sabanai | Contribuição em código | Boa | Estado do Jogo |
Guilherme Barbosa | Programação da atualização da interface, exibição do jogo e revisões de código | Boa | Atualização da Interface e Exibição de Jogo |
Ingrid Carvalho | Contribuição em código | Boa | Configuração da mensagem de feedback da tentativa |
Lais Portela | Contribuição em código | Boa | Configuração das cores e tentativas de acerto |
Luciano Ricardo | Coordenação do grupo, divisão das tasks e contribuição em código | Excelente | Função runGame Inicial |
Luiz Henrique | Contribuição em código e documentação | Boa | Gerenciamento da escolha aleatória de palavras, Documentação, Filtro Base |
Natan Tavares | Contribuição em código | Boa | Processamento do input, Documentação |
Pablo Christianno | Contribuição em código | Boa | Leitura e validação da palavra de entrada (input) |
Durante a execução do projeto, a equipe aprendeu:
- A importância de estruturar o código funcional para garantir clareza e manutenibilidade.
- A aplicabilidade do paradigma funcional, suas vantagens e desvatagens.
- Como enfrentar desafios de colaboração em equipe, especialmente ao trabalhar em um novo paradigma.
Observamos que implementar algoritmos em um ambiente funcional exige uma abordagem distinta dos paradigmas imperativos, tornando o desenvolvimento um desafio estimulante. Haskell, apesar de ser uma linguagem com uma sintaxe complexa e desafiadora para compreensão e leitura, oferece um grande benefício: seu paradigma funcional altamente modularizado facilita a organização e o desenvolvimento do código. Embora a compilação de arquivos em Haskell seja trabalhosa, a linguagem nos incentiva a adotar uma nova perspectiva, priorizando soluções elegantes e expressivas, o que é uma vantagem valiosa para escrever código conciso e otimizado.
Cada membro da equipe contribuiu com incrementos específicos nos módulos e na implementação de novas funcionalidades. Essas atividades foram organizadas por meio de issues, que foram priorizadas levando em consideração as dependências necessárias para sua realização.
Alguns pontos a melhorar incluem o fato jogo não reiniciar automaticamente após o término de uma partida e pequenas despadronizações no uso das cores.
- Garantir uma padronização de cores e elementos visuais para melhorar a identidade visual e a consistência do projeto.
- Explorar novas funcionalidades e integrações que possam expandir o escopo do projeto, oferecendo mais opções aos usuários.
- Realizar otimizações técnicas para melhorar a performance e garantir uma execução mais suave e eficiente.
- Selecionar melhor as palavras pois há algumas que são difíceis de acertar (Ex: verbos conjugados, nomes próprios, regionalismos, gírias, etc)