O projeto requer que seja instalado o JAVAFX na pasta ./libs
. A versão utilizada é a 11.0.2, e pode ser encontrado em https://gluonhq.com/products/javafx/
Seguindo a ideia de fazer um jogo de Paciência o mais modularizado possível, surgiu este projeto.
Com toda as funcionalidades do código estando no src. A classe principal sendo Menu.java.
Iniciando com a criação de classe para pode criar o objeto de carta, sendo essas utilizadas para o desenvolvimento do jogo.
Nela se encontra as informações essencias que é necessário para uma carta existir: naipe, valor, peso(para calcular a distância entre cartas), visibilidade e cor.
Foi implementado uma factory, padrão factory method, para poder gerenciar a criação de baralhos, podendo assim existir a criação de diferentes tipos deles(caso se queira implementar outros jogos em que o baralho é diferente). Porém no jogo atual, o Paciência, só se utiliza 1 baralho simples, sem coringa, com 52 cartas.
Para organização das pilhas de fundações, estoque, fileiras e descarte, foi utilizada uma classe abstrata Pilha que implementa os atributos/métodos comuns à todas as pilhas.
Também foram adicionados métodos específicos em algumas pilhas, nas suas respectivas classes.
Foram necessários alguns métodos em que seriam utilizados em todo o código, e já pensando em facilitar para projetos futuros, foi pensado na criação dessa pasta.
Classe para realizar as comparações entre as cartas. Nela temos as comparações necessárias para a utilização nas fundações e nas fileiras. Tendo também métodos para informar se pode ou não realizar a movimentação.
Classe que embaralha e retorna um array de cartas.
Esta classe possui um método que recebe um array de cartas e oculta todas ou as torna visíveis.
Classe que contém os métodos que são responsáveis pelas movimentações no jogo, permitindo a movimentação de somente uma carta, ou de várias cartas em conjunto.
Utiliza essa pasta para organização de comandos, junção de alguns comandos para uma melhor organização e facilitando a criação de novos controller quando quiser implementar novas coisas.
Este controller tem o objetivo de ser um inicio para qualquer jogo que possa ser implementado futuramente. Ele possui funções básicas que os jogos necessitam.
Este controller é responsável por pelas movimentações entre as pilhas. Contém métodos para cada movimento, utilizando os métodos da classe MoverCartas.
Este controller possui as regras especifícas utilizadas para o jogo de paciências.
Pacote responsável pela interface do código. Contendo todos os prints e comunicações com o usuário.
Sendo a responsável para inicialização do jogo, em que pergunta pro usuário se quer iniciar a partida de paciência ou encerrar o programa. Montado dessa forma para facilitar a criação de um menu para qualquer outro jogo que possa vir ser implementado.
Este menu é responsável por todas opções de jogadas disponíveis ao jogo Paciência. Dividido em "dois" menus, um para escolher uma próxima jogada, como por exemplo mover cartas, e outro com as movimentações possíveis entre as pilhas. No "primeiro" menu é sempre verificado se o jogo foi ganho para que possa ser finalizado assim que o usuário complete as quatro fundações.
O padrão estrutural Facade foi utilizado para fornecer uma interface mais simples ao Menu Paciência. Assim, esta classe reune todas as funcionalidades referentes aos três controllers e o manu pode se comunicar com elas indiretamente apenas pelo Facade.
O padrão criacional Factory Method foi utilizado com o objetivo de diminuir as responsabilidades da classe Baralho e em sua facilidade de implementações de outros jogos com baralhos diferentes. O BaralhoFactory é responsável pela criação do baralho, quantidade de baralhos e por embaralha-los.
O padrão comportamental Iterator foi usado para percorrer os elementos de qualquer pilha.
Uma das maneiras de melhorar a organização do programa seria com a utilização de Factory Method para a organização dos controllers. Com ele, teríamos o controller principal que seria o padrão para todos os tipos de jogo de cartas e como subgrupo dele teria os específicos para cada jogo, com suas próprias regras.
Apesar de conseguir separar muitos métodos para facilitar a implementação de novas funcionalidades, ainda têm coisas que poderiam ser melhoradas e separadas para se tornar um código melhor e evitar ainda mais repetição do código, como é no caso de alguns métodos em ControllerPaciencia.
Utilizamos o padrão factory para que caso no futuro se decida implementar jogos que utilizem baralhos diferentes, com menos cartas ou utilizando a carta coringa, esse processo de alteração se torne mais facilitado.
Uma melhorias que pode ser feita no futuro é a implantação de exceções para o tratamento de alguns erros do programa.
Pode ser acessado pelo link: https://github.com/dalvesc/JogoDeCartas/blob/main/img/diagramas-uml/DiagramaConceitualUML.png
Pode ser acessado pelo link: https://github.com/dalvesc/JogoDeCartas/blob/main/img/diagramas-uml/DiagramaBaixoNivelUML.png