É necessário g++
para compilar os binários e doxygen
para a documentação.
O projeto foi criado exclusivamente com a plataforma Linux em mente.
Use make bin/main
para compilar o programa.
Use make bin/t_main
para compilar os testes.
Use doxygen Doxyfile
para compilar a documentação.
Use make
ou make all
para compilar o programa, os testes e a documentação, nessa ordem.
Use make clean
para deletar todos os objetos compilados.
Use bin/main
no directório raíz do projeto para jogar.
Use bin/t_main
para rodar os testes.
Use make run
para compilar e jogar de uma só vez.
Use make test
para compilar e testar de uma só vez.
Foi proposta a implementação de um sistema para cadastro de jogadores e realização de partidas em dois jogos, Reversi e Lig4, de forma que seus resultados sejam contabilizados entre execuções do programa. Foi definida como obrigatória a utilização da programção orientada a objetos em C++, em especial dos mecanismos de polimorfismo universal de inclusão fornecidos pela linguagem.
Também foram propostas a biblioteca doctest
para testes, doxygen
para a documentação, e a criação de CRCs para o projeto.
Em função de solucionar o problema proposto, foram criadas 10 classes, 1 delas abstrata com 5 herdeiras.
A classe Jogo
, com seus métodos pure virtual para a realização de jogadas e verificação de vitória, além de seu métodos para gerenciamento dos jogadores e do tabuleiro, serviu de base a para as classes dos jogos específicos, Reversi
, Lig4
, JogoDaVelha
e Xadrez
.
A classe Jogada
serviu de auxílio para a implementação de alguns jogos.
A classe Jogador
serviu como receptáculo para as informações cadastradas e Resultados
(vitórias, derrotas e empates) de partidas.
A classe Sistema
acabou responsabilizada por construir e guardar Jogador
es a partir do arquivo e reescrevê-lo com dados atualizados após o uso, além de realizar as partidas dos diferentes jogos de fato, com auxílio dos métodos disponibilizados pela classe Jogo
.
Também criamos uma classe Excecao
, herdeira de std::runtime_error
para gerenciamento de erros de execução.
O desenvolvimento e implementação de cada uma dessas classes foi dividido entre os membros do grupo.
As maiores dificuldades encontradas foram relacionadas a definir qual seria a interface das classes Jogo
, na medida em que precisavam interagir de forma adequada com o Sistema
e pudessem ser testadas facilmente independente dele.
Além disso, o site sugerido para a criação de CRCs estava fora do ar, então fizemos um arquivo de texto equivalente.
Como funcionalidade extras decidimos incluir:
- Mensagens de erros explicativas e comandos de ajuda para os usuários.
- Customização para os jogos
Lig4
eReversi
, permitindo tamanhos de tabuleiro diferentes. - Dois jogos novos sem opções de customização,
JogoDaVelha
eXadrez
*. - Possibilidade de desistência e cancelamento de uma partida.
*Basicamente um protótipo: não inclui xeque nem xeque-mate, roque, en passant, promoção para cavalo, bispo ou torre, afogamento ou outras possibilidades de empate.
Ao iniciar o programa, o arquivo data/jogadores.txt
é lido, ou criado caso não exista, e o usuário pode digitar uma série comandos para interagir com o sistema.
Digite ?
para uma explicação sobre os comandos disponíveis.
Após serem cadastrados pelo menos dois jogadores, pode ser realizada uma partida entre eles. Os jogos Lig4
e Reversi
podem ser customizados adicionando logo após o conteúdo normal de um comando EP
: um número de linhas e colunas do tabuleiro, e o tamanho do lado de um tabuleiro quadrado, repectivamente.
Cada um dos jogos disponíveis tem um formato de jogada único:
- O
JogoDaVelha
e oReversi
recebem dois números, uma linha e uma coluna, respectivamente. - O
Lig4
recebe só um número, o da coluna. - O
Xadrez
recebe uma string na forma[a-h][1-8][a-h][1-8]
, onde o primeiro par de letra e número representa a coluna e a linha de origem de uma peça, e o segundo, seu destino.
Digite desisto
durante qualquer partida para encerrar o jogo e contabilizar derrota para si.
Digite cancela
para fazer o mesmo porém contabilizando empate para ambos os jogadores.
Qualquer erro na entrada produz uma mensagem de erro útil sobre a última ação.
Quando o programa é fechado ou finaliza normalmente, os dados adquiridos durante a execução são escritos no arquivo data/jogadores.txt
.
{número de jogadores}
[
{apelido do jogador}
{nome do jogador}
{número de jogos diferentes que o jogador já jogou}
[{nome do jogo} {número de vitórias} {número de derrotas} {número de empates}]
]
Davi Oliveira Sad (DaviOSad)
Giordano Henrique Liporati (Spwner)
João Gabriel Guimarães Alves Vaz (jg2alv)
Maria Eduarda Nunes e Carvalho de Vasconcelos Costa (MEduardaNunes)
Thiago Esmerio Fernandes (HSThzz)