Skip to content

Apresento a vocês um jogo Xadrez desenvolvido utilizando a linguagem de programação C#. Nele foi criado um tabuleiro no terminal esperando inputs dos usuários para realizar jogas de Xadrez, até o fim da partida.

Notifications You must be signed in to change notification settings

Foqsz/xadrez-de-console

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Xadrez de Console

image

Índice

  1. Sobre o projeto
  2. Sobre o tabuleiro
  3. Impressão do tabuleiro no console
  4. A exceção tabuleiroException
  5. Sobre as peças
  6. Peças presentes no tabuleiro
  7. Método para colocar as peças no tabuleiro
  8. Como foi criada a restrição de movimento para cada peça
  9. Validar posição de origem
  10. Validar posição de destino
  11. Jogadas especiais
  12. Contato

Sobre o projeto

Este projeto foi feito durante o curso de C# ministrado por Nélio Alves. O objetivo central é empregar os conhecimentos adquiridos na linguagem C# para desenvolver um jogo de Xadrez funcional que possa ser executado via console. Embora possa parecer uma tarefa simples à primeira vista, a complexidade subjacente a este projeto é significativa.

Sobre o tabuleiro

Impressão do tabuleiro no console

A impressão do tabuleiro foi uma parte simples, porém essencial, do projeto. Utilizou-se um loop for para criar uma representação visual do tabuleiro no console, composta por um padrão de "-" com espaços entre eles, formando um tabuleiro de oito por oito casas, totalizando sessenta e quatro espaços, conforme o tamanho padrão de um tabuleiro de Xadrez.

        public static void imprimirTabuleiro(Tabuleiro tab, bool[,] posicoesPossiveis)
        {

            ConsoleColor fundoOriginal = Console.BackgroundColor;
            ConsoleColor fundoAlterado = ConsoleColor.DarkGray;

            for (int i = 0; i < tab.linhas; i++)
            {
                Console.Write(8 - i + " ");
                for (int j = 0; j < tab.colunas; j++)
                {
                    if (posicoesPossiveis[i, j])
                    {
                        Console.BackgroundColor = fundoAlterado;
                    }
                    else
                    {
                        Console.BackgroundColor = fundoOriginal;
                    }
                    imprimirPeca(tab.peca(i, j));
                    Console.BackgroundColor = fundoOriginal;
                }
                Console.WriteLine();
            }
            Console.WriteLine("  a b c d e f g h");
            Console.BackgroundColor = fundoOriginal;
        }

Com o resultado final:

image


A exceção TabuleiroException

Durante o desenvolvimento do jogo, foi essencial criar uma exceção específica para lidar com situações em que uma casa inválida é selecionada pelo jogador. Essa exceção é chamada TabuleiroException.

Exemplos de uso:

  • Quando não existe uma peça na posição de origem selecionada:
throw new TabuleiroException("Não existe peça na posição de origem escolhida!");
  • Quando a peça selecionada não pertence ao jogador atual:
throw new TabuleiroException("A peça de origem escolhida não é sua!");      
  • Quando não há movimentos possíveis para a peça selecionada:
throw new TabuleiroException("Atencao: Não há movimentos possíveis para a peça de origem escolhida!");     
  • Quando a posição de destino escolhida é inválida:
throw new TabuleiroException("Posição de destino inválida!");

Essa exceção é fundamental para manter a integridade e a lógica do jogo, garantindo que o jogador receba feedback adequado caso tente realizar movimentos inválidos.

Sobre as peças

No tabuleiro de Xadrez, existem diferentes tipos de peças, cada uma com suas próprias características e movimentos específicos. Abaixo estão as peças presentes no jogo, indicando a quantidade de peças de cada tipo e como são representadas:

  • Rei: Uma única peça de cada cor (branca e preta), representada pela letra R.
  • Dama: Uma única peça de cada cor (branca e preta), representada pela letra D.
  • Bispo: Duas peças de cada cor (branca e preta), representadas pela letra B.
  • Cavalo: Uma única peça de cada cor (branca e preta), representada pela letra C.
  • Torre: Uma única peça de cada cor (branca e preta), representada pela letra T.
  • Peão: Oito peças de cada cor (branca e preta), representadas pela letra P.

Essas peças compõem o conjunto básico do Xadrez e cada uma desempenha um papel fundamental na estratégia e na dinâmica do jogo.

Imagem do tabuleiro com as peças:

image

Método para colocar as peças no tabuleiro

Durante o desenvolvimento do jogo de Xadrez em C#, foi implementado um método para colocar novas peças em posições específicas do tabuleiro. Esse método é essencial para configurar o tabuleiro com as peças necessárias para iniciar uma partida.

Aqui está o método colocarNovaPeca:

public void colocarNovaPeca(char coluna, int linha, Peca peca)
{
    tab.colocarPeca(peca, new PosicaoXadrez(coluna, linha).toPosicao());
    pecas.Add(peca);
}

Este método recebe três parâmetros:

  • coluna: A coluna onde a peça será colocada, representada por um caractere.
  • linha: A linha onde a peça será colocada, representada por um número.
  • peca: A peça que será colocada no tabuleiro.

Internamente, o método converte a posição da peça (coluna e linha) em uma posição de matriz utilizando a classe PosicaoXadrez e, em seguida, utiliza o método colocarPeca do tabuleiro para colocar a peça na posição desejada. Além disso, a peça é adicionada à lista de peças (pecas) para acompanhamento e controle durante a partida.

