Skip to content

jg2alv/pds2-tp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Projeto Final

Dependências

É 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.

Compilação

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.

Execução

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.

Problema

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.

Solução

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 Jogadores 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.

Extras

Como funcionalidade extras decidimos incluir:

  • Mensagens de erros explicativas e comandos de ajuda para os usuários.
  • Customização para os jogos Lig4 e Reversi, permitindo tamanhos de tabuleiro diferentes.
  • Dois jogos novos sem opções de customização, JogoDaVelha e Xadrez*.
  • 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.

Funcionalidade

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 o Reversi 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.

Formato do arquivo de jogadores

{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}]
]

Integrantes

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)