Esempio n. 1
0
 public void ValidarPosicaoDestino(Posicao origem, Posicao destino)
 {
     if (!TabuleiroPartida.PecaPosition(origem).MovimentoPossivel(destino))
     {
         throw new TabuleiroException("Posição de destino inválida!");
     }
 }
Esempio n. 2
0
        public Peca ExecutarMovimento(Posicao origem, Posicao destino)
        {
            Peca peca = TabuleiroPartida.RetirarPeca(origem);

            peca.IncrementarMovimento();
            Peca PecaCapturada = TabuleiroPartida.RetirarPeca(destino);

            TabuleiroPartida.ColocarPeca(peca, destino);

            if (PecaCapturada != null)
            {
                _capturadas.Add(PecaCapturada);
            }

            // #MovimentoEspecial Roque maior
            if (peca is Rei && destino.Coluna == origem.Coluna - 2)
            {
                Posicao origemTorre  = new Posicao(origem.Linha, origem.Coluna - 4);
                Posicao destinoTorre = new Posicao(origem.Linha, origem.Coluna - 1);

                Peca torre = TabuleiroPartida.RetirarPeca(origemTorre);
                torre.IncrementarMovimento();
                TabuleiroPartida.ColocarPeca(torre, destinoTorre);
            }

            // #MovimentoEspecial Roque menor
            if (peca is Rei && destino.Coluna == origem.Coluna + 2)
            {
                Posicao origemTorre  = new Posicao(origem.Linha, origem.Coluna + 3);
                Posicao destinoTorre = new Posicao(origem.Linha, origem.Coluna + 1);

                Peca torre = TabuleiroPartida.RetirarPeca(origemTorre);
                torre.IncrementarMovimento();
                TabuleiroPartida.ColocarPeca(torre, destinoTorre);
            }

            // #MovimentoEspecial En Passant
            if (peca is Peao)
            {
                if (origem.Coluna != destino.Coluna && PecaCapturada == null)
                {
                    Posicao posicaoPeao;

                    posicaoPeao = (peca.Cor == Cor.Branca)
                        ? new Posicao(destino.Linha + 1, destino.Coluna)
                        : new Posicao(destino.Linha - 1, destino.Coluna);

                    PecaCapturada = TabuleiroPartida.RetirarPeca(posicaoPeao);
                    _capturadas.Add(PecaCapturada);
                }
            }

            return(PecaCapturada);
        }
Esempio n. 3
0
        public void DesfazerMovimento(Posicao origem, Posicao destino, Peca pecaCapturada)
        {
            Peca peca = TabuleiroPartida.RetirarPeca(destino);

            peca.DecrementarMovimento();

            if (pecaCapturada != null)
            {
                TabuleiroPartida.ColocarPeca(pecaCapturada, destino);
                _capturadas.Remove(pecaCapturada);
            }

            // #MovimentoEspecial Roque maior (revertendo)
            if (peca is Rei && destino.Coluna == origem.Coluna - 2)
            {
                Posicao origemTorre  = new Posicao(origem.Linha, origem.Coluna - 4);
                Posicao destinoTorre = new Posicao(origem.Linha, origem.Coluna - 1);

                Peca torre = TabuleiroPartida.RetirarPeca(destinoTorre);
                torre.DecrementarMovimento();
                TabuleiroPartida.ColocarPeca(torre, origemTorre);
            }

            // #MovimentoEspecial Roque menor (revertendo)
            if (peca is Rei && destino.Coluna == origem.Coluna + 2)
            {
                Posicao origemTorre  = new Posicao(origem.Linha, origem.Coluna + 3);
                Posicao destinoTorre = new Posicao(origem.Linha, origem.Coluna + 1);

                Peca torre = TabuleiroPartida.RetirarPeca(destinoTorre);
                torre.DecrementarMovimento();
                TabuleiroPartida.ColocarPeca(torre, origemTorre);
            }

            // #MovimentoEspecial En Passant (revertendo)
            if (peca is Peao)
            {
                if (origem.Coluna != destino.Coluna && pecaCapturada == VulneravelEnPassant)
                {
                    Peca peao = TabuleiroPartida.RetirarPeca(destino);

                    Posicao posicaoPeao = (peca.Cor == Cor.Branca)
                        ? new Posicao(3, destino.Coluna) : new Posicao(4, destino.Coluna);

                    TabuleiroPartida.ColocarPeca(peao, posicaoPeao);
                }
            }

            TabuleiroPartida.ColocarPeca(peca, origem);
        }
Esempio n. 4
0
        public void ValidarPosicaoOrigem(Posicao posicao)
        {
            if (TabuleiroPartida.PecaPosition(posicao) == null)
            {
                throw new TabuleiroException("Não existe peça na posição de origem escolhida!");
            }

            if (JogadorAtual != TabuleiroPartida.PecaPosition(posicao).Cor)
            {
                throw new TabuleiroException("A peça escolhida não é sua!");
            }

            if (!TabuleiroPartida.PecaPosition(posicao).ExisteMovimentosPossiveis())
            {
                throw new TabuleiroException("Não há movimentos possiveis para a peça escolhidas!");
            }
        }
Esempio n. 5
0
        public void RealizarJogada(Posicao origem, Posicao destino)
        {
            Peca pecaCapturada = ExecutarMovimento(origem, destino);
            Peca pecaPeao      = TabuleiroPartida.PecaPosition(destino);

            if (EstaEmXeque(JogadorAtual))
            {
                DesfazerMovimento(origem, destino, pecaCapturada);
                throw new TabuleiroException("Você não pode se colocar em xeque!");
            }

            //#MovimentoEspecial Promover Peao
            if (pecaPeao is Peao)
            {
                if ((pecaPeao.Cor == Cor.Branca && destino.Linha == 0) ||
                    pecaPeao.Cor == Cor.Preta && destino.Linha == 7)
                {
                    pecaPeao = TabuleiroPartida.RetirarPeca(destino);
                    _pecas.Remove(pecaPeao);
                    Peca dama = new Dama(TabuleiroPartida, pecaPeao.Cor);
                    TabuleiroPartida.ColocarPeca(dama, destino);
                }
            }

            JogadorEmXeque = (EstaEmXeque(CorAdversaria(JogadorAtual)))
                ? true : false;

            if (TesteXequemate(CorAdversaria(JogadorAtual)))
            {
                Terminada = true;
            }
            else
            {
                Turno++;
                MudarCorJogador();
            }

            // #MovimentoEspecial En Passant
            VulneravelEnPassant = (pecaPeao is Peao &&
                                   (destino.Linha == origem.Linha - 2 || destino.Linha == origem.Linha + 2))
                ? pecaPeao : null;
        }
Esempio n. 6
0
 public void ColocarNovaPeca(char coluna, int linha, Peca peca)
 {
     TabuleiroPartida.ColocarPeca(peca, new PosicaoXadrez(coluna, linha).ToPosition());
     _pecas.Add(peca);
 }