Este programa é um visualizador de partida de xadrez. Ao iniciar, deve ser informado um arquivo válido em formato PGN contendo os dados de uma partida. É possível ver as informações sobre o jogo e acompanhar a partida jogada a jogada numa representação visual de tabuleiro, junto com informações sobre o que está acontecendo. A qualquer momento, terá opções de ação como [ENTER] para continuar (começar o jogo ou avançar para a próxima jogada) ou [q] para sair do programa, sendo que algumas podem estar indisponíveis de acordo com o momento.
O programa foi testado e funcionou como esperado primariamente em ambiente Linux com Ubuntu 20.04 LTS
e compilado com gcc 9.3.0
. Adicionalmente, em Windows 10 build 22454
compilado com gcc 10.2.0
. Apesar dos esforços para manter o programa multiplataforma e oferecer bibliotecas e instruções de compilação equivalentes, a execução em Linux é recomendada caso algum problema seja encontrado.
É importante que os arquivos PGN usem caracteres de fim de linha CRLF
, o padrão do Windows, como os que foram disponibilizados para teste. O programa leva em consideração que o Windows entende ele inteiro como um \n
e o Linux como um caracter extra CR
seguido do \n
, que influencia na leitura de algumas jogadas ao fim da linha no método que foi usado.
Linux: Installe o pacote libncurses-dev
, necessário para compilar a biblioteca ncurses.h
:
sudo apt install libncurses-dev
no caso do Ubuntu, ou pacote e sintaxe equivalente para a distribuição utilizada.
Windows: baixe o código-fonte da biblioteca PDCurses para a pasta do projeto:
git clone https://github.com/wmcbrine/PDCurses
Ou baixe e extraia o .zip, tendo a pasta PDCurses na raiz do projeto.
Compile:
cd PDCurses\wincon
make
ou mingw32-make
, de acordo com a disponibilidade.
Observe que os arquivos PDCurses\curses.h
e PDCurses\wincon\pdcurses.a
são esperados nesses exatos caminhos, a partir da raiz do programa, para o correto funcionamento.
O código-fonte precisa da especificação C++17 para funcionar. Ela é suportada pelo GCC desde a versão 5, mas só é usada por padrão a partir da versão 11. Por isso, é necessário especificar -std=c++17
no comando de compilação.
Linux: Compile o código-fonte incluindo os arquivos main.cpp, jogo.cpp, partida.cpp, interface.cpp e validador.cpp e a biblioteca ncurses, criando um executável main.sh:
> g++ -std=c++17 main.cpp jogo.cpp partida.cpp interface.cpp validador.cpp -lncurses -o main.sh
Ou usando um atalho para incluir todos os arquivos .cpp do diretório:
> g++ -std=c++17 *.cpp -lncurses -o main.sh
Windows: Compile o código-fonte incluindo os arquivos main.cpp, jogo.cpp, partida.cpp, interface.cpp e validador.cpp e a biblioteca pdcurses.a, criando um executável main.exe:
g++ -std=c++17 main.cpp jogo.cpp partida.cpp interface.cpp validador.cpp PDCurses\wincon\pdcurses.a -o main.exe
Para que todas as informações sejam exibidas corretamente, é recomendado que o terminal tenha disponível ao menos 130 colunas de largura e 85 linhas de altura. Diminua o tamanho da fonte, caso necessário.
Execute o arquivo criado no passo anterior
Linux:
./main.sh
Windows:
main.exe
O programa irá buscar arquivos PGN na mesma pasta do executável e oferecer como opções, bastando pressionar o número correspondente, ou q para sair:
################################
# #
# PAC XADREZ #
# #
################################
Bem-vindo!
Escolha um arquivo PGN para comecar:
[1] 01.pgn
[2] 02.pgn
[3] 03.pgn
[q] sair
Esse passo pode ser evitado informando o nome como argumento na executação:
./main.sh jogo01.pgn
Caso o arquivo não possa ser lido, o programa será encerrado:
################################
# #
# PAC XADREZ #
# #
################################
Bem-vindo!
Lendo arquivo jogo04.pgn
Encerrando o programa: Nao foi possivel abrir o arquivo jogo04.pgn
O arquivo será carregado e as informações do jogo exibidas:
Lendo arquivo 01.pgn
01.pgn carregado com sucesso!
Evento: URS-ch36
Local: URS
Data: 1968
Rodada: 2
Branco: Zaitsev Igor A
Preto: Kholmov Ratmir D
Resultado: Houve empate
ECO: C42
A partir deste momento, um menu de opções sempre estará disponível, contendo opções diferentes de acordo com o momento:
[ENTER] continuar [q] sair
Pressionando ENTER para continuar, um tabuleiro inicial será exibido, junto com a legenda do que cada letra representa:
[A] [B] [C] [D] [E] [F] [G] [H]
-----------------------------------------------------------------
| | | | | | | | |
[8] | r | n | b | q | k | b | n | r | [8]
| | | | | | | | |
-----------------------------------------------------------------
| | | | | | | | |
[7] | p | p | p | p | p | p | p | p | [7]
| | | | | | | | |
-----------------------------------------------------------------
| | | | | | | | |
[6] | | | | | | | | | [6]
| | | | | | | | |
-----------------------------------------------------------------
| | | | | | | | |
[5] | | | | | | | | | [5]
| | | | | | | | |
-----------------------------------------------------------------
| | | | | | | | |
[4] | | | | | | | | | [4]
| | | | | | | | |
-----------------------------------------------------------------
| | | | | | | | |
[3] | | | | | | | | | [3]
| | | | | | | | |
-----------------------------------------------------------------
| | | | | | | | |
[2] | P | P | P | P | P | P | P | P | [2]
| | | | | | | | |
-----------------------------------------------------------------
| | | | | | | | |
[1] | R | N | B | Q | K | B | N | R | [1]
| | | | | | | | |
-----------------------------------------------------------------
[A] [B] [C] [D] [E] [F] [G] [H]
R: torre, N: cavalo, B: bispo, Q: dama, K: rei, P: peão
MAIUSCULAS: BRANCAS, minusculas: pretas
Além das peças brancas e pretas serem diferenciadas por maiúsculas e minúsculas, respectivamente, elas são representadas por cores diferentes, sendo o branco verde e o preto magenta.
À direita dele, fica a região onde será exibida informação adicional:
Aguardando o inicio da partida
Ao continuar mais uma vez, será aplicada a primeira jogada da partida carregada, atualizando as posições das peças no tabuleiro:
[A] [B] [C] [D] [E] [F] [G] [H]
-----------------------------------------------------------------
| | | | | | | | |
[8] | r | n | b | q | k | b | n | r | [8]
| | | | | | | | |
-----------------------------------------------------------------
| | | | | | | | |
[7] | p | p | p | p | | p | p | p | [7]
| | | | | | | | |
-----------------------------------------------------------------
| | | | | | | | |
[6] | | | | | | | | | [6]
| | | | | | | | |
-----------------------------------------------------------------
| | | | | | | | |
[5] | | | | | p | | | | [5]
| | | | | | | | |
-----------------------------------------------------------------
| | | | | | | | |
[4] | | | | | P | | | | [4]
| | | | | | | | |
-----------------------------------------------------------------
| | | | | | | | |
[3] | | | | | | | | | [3]
| | | | | | | | |
-----------------------------------------------------------------
| | | | | | | | |
[2] | P | P | P | P | | P | P | P | [2]
| | | | | | | | |
-----------------------------------------------------------------
| | | | | | | | |
[1] | R | N | B | Q | K | B | N | R | [1]
| | | | | | | | |
-----------------------------------------------------------------
[A] [B] [C] [D] [E] [F] [G] [H]
Observe, a partir de agora, que as peças movidas na jogada atual são destacadas com um fundo branco, para que seja mais fácil identificá-las.
Na janela à direita, são exibidas as informações sobre a jogada atual:
Jogada #1
BRANCO: e4
Movendo peao branco para e4
PRETO: e5
Movendo peao preto para e5
Agora, abaixo do tabuleiro, ficam visíveis as peças já capturadas de cada jogador:
Pecas brancas capturadas: P Q B
Pecas pretas capturadas: p q n
E assim sucessivamente para cada jogada.
A partir da segunda jogada, o menu mostra também a opção voltar, que desfaz a última jogada e volta para a anterior:
[ENTER] continuar [v] voltar [q] sair
A janela à direita avisará quando acabarem as jogadas:
Fim das jogadas! Avance para ver o resultado.
Avançando nesse momento, será exibida a tela de fim de jogo com o resultado e algumas estatísticas:
###############################
# #
# FIM DO JOGO #
# #
###############################
Resultado: Houve empate
15 jogadas foram executadas
4 peças brancas foram capturadas
4 peças pretas foram capturadas
Agora, é possível recomeçar o jogo ou sair do programa:
[r] recomecar [q] sair