Coder Social home page Coder Social logo

devhetor / chess-system-java Goto Github PK

View Code? Open in Web Editor NEW
1.0 1.0 0.0 91 KB

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.

License: MIT License

Java 100.00%

chess-system-java's Introduction

♟️ Chess System Java ♟️

GitHub language count Repository size License

🛠️ Tecnologias

Esse projeto foi desenvolvido com as seguintes tecnologias:

  • ☕ Java

💻 Projeto

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.

Modelo Conceitual

modelo-conceitual fonte: Curso Java COMPLETO 2023 Programação Orientada a Objetos + Projetos

🏁 Criação do tabuleiro no terminal

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.

board

♟️ Movimentos possíveis de uma peça

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:

movimentos-torre 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.

📥 Instalação e execução

⚠️ Para excução do programa é necessário ter o java instalado na versão 17 Dowload

  1. Faça o dowload do arquivo "Chess-system-java.jar". (clique no arquivo e depois clique em "View raw")
  2. Abra um terminal na pasta do arquivo. (utilize o terminal do Git Bash ou a ultima versão do Windows Power Shell)
  3. Digite o codigo java -jar Chess-system-java.jar
  4. Bom Jogo!

execucao

🖼️ Imagens

Tela Inicial Tratamento de Exceção Movimentos Possíveis
tela-inicial tratamento-execao check
Jogada en Passant Promotion
enPassant moviment promotion

📝 Licença

Esse projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.

🙌 Agradecimentos

Quero agradeçer ao professor Nelio Alves por disponibilizar este projeto e explicar de maneira clara e objetiva, todas as partes do projeto.

chess-system-java's People

Contributors

devhetor avatar

Stargazers

Breno Guerra avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.