Estou tentando ter uma ideia de como projetar e pensar de maneira orientada a objetos e gostaria de obter algum feedback da comunidade sobre este tópico. A seguir está um exemplo de um jogo de xadrez que desejo projetar de maneira OO. Este é um design muito amplo e meu foco neste estágio é apenas identificar quem é responsável por quais mensagens e como os objetos interagem entre si para simular o jogo. Indique se há elementos de design ruim (alto acoplamento, má coesão, etc.) e como melhorá-los.
O jogo de xadrez tem as seguintes classes
- Borda
- Jogador
- Peça
- Quadrado
- Jogo de xadrez
O tabuleiro é composto de quadrados e, portanto, o tabuleiro pode ser responsabilizado por criar e gerenciar objetos quadrados. Cada peça também está em um quadrado, então cada peça também tem uma referência ao quadrado em que está. (Isso faz sentido?). Cada peça então é responsável por se mover de uma casa para outra. A classe do jogador contém referências a todas as peças que possui e também é responsável por sua criação (o jogador deve criar peças?). Player tem um método takeTurn que, por sua vez, chama um método movePiece que pertence à classe da peça que muda a localização da peça de sua localização atual para outra localização. Agora estou confuso sobre o que exatamente a classe Board deve ser responsável. Presumi que fosse necessário determinar o estado atual do jogo e saber quando o jogo acabou. Mas quando uma peça muda ' s localização como o conselho deve ser atualizado? deve manter uma matriz separada de quadrados em que existem peças e que recebe atualizações conforme as peças se movem?
Além disso, ChessGame cria inicialmente o tabuleiro e os objetos do jogador que, por sua vez, criam quadrados e peças, respectivamente, e iniciam a simulação. Resumidamente, pode ser assim que o código no ChessGame se parece
Player p1 =new Player();
Player p2 = new Player();
Board b = new Board();
while(b.isGameOver())
{
p1.takeTurn(); // calls movePiece on the Piece object
p2.takeTurn();
}
Não estou certo de como o estado do conselho será atualizado. A peça deve ter uma referência ao tabuleiro? Onde deveria estar a responsabilidade? Quem detém quais referências? Por favor me ajude com suas entradas e aponte problemas neste projeto. Eu deliberadamente não estou focando em nenhum algoritmo ou detalhes adicionais do jogo, pois estou interessado apenas no aspecto do design. Espero que esta comunidade possa fornecer informações valiosas.
takeTurn()
se o movimento de p1 terminar o jogo. Comentário menos minucioso: Acho mais natural chamar os jogadoreswhite
eblack
.