O foco será aplicar conceitos fundamentais da orientação a objetos, garantindo a correta modelagem das peças, tabuleiro e regras básicas do jogo.
Considere que:
- O trabalho pode ser desenvolvido sozinho ou em dupla
- A avaliação será feita através do código e da apresentação do trabalho (acariação)
Atenção! Não é necessário implementar um jogo completo (interface/terminal iterativo), apenas as funcionalidades básicas para movimentação das peças e captura.
-
(1,0) Tabuleiro
- O tabuleiro deve ser representado por uma matriz (8x8), onde cada célula pode conter uma peça ou estar vazia.
- Deve ser possível inicializar o tabuleiro com todas as peças em suas posições padrão.
-
(2,0) Peças
- Cada peça deve ser representada como uma classe. Exemplo:
Rei,Rainha,Bispo,Cavalo,TorreePeão. - Todas as peças devem herdar de uma classe base
Pecaque define propriedades e comportamentos comuns, como:- Cor: Preto ou branco.
- Posição atual.
- Movimento válido (definido individualmente para cada tipo de peça, através de polimorfismo).
- Cada peça deve ser representada como uma classe. Exemplo:
-
(1,0) Jogadores
- Cada jogador controla um conjunto de peças (brancas ou pretas).
- Deve ser possível alternar entre os jogadores durante o turno.
-
(3,0) Movimentação
- Implementar regras básicas de movimentação para cada peça (ex.: a Torre se move em linha reta, o Bispo se move na diagonal, etc.).
- Validar movimentos antes de realizá-los:
- O movimento não pode sair do tabuleiro.
- O movimento não pode capturar uma peça da mesma cor.
- O movimento deve respeitar as regras da peça.
-
(3,0) Partida
- Implementar uma classe
Partidapara gerenciar o jogo. - Incluir funcionalidades como:
- (0,5) Início do jogo: Inicializar o tabuleiro e as peças.
- (1,0) Execução de turnos: Alternar jogadores e permitir movimentações.
- (1,0) Verificação de xeque e xeque-mate.
- (0,5) Encerramento da partida.
- Implementar uma classe
- Estrutura mínima sugerida:
class Tabuleiro { private Peca[][] tabuleiro; // Métodos para inicializar e gerenciar o tabuleiro } abstract class Peca { protected String cor; protected Posicao posicao; protected String nome; public abstract boolean movimentoValido(Posicao destino, Tabuleiro tabuleiro); } class Rei extends Peca { @Override public boolean movimentoValido(Posicao destino, Tabuleiro tabuleiro) { // Implementação específica para o Rei } } class Partida { private Jogador jogador1; private Jogador jogador2; private Tabuleiro tabuleiro; public void iniciarJogo() { // Inicializar jogadores e tabuleiro } }
- O trabalho deve ser entregue com:
- Código-fonte completo e funcional.
- Testes (arquivo MainTestes) cobrindo cenários básicos, como movimentação válida e inválida de peças.
MainTestes() { main() { // inicia tabuleiro // força uma movimentação // Teste de movimentação válida // Teste de movimentação inválida
// cria uma condição no tabuleiro de captura de peça
// Teste de captura de peça
// Teste de xeque
// Teste de xeque-mate
} }
- Aplicação correta dos conceitos de POO.
- Organização e clareza do código.
- Validação das regras do jogo.
- Documentação/comentários e JAVADOC do projeto.