Esse projeto foi desenvolvido com as seguintes tecnologias:
- ☕ Java
Desenvolvido em linguagem Java, este projeto faz parte do curso Java COMPLETO 2020 Programação Orientada a Objetos + Projetos da Udemy. Consiste em um jogo simples de Xadrez, que executa através do terminal. O jogo possui programação defensiva(contra eventuais bugs), tratamentos de erros, jogas especias de xadrez (promoção, roque e en passant) e previsão de movimento das peças.
Peças: Pawn (Peão), Rook (Torre), Knight (Cavalo), Bishop (Bispo), Queen (Rainha) e King (Rei). |
---|
A mecânica do jogo é baseada em linhas (1, 2, 3, 4, 5, 6, 7, 8) e colunas (a, b, c, d, e, f, g, h), parecido com o jogo batalha naval.
- Para escolher uma peça é necessário selecionar primeiramente a coluna e logo em seguida (sem espaços) selecionar a linha, exemplo: c2
- As peças pretas são representadas pela cor amarela, já que o fundo do terminal é preto.
- Em Captured pieces o jogo armazena as peças capturadas.
- O Turn exibe o turno (rodada) em que o jogo está.
- Waiting player exibe qual é o jogador a jogar a próxima peça.
- Source é a origem, ou seja, a peça no qual o jogador irá jogar.
- Target é o destino, ou seja, o local no qual o jogador irá mover a peça.
- O jogo possui sistema de Check e CheckMate
- O jogo possui jogadas especiais do xadrez como: en passant, promotion e Roque.
fonte: Curso Java COMPLETO 2023 Programação Orientada a Objetos + Projetos
Para a criação do tabuleiro, foi utilizado o conceito de uma matriz 8 x 8. Utilizamos uma função que imprime o tabuleiro de xadrez, incluindo as jogadas possíveis para cada peça. A função recebe como entrada duas matrizes: uma matriz de peças de xadrez (ChessPiece[][]) e uma matriz de valores booleanos (boolean[][]) que indicam se as jogadas são possíveis ou não para cada posição do tabuleiro.
public static void printBoard(ChessPiece[][] pieces, boolean[][] possibleMoves) {
for (int i = 0; i < pieces.length; i++) {
System.out.print((8 - i) + " ");
for (int j = 0; j < pieces.length; j++) {
printPiece(pieces[i][j], possibleMoves[i][j]);
}
System.out.println();
}
System.out.println(" a b c d e f g h");
}
A função começa com um loop externo que percorre as linhas do tabuleiro. Antes de cada linha, é impresso o número da linha (8 - i), para que o tabuleiro seja impresso com a coluna a8 no canto inferior esquerdo e a coluna h1 no canto superior direito, como é comum em tabuleiros de xadrez.
Em seguida, há um loop interno que percorre as colunas do tabuleiro. Para cada posição do tabuleiro, é chamada a função printPiece, que imprime a peça de xadrez na posição (se houver) e se a jogada é possível (possibleMoves[i][j]).
Por fim, é impresso a legenda das colunas, "a b c d e f g h".
Essa função imprime o tabuleiro de xadrez com as jogadas possíveis para cada peça, facilitando a visualização e compreensão da situação da partida.
Como cada peça tem maneira diferentes de se mover, deixamos esta função para a própria peça. Para uma torre por exemplo, temos as seguintes opções:
fonte: Curso Java COMPLETO 2023 Programação Orientada a Objetos + Projetos
A torre pode se mover apenas nas casas que estão com o "X"(para os lados enquanto houver casas livres ou capturar a peça adversária), ela não pode se mover para as casas que não estão com o "X" vermelho. Seguindo esssa lógica, podemos fazer a seguinte pergunta: Quais são os movimentos possiveis de uma peça? Utilizamos uma fução que retorna uma matriz de valores booleanos com os movimentos possíveis para essa peça.
public abstract boolean[][] possibleMoves();
public boolean possibleMove(Position position) {
return possibleMoves()[position.getRow()][position.getColumn()];
}
public boolean isThereAnyPossibleMove() {
boolean[][] mat = possibleMoves();
for (int i = 0; i < mat.length; i++) {
for (int j = 0; j < mat.length; j++) {
if (mat[i][j]) {
return true;
}
}
}
return false;
}
A função começa chamando a função possibleMoves, que retorna uma matriz de valores booleanos indicando se a jogada é possível ou não para cada posição do tabuleiro. Essa matriz é armazenada na variável mat.
Em seguida, há dois loops que percorrem todas as posições da matriz mat. Se for encontrado algum valor true na matriz, significa que existe pelo menos uma jogada possível, então a função retorna true. Se todas as posições da matriz forem false, significa que não há jogadas possíveis, então a função retorna false.
- Faça o dowload do arquivo "Chess-system-java.jar". (clique no arquivo e depois clique em "View raw")
- Abra um terminal na pasta do arquivo. (utilize o terminal do Git Bash ou a ultima versão do Windows Power Shell)
- Digite o codigo
java -jar Chess-system-java.jar
- Bom Jogo!
Tela Inicial | Tratamento de Exceção | Movimentos Possíveis |
---|---|---|
Jogada en Passant | Promotion |
---|---|
Esse projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Quero agradeçer ao professor Nelio Alves por disponibilizar este projeto e explicar de maneira clara e objetiva, todas as partes do projeto.