Skip to content

ChessLogic ‐ Logica do projeto

Raul Augusto edited this page Oct 8, 2024 · 4 revisions

Lógica de Movimentação das peças

Esta classe abstrata define a interface e comportamento básico de um movimento de xadrez, incluindo a execução e verificação se o movimento coloca o jogador em cheque.

  1. A enumeração MoveType representa os tipos de movimentos em um jogo de xadrez.

  2. Membros da Enumeração:

  • Normal: Indica um movimento padrão.
  • EnPassaint: Descreve o movimento de captura especial para peões.
  • CastleKS: Refere-se ao roque pequeno (lado do rei).
  • CastleQS: Refere-se ao roque grande (lado da dama).
  • DoublePawn: Descreve o movimento inicial duplo de um peão.
  • Promotion: Refere-se à promoção de um peão ao chegar à oitava fileira.

Implementa um movimento básico, em que uma peça é movida de uma posição para outra sem regras especiais.

Implementação individual das peças

  1. Visão geral da classe: Explicação sobre o comportamento do peão, que avança apenas para frente e captura na diagonal, além de permitir o movimento de duas casas na sua primeira jogada.

  2. Propriedades e métodos:

  • Type: Define o tipo da peça como Pawn (peão).
  • Color: Define a cor do jogador (branco ou preto) a quem a peça pertence.
  • forward: Define a direção do movimento do peão com base na sua cor.
  • CanMoveTo: Verifica se o peão pode se mover para uma posição, que deve estar dentro dos limites do tabuleiro e ser uma casa vazia.
  • CanCaptureAt: Verifica se o peão pode capturar uma peça adversária em uma posição diagonal.
  • ForwardMoves: Gera os movimentos de avanço, permitindo o avanço de duas casas se o peão ainda não se moveu.
  • DiagonalMoves: Gera movimentos diagonais usados para capturar peças inimigas.
  • GetMoves: Combina movimentos de avanço e captura em uma única lista de movimentos possíveis.
  • CanCaptureOpponentKing: Verifica se o peão pode capturar o rei adversário em algum dos seus movimentos diagonais.
  1. Visão geral da classe: Explicação sobre o bispo, como ele se movimenta no xadrez e o que representa no código.

  2. Propriedades e métodos:

  • Type: Define o tipo da peça como Bishop (bispo).
  • Color: Define a cor do jogador a quem a peça pertence.
  • Copy: Cria uma cópia do bispo, incluindo o estado de movimento (útil para rastrear regras como roque e outras condições).
  • dirs: Define as direções diagonais nas quais o bispo pode se mover.
  • GetMoves: Implementa a lógica que retorna todos os movimentos possíveis que o bispo pode fazer a partir de sua posição atual no tabuleiro.
  1. Visão geral da classe: Explicação sobre o cavalo, sua movimentação e características especiais, como a capacidade de saltar sobre outras peças.

  2. Propriedades e métodos:

  • Type: Define o tipo da peça como Knight (cavalo).
  • Color: Define a cor do jogador (branco ou preto) a quem a peça pertence.
  • PotentialToPositions: Gera as posições potenciais onde o cavalo pode se mover, seguindo o padrão em "L".
  • MovePositions: Filtra as posições potenciais para garantir que estão dentro dos limites do tabuleiro e que o cavalo pode se mover para elas.
  • Copy: Cria uma cópia do cavalo, preservando seu estado.
  • GetMoves: Gera todos os movimentos válidos do cavalo, retornando uma lista de movimentos normais.
  1. Visão geral da classe: Explica o funcionamento da torre, que se move em linha reta, tanto na horizontal quanto na vertical, e pode se mover quantas casas quiser em uma direção.

  2. Propriedades e métodos:

  • Type: Define o tipo da peça como Rook (torre).
  • Color: Define a cor do jogador (branco ou preto) a quem a peça pertence.
  • dirs: Array de direções em que a torre pode se mover: norte, sul, leste e oeste.
  • Copy: Cria uma nova instância da torre, preservando o estado de movimento.
  • GetMoves: Retorna todos os movimentos possíveis da torre a partir de uma posição específica, gerando movimentos válidos em cada uma das direções definidas.
  1. Visão geral da classe: Descreve o funcionamento da rainha, que pode se mover em qualquer direção (horizontal, vertical ou diagonal) e quantas casas quiser.

  2. Propriedades e métodos:

  • Type: Define o tipo da peça como Queen (rainha).
  • Color: Define a cor do jogador (branco ou preto) a quem a peça pertence.
  • dirs: Array de direções em que a rainha pode se mover: norte, sul, leste, oeste e diagonais.
  • Copy: Cria uma nova instância da rainha, preservando o estado de movimento.
  • GetMoves: Retorna todos os movimentos possíveis da rainha a partir de uma posição específica, gerando movimentos válidos em cada uma das direções definidas.
  1. Visão geral da classe: Explicação sobre o rei, seu papel no jogo e as limitações de movimento.

  2. Propriedades e métodos:

  • Type: Define o tipo da peça como King (rei).
  • Color: Define a cor do jogador (branco ou preto) a quem a peça pertence.
  • dirs: Define as direções em que o rei pode se mover, cobrindo todas as direções horizontais, verticais e diagonais.
  • MovePositions: Calcula as posições válidas em que o rei pode se mover, verificando os limites do tabuleiro e a presença de peças adversárias.
  • GetMoves: Gera todos os movimentos possíveis do rei com base nas posições válidas calculadas.
  • CanCaptureOpponentKing: Verifica se o rei pode capturar o rei adversário, essencial para as verificações de xeque.
  1. Roque: Há um método comentado que mostra como o roque pelo lado da rainha seria implementado. Esse método está parcialmente implementado e poderia ser ativado ou expandido.

Implementação do Tabuleiro

  1. Visão geral da classe: A classe Board representa o tabuleiro de xadrez e suas operações, como o gerenciamento das peças e suas posições.

  2. Indexadores:

    Permitem acessar ou definir uma peça no tabuleiro usando coordenadas de linha e coluna ou uma instância da classe Position.

  3. Métodos:

  • Initial(): Configura o tabuleiro com a posição inicial das peças.
  • AddStartPieces(): Método privado que posiciona as peças no tabuleiro conforme as regras de xadrez.
  • isInside(): Verifica se uma posição está dentro dos limites do tabuleiro.
  • isEmpty(): Verifica se uma posição está vazia.
  • PiecePositions(): Retorna todas as posições que contêm peças no tabuleiro.
  • PiecePositionsFor(): Retorna todas as posições que contêm peças de um jogador específico.
  • IsInCheck(): Verifica se o jogador está em xeque.
  • Copy(): Cria uma cópia profunda do tabuleiro.