Giter Club home page Giter Club logo

chess-system-java's People

Contributors

acenelio avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

chess-system-java's Issues

Wrong Position

Boa tarde, grande mestre Nelio.

Venho trabalhando encima desse projeto faz uns dias e tenho muito a agradecer pelos seus ensinamentos e tudo mais, Só uma questão que a posição dos Kings estão errada pois como venho vendo está na casa E e sendo na verdade na casa D.

Implementei e meu castling estava toda hora dando erro e tudo mais ai fui perceber que tenho que fazer o castling inverso para poder conseguir implementar kkkk.

#Ficou assim mais ou menos

 if (getMoveCount() == 0 && !chessMatch.getCheck()) {
            Position posT1 = new Position(position.getRow(), position.getColumn() + 4);
            if (testRookCastling(posT1)) {
                Position p1 = new Position(position.getRow(), position.getColumn() + 1);
                Position p2 = new Position(position.getRow(), position.getColumn() + 2);
                Position p3 = new Position(position.getRow(), position.getColumn() + 3);
                if (getBoard().piecePosition(p1) == null && getBoard().piecePosition(p2) == null && getBoard().piecePosition(p3) == null) {
                    mat[position.getRow()][position.getColumn() + 2] = true;
                }
            }

            Position posT2 = new Position(position.getRow(), position.getColumn() - 3);
            if (testRookCastling(posT2)) {
                Position p1 = new Position(position.getRow(), position.getColumn() - 1);
                Position p2 = new Position(position.getRow(), position.getColumn() - 2);
                if (getBoard().piecePosition(p1) == null && getBoard().piecePosition(p2) == null) {
                    mat[position.getRow()][position.getColumn() - 2] = true;
                }
            }
        }

Muito obrigado pela sua atenção e seus ensinamentos sou um fã do seu trabalho 👏👏👏🚀🚀

Encerramento prematuro da partida sem um xeque-mate válido devido à promoção automática para rainha

A promoção automática da rainha dentro da função 'performChessMove()' pode alterar as variáveis 'check' ou 'checkMate', fazendo com que o programa acuse xeque ou xeque-mate inexistentes quando o jogador promover seu peão para uma peça que não ataque o rei do oponente.

Para reproduzir o bug, basta iniciar a partida sem as peças que não são peões no lado do rei das peças negras e um peão branco na casa H7. No primeiro movimento, promova o peão branco para um bispo ou cavalo. A partida será encerrada com um xeque-mate inexistente.

Captura de tela de 2023-06-15 19-14-04

Solução sugerida: Remover o código 'promoted = replacePromotedPiece("Q");' na função 'performChessMove()' e alterar o código 'return promoted;' na função 'replacePromotedPiece()' para algo como 'throw new IllegalStateException("No valid piece for promotion was provided.");'. Em seguida atualizar os valores das variáveis 'check', 'checkMate' e 'currentPlayer' antes de finalizar a função replacePromotedPiece():

public ChessPiece replacePromotedPiece(String type) {
	if (promoted == null) {
		throw new IllegalStateException("There is no piece to be promoted");
	}
	if (!type.equals("B") && !type.equals("N") && !type.equals("R") & !type.equals("Q")) {
		throw new IllegalStateException("No valid piece for promotion was provided.");
	}

	Position pos = promoted.getChessPosition().toPosition();
	Piece p = board.removePiece(pos);
	piecesOnTheBoard.remove(p);

	ChessPiece newPiece = newPiece(type, promoted.getColor());
	board.placePiece(newPiece, pos);
	piecesOnTheBoard.add(newPiece);

	check = (testCheck(currentPlayer)) ? true : false;

	if (testCheckMate(currentPlayer)) {
		checkMate = true;
		currentPlayer = opponent(currentPlayer);
	}

	return newPiece;
}

Implementation method setupAllPieces

OPa fala ai professor Nelio tudo bem? não sei se ficou bem legal mas criei um metodo mais abreviado de setar as peças para iniciar o jogo de xadrez, não sei se vai gostar mas fiz assim.

public void setupAllPiecesForMatch() {
        for (int i = 1; i <= board.getRows(); i++) {
            for (int c = 0; c < board.getColumns(); c++) {
                char j = (char) (97 + c);
                if (i == 8 && j == 97 || i == 8 && j == 104) placeNewPieceWithChessCoordinates(j, i, new Rook(board, Color.BLACK));
                if (i == 8 && j == 98 || i == 8 && j == 103) placeNewPieceWithChessCoordinates(j, i, new Knight(board, Color.BLACK));
                if (i == 8 && j == 99 || i == 8 && j == 102) placeNewPieceWithChessCoordinates(j, i, new Bishop(board, Color.BLACK));
                if (i == 8 && j == 100) placeNewPieceWithChessCoordinates(j, i, new King(board, Color.BLACK));
                if (i == 8 && j == 101) placeNewPieceWithChessCoordinates(j, i, new Queen(board, Color.BLACK));
                if (i == 7 && j < 105)  placeNewPieceWithChessCoordinates(j, i, new Pawn(board, Color.BLACK));

                if (i == 1 && j == 97 || i == 1 && j == 104) placeNewPieceWithChessCoordinates(j, i, new Rook(board, Color.WHITE));
                if (i == 1 && j == 98 || i == 1 && j == 103) placeNewPieceWithChessCoordinates(j, i, new Knight(board, Color.WHITE));
                if (i == 1 && j == 99 || i == 1 && j == 102) placeNewPieceWithChessCoordinates(j, i, new Bishop(board, Color.WHITE));
                if (i == 1 && j == 101) placeNewPieceWithChessCoordinates(j, i, new King(board, Color.WHITE));
                if (i == 1 && j == 100) placeNewPieceWithChessCoordinates(j, i, new Queen(board, Color.WHITE));
                if (i == 2 && j < 105) placeNewPieceWithChessCoordinates(j, i, new Pawn(board, Color.WHITE));

            }
        }
    } 

Draw

Bom dia, professor, gostaria de saber se o senhor irá implementar o método de empate. Tentei fazer o empate por afogamento, mas ele sempre quebra.

Gostaria de uma ajuda.

Faltando uma condição na regra de Roque

Uma das regras para determinar se o Roque é possível é que a casa que o Rei "pula" ao realizar o roque, isto é, a casa que a torre vai parar, não pode estar sob ataque de peças adversárias. No código atual, essa jogada é permitida, desrespeitando esta regra.

Erro que está dando na implementação dos movimentos da torre.

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 8
at boardgame.Board.piece(Board.java:37)
at boardgame.Board.thereIsAPiece(Board.java:73)
at chess.pieces.Rook.possibleMoves(Rook.java:37)
at boardgame.Piece.isThereAnyPossibleMove(Piece.java:24)
at chess.ChessMatch.validateSourcePosition(ChessMatch.java:48)
at chess.ChessMatch.performChessMove(ChessMatch.java:31)
at application.Program.main(Program.java:30)

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.