Disciplina: FGA0210 - PARADIGMAS DE PROGRAMAÇÃO - T01
Nro do Grupo: 03
Paradigma: Lógico
Matrícula | Aluno |
---|---|
20/2028211 | Antônio Aldísio |
19/0026243 | Dafne Moretti Moreira |
18/0122258 | Igor Queiroz Lima |
19/0030879 | João Pedro Moura Oliveira |
17/0080102 | Lucas Gomes Lopes |
18/0114093 | Lucas Ursulino Boaventura |
19/0019085 | Rafael Cleydson da Silva Ramos |
19/0020377 | Thiago Sampaio de Paiva |
O projeto,como o próprio nome já diz, trata-se de um Xadrez, jogo de tabuleiro de natureza recreativa ou competitiva para dois jogadores. A partida de xadrez é disputada em um tabuleiro de casas claras e escuras, sendo que, no início, cada enxadrista controla dezesseis peças com diferentes formatos e características. O objetivo da partida é dar xeque-mate (também chamado simplesmente de mate) no rei adversário.
O motivo para a escolha desse tema é em decorrência da complexidade por trás de toda a interface gráfica e dos algoritmos de movimentação das diferentes peças do xadrez. Portanto, como uma forma de se aprender o paradigma lógico com a linguagem Prolog com objeitvo de exercitar a lógica para resolução de problemas, esse trabalho foi concebido.
A ideia do projeto é baseada em um projeto de um dos integrantes do grupo e de uma biblioteca Python que faz a conexão com o Stockfish: chessGamer e stockfish
- Menu da Aplicação:
- Tela do Jogo:
- Jogo em execução:
Linguagem: Prolog
Tecnologias: Prolog e Stockfish
Para toda a codificação foi utilizado o Prolog, mais especificamente o swipl. Um tutorial mais completo sobre sua instalação pode ser encontrado em https://www.swi-prolog.org/build/unix.html. Entretanto, para fins práticos, a instalação a seguir foi utilizada pelos membros:
# Clone o repositório do swipl
$ git clone https://github.com/SWI-Prolog/swipl-devel.git
# Entre na pasta onde se encontra o Makefile
$ cd swipl-devel
# Crie uma pasta para a build e entre nela
$ mkdir build
$ cd build
# Builde o projeto
$ cmake -DCMAKE_INSTALL_PREFIX=/usr/local ..
$ make
$ sudo make install
Para realizar a análise e avaliação do tabuleiro, foi utilizado um programa externo conhecido como Stockfish. Ele é responsável por calcular, e analisar a pontuação do tabuleiro em uma determinada jogada. A sua instalação deve ser feita da seguinte maneira (compilando da source):
# Clone o repositório do Stockfish
$ git clone https://github.com/official-stockfish/Stockfish.git
# Entre na pasta onde se encontra o Makefile
$ cd Stockfish/src
# Rode o comando make (instalação padrão)
$ make -j build ARCH=x86-64
# Adicione a pasta src no seu $PATH (temporário), pois lá que se encontra o executável
$ export PATH="$PATH:pasta_do_stockfish/src"
É possivel, também, executar o projeto utilizando o docker com X11Forwarding. Para isso, siga os comandos:
$ git clone https://github.com/UnBParadigmas2022-1/2022.1_G3_Logico_Chess.git
$ cd /2022.1_G3_Logico_Chess/
$ make build
$ make run
Para utilizar o projeto é necessário estar com o prolog e o Stockfish instalados e no path do terminal. Com isso feito, e considerando que esteja na raiz do projeto, basta executar os seguintes comandos:
# Clone do projeto
git clone https://github.com/UnBParadigmas2022-1/2022.1_G3_Logico_Chess.git
# Entre na pasta onde se encontram os arquivos .pl
$ cd /2022.1_G3_Logico_Chess/src/
# Entrando no interpretador do swipl
$ swipl main.pl
# Executando a main
$ main.
Obs.: Tivemos alguns problemas de conexões dos integrantes, e por esse motivo algumas partes ficaram cortadas.
Apresente, brevemente, como cada membro do grupo contribuiu para o projeto.
Nome do Membro | Contribuição | Significância da Contribuição para o Projeto (Excelente/Boa/Regular/Ruim/Nula) |
---|---|---|
Antônio Aldísio | Lógica da torre e promoção do peão em rainha | Excelente |
Dafne Moretti Moreira | Lógica de movimentação do bispo, da rainha e do rei | Excelente |
Igor Queiroz Lima | Interface gráfica e movimento en passant | Excelente |
João Pedro Moura Oliveira | Integração com o Stockfish, lógica do check, xequemate e roque | Excelente |
Lucas Gomes Lopes | Lógica do Cavalo | Excelente |
Lucas Ursulino Boaventura | Multiplayer Socket | Boa |
Rafael Cleydson da Silva Ramos | Estrutura e functores iniciais, lógica do peão (3 movimentos básicos) e da rainha. | Excelente |
Thiago Sampaio de Paiva | Menu, Fluxo do Jogo, Multiplayer Socket e Integração | Excelente |
O Prolog, por utilizar o paradigma lógico, faz uso extensivo das entradas e saidas da máquina de von Neumann, permitindo que ambos caminhos sejam possíveis, facilitando diversas programações. Além disso, o controle de fluxo se torna essencial nos códigos, garantindo grande controle ao programador.
Outro ponto fundamental desse paradigma, que também se encontra presente no funcional, é a utilização de listas como uma das estruturas principais. E graças a isso, a recursividade passa a ser abordada de uma maneira quase trivial.
Uma das principais contribuições que o projeto pode ter é no desenvolvimento separado da interface que faz a conexão com o Stockfish, permitindo que outros programadores e cientistas possam ter um acesso facilitado a esse executável, através de uma biblioteca encapsulada.
Diversas alterações e melhorias ainda podem ser feitas, e a equipe separou algumas interessantes:
- Melhor encapsulamento do Stockfish, sem a necessidade de abertura e fechamento a cada execução de um comando.
- Integração de novos comandos do Stockfish.
- Validação própria sem utilizar o Stockfish por trás dos panos.
- Mostrar caminho possível para peça selecionado pelo jogador.
- Colocar o algoritimo padrão de movimento no movimento da torre.
- O jogo fechar o terminal do prolog para recomeçar uma nova partida.
- Insipirado em: chessGame. Disponível em: https://gitlab.com/ensino_unb/EDAFGA/2020_1/grupo-1-ai/-/tree/feature/chessGame/src
- Documentação do Prolog. Disponível em: https://www.swi-prolog.org/
- Bramer, M. A. Logic Programming with Prolog. New York: Springer, 2013.
- XPCE User Guide: https://www.swi-prolog.org/download/xpce/doc/userguide/userguide.pdf
- Stockfish: https://github.com/zhelyabuzhsky/stockfish