Esse método é crucial para configurar o tabuleiro com as peças necessárias para iniciar o jogo de Xadrez, permitindo que as partidas sejam inicializadas com qualquer disposição desejada das peças.

Funcionamento:

  1. Converte a posição informada (coluna e linha) em uma posição válida do tabuleiro, utilizando a classe PosicaoXadrez e seu método toPosicao().
  2. Coloca a peça na posição calculada no passo anterior, utilizando o método colocarPeca do objeto tabuleiro.
  3. Adiciona a peça à lista de peças (pecas).

Este método é essencial para configurar o tabuleiro com as peças corretas antes do início de uma partida de Xadrez.

Como foi criada a restrição de movimento para cada peça

Durante o desenvolvimento do jogo de Xadrez em C#, foram criados métodos específicos na classe PartidaXadrez para validar as posições de origem e destino das peças, aplicando as restrições de movimento adequadas para cada tipo de peça.

Método validarPosicaoDeOrigem

Este método é responsável por verificar se a posição de origem selecionada pelo jogador é válida para movimentar uma peça. Ele realiza as seguintes verificações:

  1. Posição nula: Verifica se não há uma peça na posição de origem escolhida.
if (tab.peca(pos) == null)
{
    throw new TabuleiroException("Não existe peça na posição de origem escolhida!");
}
  1. Cor da peça: Verifica se a peça selecionada pertence ao jogador atual, garantindo que o jogador só possa mover suas próprias peças.
if (jogadorAtual != tab.peca(pos).cor)
{
    throw new TabuleiroException("A peça na posição de origem escolhida não é sua!");
}
  1. Movimentos possíveis: Verifica se a peça selecionada possui movimentos possíveis. Se não houver movimentos disponíveis para a peça selecionada, uma exceção é lançada.
if (!tab.peca(pos).existeMovimentosPossiveis())
{
    throw new TabuleiroException("Atencao: Não há movimentos possíveis para a peça de origem escolhida!");
}

Método validarPosicaoDeDestino

Este método é responsável por validar se a posição de destino escolhida pelo jogador é válida para mover a peça selecionada. Ele realiza a seguinte verificação:

  1. Movimento válido: Verifica se a peça selecionada pode se mover para a posição de destino especificada. Se a peça não puder se mover para a posição de destino, uma exceção é lançada.
if (!tab.peca(origem).movimentoPossivel(destino))
{
  throw new TabuleiroException("Posição de destino inválida!");
}

Esses métodos garantem que as peças só possam ser movidas de acordo com as regras do jogo de Xadrez, mantendo a integridade e a lógica do jogo durante as partidas.

Jogadas especiais

Neste tópico, serão detalhadas as jogadas especiais implementadas no jogo de Xadrez em C#.

  1. Roque Pequeno: O roque pequeno ocorre quando o rei e uma torre ainda não se moveram na partida, e entre eles existem duas casas vazias. O código para esta jogada especial é o seguinte:

            // #jogadaespecial roque pequeno
            if (p is Rei && destino.coluna == origem.coluna + 2)
            {
                Posicao origemT = new Posicao(origem.linha, origem.coluna + 3);
                Posicao destinoT = new Posicao(origem.linha, origem.coluna + 1);
                Peca T = tab.retirarPeca(origemT);
                T.incrementarQteMovimentos();
                tab.colocarPeca(T, destinoT);
            }
  2. Roque Grande: O roque grande ocorre quando o rei e uma torre ainda não se moveram na partida, e entre eles existem quatro casas vazias. O código para esta jogada especial é o seguinte:

            // #jogadaespecial roque grande
            if (p is Rei && destino.coluna == origem.coluna - 2)
            {
                Posicao origemT = new Posicao(origem.linha, origem.coluna - 4);
                Posicao destinoT = new Posicao(origem.linha, origem.coluna - 1);
                Peca T = tab.retirarPeca(origemT);
                T.incrementarQteMovimentos();
                tab.colocarPeca(T, destinoT);
            }
  3. En Passant: O En Passant ocorre quando um peão adversário avança duas casas em seu primeiro movimento para evitar um confronto com um peão avançado. Um peão pode realizar a captura do peão adversário da mesma forma. O código para esta jogada especial é o seguinte:

            //#jogadaespecial en passant
    
            if (p is Peao)
            {
                if (origem.coluna != destino.coluna && pecaCapturada == null)
                {
                    Posicao posP;
                    if (p.cor == Cor.Branca)
                    {
                        posP = new Posicao(destino.linha + 1, destino.coluna);
                    }
                    else
                    {
                        posP = new Posicao(destino.linha - 1, destino.coluna);
                    }
                    pecaCapturada = tab.retirarPeca(posP);
                    capturadas.Add(pecaCapturada);
                }
            } 
  4. Promoção: A jogada de promoção ocorre quando um peão alcança a última fileira do tabuleiro adversário. Neste caso, virará uma Dama.

            // #jogadaespecial promocao
            if (p is Peao)
            {
                if ((p.cor == Cor.Branca && destino.linha == 0) || (p.cor == Cor.Preta && destino.linha == 7))
                {
                    p = tab.retirarPeca(destino);
                    pecas.Remove(p);
                    Peca dama = new Dama(tab, p.cor);
                    tab.colocarPeca(dama, destino);
                    pecas.Add(dama);
                }
            }

Contato:

About

Apresento a vocês um jogo Xadrez desenvolvido utilizando a linguagem de programação C#. Nele foi criado um tabuleiro no terminal esperando inputs dos usuários para realizar jogas de Xadrez, até o fim da partida.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages