public void ExecutaMovimento(Posicao origem, Posicao destino)
        {
            Peca p = Tabuleiro.RetirarPeca(origem);

            p.IncrementarQtdeMovimentos();
            Peca pecaCapturada = Tabuleiro.RetirarPeca(destino);

            Tabuleiro.ColocarPeca(p, destino);
        }
Example #2
0
        public void RealizaJogada(Posicao origem, Posicao destino)
        {
            Peca pecaCapturada = ExecutaMovimento(origem, destino);

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

            Peca p = Tabuleiro.PegaPeca(destino);

            // #jogadaespecial promocao
            if (p is Peao)
            {
                if ((p.Cor == Cor.Branca && destino.Linha == 0) || (p.Cor == Cor.Preta && destino.Linha == 7))
                {
                    p = Tabuleiro.RetirarPeca(destino);
                    _pecas.Remove(p);
                    Peca promo = EscolhePromo(Tabuleiro, p.Cor);
                    if (promo != null)
                    {
                        Tabuleiro.ColocarPeca(promo, destino);
                        _pecas.Add(promo);
                    }
                }
            }

            if (EstaEmCheck(Adversaria(JogadorAtual)))
            {
                Check = true;
            }
            else
            {
                Check = false;
            }
            if (TesteCheckMate(Adversaria(JogadorAtual)))
            {
                Terminada = true;
            }
            else
            {
                Turno++;
                MudaJogador();
            }

            // #jogadaespecial En Passant
            if (p is Peao && (destino.Linha == origem.Linha - 2 || destino.Linha == origem.Linha + 2))
            {
                VulneravelEnPassant = p;
            }
            else
            {
                VulneravelEnPassant = null;
            }
        }
Example #3
0
        private Peca ExecutaMovimento(Posicao origem, Posicao destino)
        {
            Peca p = Tabuleiro.RetirarPeca(origem);

            p.IncrementarQtdMovimentos();
            Peca pecaCapturada = Tabuleiro.RetirarPeca(destino);

            Tabuleiro.ColocarPeca(p, destino);
            if (pecaCapturada != null)
            {
                _capturadas.Add(pecaCapturada);
            }

            //#JogadaEspecial Roque Pequeno
            if ((p is Rei) && ((origem.Coluna + 2) == destino.Coluna))
            {
                Posicao origemTorre  = new Posicao(origem.Linha, origem.Coluna + 3);
                Posicao destinoTorre = new Posicao(origem.Linha, origem.Coluna + 1);
                Peca    torre        = Tabuleiro.RetirarPeca(origemTorre);
                torre.IncrementarQtdMovimentos();
                Tabuleiro.ColocarPeca(torre, destinoTorre);
            }

            //#JogadaEspecial Roque Grande
            if ((p is Rei) && ((origem.Coluna - 2) == destino.Coluna))
            {
                Posicao origemTorre  = new Posicao(origem.Linha, origem.Coluna - 4);
                Posicao destinoTorre = new Posicao(origem.Linha, origem.Coluna - 1);
                Peca    torre        = Tabuleiro.RetirarPeca(origemTorre);
                torre.IncrementarQtdMovimentos();
                Tabuleiro.ColocarPeca(torre, destinoTorre);
            }

            //Jogada Especial En Passant
            if (p is Peao)
            {
                if ((origem.Coluna != destino.Coluna) && (pecaCapturada == null))
                {
                    Posicao posicaoPeao;
                    if (p.Cor == Cor.Branca)
                    {
                        posicaoPeao = new Posicao(destino.Linha + 1, destino.Coluna);
                    }
                    else
                    {
                        posicaoPeao = new Posicao(destino.Linha - 1, destino.Coluna);
                    }

                    pecaCapturada = Tabuleiro.RetirarPeca(posicaoPeao);
                    _capturadas.Add(pecaCapturada);
                }
            }

            return(pecaCapturada);
        }
Example #4
0
        public void RealizaJogada(Posicao origem, Posicao destino)
        {
            Peca pecaCapiturada = ExecutarMovimento(origem, destino);

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

            Peca p = Tabuleiro.Peca(destino);

            // #jogadaEspecial Promocao
            if (p is Peao)
            {
                if ((p.Cor == Cor.Branca && destino.Linha == 0) || (p.Cor == Cor.Preta && destino.Linha == 7))
                {
                    p = Tabuleiro.RetirarPeca(destino);
                    Pecas.Remove(p);
                    Peca dama = new Dama(Tabuleiro, p.Cor);
                    Tabuleiro.ColocarPeca(dama, destino);
                    Pecas.Add(dama);
                }
            }

            if (EstaEmXeque(Adversaria(JogadorAtual)))
            {
                Xeque = true;
            }
            else
            {
                Xeque = false;
            }

            if (TesteXequeMate(Adversaria(JogadorAtual)))
            {
                Teminada = true;
            }
            else
            {
                Turno++;
                MudarJogador();
            }

            // #JogadaEspecial En Passant
            if (p is Peao && (destino.Linha == origem.Linha - 2 || destino.Linha == origem.Linha + 2))
            {
                VulneravelEnPassant = p;
            }
            else
            {
                VulneravelEnPassant = null;
            }
        }
Example #5
0
        public void RealizaJogada(Posicao origem, Posicao destino)
        {
            Peca pecaCapturada = ExecutaMovimento(origem, destino);

            if (ValidaPosicaoXeque(CorPecaJogador))
            {
                DesfazerMovimento(origem, destino, pecaCapturada);
                throw new TabuleiroException("Não é possível colocar-se em posição de xeque!");
            }

            Peca pecaMovida = Tabuleiro.Peca(destino);

            // promocao
            if (pecaMovida is Peao)
            {
                if ((pecaMovida.Cor == Cor.Branca && destino.Linha == 0) || (pecaMovida.Cor == Cor.Preta && destino.Linha == 7))
                {
                    pecaMovida = Tabuleiro.RetirarPeca(destino);
                    PecasJogo.Remove(pecaMovida);
                    Peca dama = new Dama(Tabuleiro, pecaMovida.Cor);
                    Tabuleiro.ColocarPeca(dama, destino);
                    PecasJogo.Add(dama);
                }
            }

            if (ValidaPosicaoXeque(IdentificarCorAdversaria(CorPecaJogador)))
            {
                Xeque = true;
            }
            else
            {
                Xeque = false;
            }

            if (ValidaXequeMate(IdentificarCorAdversaria(CorPecaJogador)))
            {
                Terminada = true;
            }
            else
            {
                Turno++;
                MudaCorPeca();
            }

            // en passant
            if (pecaMovida is Peao && (destino.Linha == origem.Linha - 2 || destino.Linha == origem.Linha + 2))
            {
                PecaEnPassant = pecaMovida;
            }
            else
            {
                PecaEnPassant = null;
            }
        }
Example #6
0
        public Peca ExecutaMovimento(Posicao origem, Posicao destino)
        {
            Peca p = Tabuleiro.RetirarPeca(origem);

            p.IncrementaQtMovimentos();
            Peca pecaCapturada = Tabuleiro.RetirarPeca(destino);

            Tabuleiro.ColocarPeca(p, destino);
            if (pecaCapturada != null)
            {
                _capturadas.Add(pecaCapturada);
            }

            // #jogadaespecial roque pequeno
            if (p 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    t            = Tabuleiro.RetirarPeca(origemTorre);
                t.IncrementaQtMovimentos();
                Tabuleiro.ColocarPeca(t, destinoTorre);
            }

            // #jogadaespecial roque grande
            if (p 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    t            = Tabuleiro.RetirarPeca(origemTorre);
                t.IncrementaQtMovimentos();
                Tabuleiro.ColocarPeca(t, destinoTorre);
            }

            // #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 = Tabuleiro.RetirarPeca(posP);
                    _capturadas.Add(pecaCapturada);
                }
            }

            return(pecaCapturada);
        }
Example #7
0
        private Peca ExecutaMovimento(Posicao origem, Posicao destino)
        {
            Peca peca = Tabuleiro.RetirarPeca(origem);

            peca.IncrementarMovimento();
            Peca pecaCapturada = Tabuleiro.RetirarPeca(destino);

            Tabuleiro.ColocarPeca(peca, destino);

            if (pecaCapturada != null)
            {
                PecasCapturadas.Add(pecaCapturada);
            }

            // roque pequeno
            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        = Tabuleiro.RetirarPeca(origemTorre);
                torre.IncrementarMovimento();
                Tabuleiro.ColocarPeca(torre, destinoTorre);
            }

            // roque grande
            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        = Tabuleiro.RetirarPeca(origemTorre);
                torre.IncrementarMovimento();
                Tabuleiro.ColocarPeca(torre, destinoTorre);
            }

            if (peca is Peao)
            {
                if (origem.Coluna != destino.Coluna && pecaCapturada == null)
                {
                    Posicao posicaoPeao;
                    if (peca.Cor == Cor.Branca)
                    {
                        posicaoPeao = new Posicao(destino.Linha + 1, destino.Coluna);
                    }
                    else
                    {
                        posicaoPeao = new Posicao(destino.Linha - 1, destino.Coluna);
                    }
                    pecaCapturada = Tabuleiro.RetirarPeca(posicaoPeao);
                    PecasCapturadas.Add(pecaCapturada);
                }
            }

            return(pecaCapturada);
        }
Example #8
0
        public Peca ExecutarMovimento(Posicao origem, Posicao destino)
        {
            Peca p = Tabuleiro.RetirarPeca(origem);

            p.IncrementarQtemovimentos();
            Peca pecaCapiturada = Tabuleiro.RetirarPeca(destino);

            Tabuleiro.ColocarPeca(p, destino);
            if (pecaCapiturada != null)
            {
                Capituradas.Add(pecaCapiturada);
            }

            // 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        = Tabuleiro.RetirarPeca(origemT);
                T.IncrementarQtemovimentos();
                Tabuleiro.ColocarPeca(T, destinoT);
            }

            // 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        = Tabuleiro.RetirarPeca(origemT);
                T.IncrementarQtemovimentos();
                Tabuleiro.ColocarPeca(T, destinoT);
            }

            // jogadaEspecial En Passant
            if (p is Peao)
            {
                if (origem.Coluna != destino.Coluna && pecaCapiturada == 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);
                    }
                    pecaCapiturada = Tabuleiro.RetirarPeca(posP);
                    Capituradas.Add(pecaCapiturada);
                }
            }
            return(pecaCapiturada);
        }
Example #9
0
        public void DesfazMovimento(Posicao origem, Posicao destino, Peca pecaCapturada)
        {
            Peca p = Tabuleiro.RetirarPeca(destino);

            p.DecrementarQtMovimentos();

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

            // #jogadaespecial roque pequeno
            if (p 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    t            = Tabuleiro.RetirarPeca(destinoTorre);
                t.DecrementarQtMovimentos();
                Tabuleiro.ColocarPeca(t, origemTorre);
            }

            // #jogadaespecial roque grande
            if (p 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    t            = Tabuleiro.RetirarPeca(destinoTorre);
                t.DecrementarQtMovimentos();
                Tabuleiro.ColocarPeca(t, origemTorre);
            }

            // #jogadaespecial En Pessant
            if (p is Peao)
            {
                if (origem.Coluna != destino.Coluna && pecaCapturada == VulneravelEnPassant)
                {
                    Peca    peao = Tabuleiro.RetirarPeca(destino);
                    Posicao posPeao;

                    if (p.Cor == Cor.Branca)
                    {
                        posPeao = new Posicao(3, destino.Coluna);
                    }
                    else
                    {
                        posPeao = new Posicao(4, destino.Coluna);
                    }
                    Tabuleiro.ColocarPeca(peao, posPeao);
                }
            }
        }
        public Peca ExecutaMovimento(Posicao origem, Posicao destino)
        {
            Peca p = Tabuleiro.RetirarPeca(origem);

            p.IncrementarQtdMovimento();
            Peca pecaCapturada = Tabuleiro.RetirarPeca(destino);

            Tabuleiro.ColocarPeca(p, destino);
            if (pecaCapturada != null)
            {
                Capturadas.Add(pecaCapturada);
            }
            //#jogada especial 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    torre    = Tabuleiro.RetirarPeca(origemT);
                torre.IncrementarQtdMovimento();
                Tabuleiro.ColocarPeca(torre, destinoT);
            }

            //#jogada especial 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    torre    = Tabuleiro.RetirarPeca(origemT);
                torre.IncrementarQtdMovimento();
                Tabuleiro.ColocarPeca(torre, destinoT);
            }

            //#jogada especial enpassant
            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 = Tabuleiro.RetirarPeca(posP);
                    Capturadas.Add(pecaCapturada);
                }
            }

            return(pecaCapturada);
        }
        public void DesfazMovimento(Posicao origem, Posicao destino, Peca pecaCapturada)
        {
            Peca p = Tabuleiro.RetirarPeca(destino);

            p.DecrementarQtdMovimento();
            if (pecaCapturada != null)
            {
                Tabuleiro.ColocarPeca(pecaCapturada, destino);
                Capturadas.Remove(pecaCapturada);
            }
            Tabuleiro.ColocarPeca(p, origem);

            //#jogada especial 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    torre    = Tabuleiro.RetirarPeca(destinoT);
                torre.DecrementarQtdMovimento();
                Tabuleiro.ColocarPeca(torre, origemT);
            }


            //#jogada especial 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    torre    = Tabuleiro.RetirarPeca(destinoT);
                torre.DecrementarQtdMovimento();
                Tabuleiro.ColocarPeca(torre, origemT);
            }

            //#jogada especial enpassant
            if (p is Peao)
            {
                if (origem.Coluna != destino.Coluna && pecaCapturada == VulneravelEnPassant)
                {
                    Peca    peao = Tabuleiro.RetirarPeca(destino);
                    Posicao posP;
                    if (p.Cor == Cor.Branca)
                    {
                        posP = new Posicao(3, destino.Coluna);
                    }
                    else
                    {
                        posP = new Posicao(4, destino.Coluna);
                    }
                    Tabuleiro.ColocarPeca(peao, posP);
                }
            }
        }
Example #12
0
        public void RealizaJogada(Posicao origem, Posicao destino)
        {
            Peca pecaCapturada = ExecutaMovimento(origem, destino);

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

            Peca p = Tabuleiro.Peca(destino);

            //Jogada Especial Promoção
            if (p is Peao)
            {
                bool PeaoBrancoEstaNaUltimaLinha = (p.Cor == Cor.Branca) && (destino.Linha == 0);
                bool PeaoPretoEstaNaUltimaLinha  = (p.Cor == Cor.Preta) && (destino.Linha == 7);
                bool EhPromocao = PeaoBrancoEstaNaUltimaLinha || PeaoPretoEstaNaUltimaLinha;
                if (EhPromocao)
                {
                    p = Tabuleiro.RetirarPeca(destino);
                    _pecas.Remove(p);
                    Peca dama = new Dama(Tabuleiro, p.Cor);
                    Tabuleiro.ColocarPeca(dama, destino);
                    _pecas.Add(dama);
                }
            }

            xeque = OReiEstaEmXeque(CorAdversaria(JogadorAtual));

            if (EhXequeMate(CorAdversaria(JogadorAtual)))
            {
                Terminada = true;
            }
            else
            {
                Turno++;
                MudaJogador();
            }

            //Jogada Especial EnPassant
            bool EhOPrimeiroMovimento = (destino.Linha == origem.Linha - 2) || (destino.Linha == origem.Linha + 2);

            if ((p is Peao) && EhOPrimeiroMovimento)
            {
                EnPassant = p;
            }
            else
            {
                EnPassant = null;
            }
        }
Example #13
0
        private void DesfazerMovimento(Posicao origem, Posicao destino, Peca pecaCapturada)
        {
            Peca p = Tabuleiro.RetirarPeca(destino);

            p.DecrementarQtdMovimentos();

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

            //JogadaEspecial Roque Pequeno
            if ((p is Rei) && ((origem.Coluna + 2) == destino.Coluna))
            {
                Posicao origemTorre  = new Posicao(origem.Linha, origem.Coluna + 3);
                Posicao destinoTorre = new Posicao(origem.Linha, origem.Coluna + 1);
                Peca    torre        = Tabuleiro.RetirarPeca(destinoTorre);
                torre.DecrementarQtdMovimentos();
                Tabuleiro.ColocarPeca(torre, origemTorre);
            }

            //JogadaEspecial Roque Grande
            if ((p is Rei) && ((origem.Coluna - 2) == destino.Coluna))
            {
                Posicao origemTorre  = new Posicao(origem.Linha, origem.Coluna - 4);
                Posicao destinoTorre = new Posicao(origem.Linha, origem.Coluna - 1);
                Peca    torre        = Tabuleiro.RetirarPeca(destinoTorre);
                torre.DecrementarQtdMovimentos();
                Tabuleiro.ColocarPeca(torre, origemTorre);
            }

            //Jogada Especial En Passant
            if (p is Peao)
            {
                if ((origem.Coluna != destino.Coluna) && (pecaCapturada == EnPassant))
                {
                    Peca    peao = Tabuleiro.RetirarPeca(destino);
                    Posicao posicaoPeao;
                    if (p.Cor == Cor.Branca)
                    {
                        posicaoPeao = new Posicao(3, destino.Coluna);
                    }
                    else
                    {
                        posicaoPeao = new Posicao(4, destino.Coluna);
                    }
                    Tabuleiro.ColocarPeca(peao, posicaoPeao);
                }
            }
        }
Example #14
0
        public void DesfazerMovimento(Posicao origem, Posicao destino, Peca pecaCapturada)
        {
            Peca pecaDeOrigem = Tabuleiro.RetirarPeca(destino);

            Tabuleiro.ColocarPeca(pecaDeOrigem, origem);
            pecaDeOrigem.DecrementarMovimento();

            if (pecaCapturada != null)
            {
                Tabuleiro.ColocarPeca(pecaCapturada, destino);
                _pecasCapturadas.Remove(pecaCapturada);
            }
        }
Example #15
0
        public void DesfazMovimento(Posicao origem, Posicao destino, Peca pecaCapiturada)
        {
            Peca peca = Tabuleiro.RetirarPeca(destino);

            peca.DecrementarQtemovimentos();
            if (pecaCapiturada != null)
            {
                Tabuleiro.ColocarPeca(pecaCapiturada, destino);
                Capituradas.Remove(pecaCapiturada);
            }
            Tabuleiro.ColocarPeca(peca, origem);

            // jogadaEspecial Roque Pequeno
            if (peca 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        = Tabuleiro.RetirarPeca(destinoT);
                T.DecrementarQtemovimentos();
                Tabuleiro.ColocarPeca(T, origemT);
            }

            // jogadaEspecial Roque Grande
            if (peca 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        = Tabuleiro.RetirarPeca(destinoT);
                T.DecrementarQtemovimentos();
                Tabuleiro.ColocarPeca(T, origemT);
            }

            // #jogadaEspecial En Passant
            if (peca is Peao)
            {
                if (origem.Coluna != destino.Coluna && pecaCapiturada == VulneravelEnPassant)
                {
                    Peca    peao = Tabuleiro.RetirarPeca(destino);
                    Posicao posP;
                    if (peca.Cor == Cor.Branca)
                    {
                        posP = new Posicao(3, destino.Coluna);
                    }
                    else
                    {
                        posP = new Posicao(4, destino.Coluna);
                    }
                    Tabuleiro.ColocarPeca(peao, posP);
                }
            }
        }
Example #16
0
        public void DesfazerMoviemnto(Posicao origem, Posicao destino, Peca pecaCapturada)
        {
            Peca peca = Tabuleiro.RetirarPeca(destino);

            peca.DecremetarMovimentos();
            if (pecaCapturada != null)
            {
                Tabuleiro.ColocarPeca(pecaCapturada, destino);
                PecasCapturadas.Remove(pecaCapturada);
            }
            Tabuleiro.ColocarPeca(peca, origem);

            //Roque pequeno
            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        = Tabuleiro.RetirarPeca(destinoTorre);
                torre.DecremetarMovimentos();
                Tabuleiro.ColocarPeca(torre, origemTorre);
            }

            //Roque grande
            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        = Tabuleiro.RetirarPeca(destinoTorre);
                torre.DecremetarMovimentos();
                Tabuleiro.ColocarPeca(torre, origemTorre);
            }

            //en passant
            if (peca is Peao)
            {
                if (origem.Coluna != destino.Coluna && pecaCapturada == VulneravelEmPassant)
                {
                    Peca    pecaPeao = Tabuleiro.RetirarPeca(destino);
                    Posicao pos;
                    if (peca.Cor == Cor.Branca)
                    {
                        pos = new Posicao(3, destino.Coluna);
                    }
                    else
                    {
                        pos = new Posicao(4, destino.Coluna);
                    }
                    Tabuleiro.ColocarPeca(pecaPeao, pos);
                }
            }
        }
Example #17
0
        public void DesfazMovimento(Posicao origem, Posicao destino, Peca pecaCapturada)
        {
            Peca pecaRetirada = Tabuleiro.RetirarPeca(destino);

            pecaRetirada.AlteraQuantidadeDeMovimento(eIncremento: false);

            if (pecaCapturada != null)
            {
                Tabuleiro.ColocarPeca(pecaCapturada, destino);
                Captudaras.Remove(pecaCapturada);
            }

            Tabuleiro.ColocarPeca(pecaRetirada, origem);
        }
Example #18
0
        public Peca ExecutaMovimento(Posicao origem, Posicao destino)
        {
            Peca pecaRetirada = Tabuleiro.RetirarPeca(origem);

            pecaRetirada.AlteraQuantidadeDeMovimento(eIncremento: true);
            Peca pecaCapturada = Tabuleiro.RetirarPeca(destino);

            Tabuleiro.ColocarPeca(pecaRetirada, destino);
            if (pecaCapturada != null)
            {
                Captudaras.Add(pecaCapturada);
            }

            return(pecaCapturada);
        }
Example #19
0
        public Peca ExecutarMovimento(Posicao origem, Posicao destino)
        {
            Peca peca = Tabuleiro.RetirarPeca(origem);

            peca.IncrementarMovimento();

            Peca pecaCapturada = Tabuleiro.RetirarPeca(destino);

            if (pecaCapturada != null)
            {
                _pecasCapturadas.Add(pecaCapturada);
            }
            Tabuleiro.ColocarPeca(peca, destino);

            return(pecaCapturada);
        }
Example #20
0
        public Peca ExecutarMovimento(Posicao origem, Posicao destino)
        {
            Peca pecaMovimentada = Tabuleiro.RetirarPeca(origem);

            pecaMovimentada.IncrementarQtdMovimentos();
            Peca pecaCapturada = Tabuleiro.RetirarPeca(destino);

            Tabuleiro.InserirPeca(pecaMovimentada, destino);
            if (pecaCapturada != null)
            {
                PecasCapturadas.Add(pecaCapturada);
            }
            // #JogadaEspecial Roque Pequeno
            if (pecaMovimentada 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    tempTorre    = Tabuleiro.RetirarPeca(origemTorre);
                tempTorre.IncrementarQtdMovimentos();
                Tabuleiro.InserirPeca(tempTorre, destinoTorre);
            }
            // #JogadaEspecial Roque Grande
            if (pecaMovimentada 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    tempTorreT   = Tabuleiro.RetirarPeca(origemTorre);
                tempTorreT.IncrementarQtdMovimentos();
                Tabuleiro.InserirPeca(tempTorreT, destinoTorre);
            }
            // #JogadaEspecial En Passant
            if (pecaMovimentada is Peao)
            {
                if (origem.Coluna != destino.Coluna && pecaCapturada == null)
                {
                    Posicao tempPos;
                    tempPos = (pecaMovimentada.Cor == Cor.branca)? new Posicao(destino.Linha + 1, destino.Coluna):
                              new Posicao(destino.Linha - 1, destino.Coluna);
                    pecaCapturada = Tabuleiro.RetirarPeca(tempPos);
                    PecasCapturadas.Add(pecaCapturada);
                }
            }
            return(pecaCapturada);
        }
Example #21
0
        public void DesfazerMovimento(Posicao origem, Posicao destino, Peca pecaCapturada)
        {
            Peca pecaMovimentada = Tabuleiro.RetirarPeca(destino);

            pecaMovimentada.DecrementarQtdMovimentos();
            if (pecaCapturada != null)
            {
                Tabuleiro.InserirPeca(pecaCapturada, destino);
                PecasCapturadas.Remove(pecaCapturada);
            }
            Tabuleiro.InserirPeca(pecaMovimentada, origem);

            // #JogadaEspecial Roque Pequeno
            if (pecaMovimentada 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    tempTorre    = Tabuleiro.RetirarPeca(destinoTorre);
                tempTorre.DecrementarQtdMovimentos();
                Tabuleiro.InserirPeca(tempTorre, origemTorre);
            }
            // #JogadaEspecial Roque Grande
            if (pecaMovimentada 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    tempTorre    = Tabuleiro.RetirarPeca(destinoTorre);
                tempTorre.DecrementarQtdMovimentos();
                Tabuleiro.InserirPeca(tempTorre, origemTorre);
            }
            // #JogadaEspecial En Passant
            if (pecaMovimentada is Peao)
            {
                if (origem.Coluna != destino.Coluna && pecaCapturada == VulneravelEnPassant)
                {
                    Peca    peao = Tabuleiro.RetirarPeca(destino);
                    Posicao tempPos;
                    tempPos = (pecaMovimentada.Cor == Cor.branca)? new Posicao(3, destino.Coluna):
                              new Posicao(4, destino.Coluna);
                    Tabuleiro.InserirPeca(peao, tempPos);
                }
            }
        }
Example #22
0
        public void RelizaJogada(Posicao origem, Posicao destino)
        {
            Peca pecaCapturada = ExecutaMovimento(origem, destino);

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

            PartidaEmXeque = EstahEmXeque(Adversaria(JogadorAtual));
            Peca peca = Tabuleiro.Peca(destino);

            if (peca is Peao)
            {
                if ((peca.Cor == Cor.Branca && destino.Linha == 0) || (peca.Cor == Cor.Preta && destino.Linha == 7))
                {
                    peca = Tabuleiro.RetirarPeca(destino);
                    Pecas.Remove(peca);
                    Peca dama = new Rainha(Tabuleiro, peca.Cor);
                    Tabuleiro.ColocarPeca(dama, destino);
                    Pecas.Add(dama);
                }
            }

            if (TestarXequeMate(Adversaria(JogadorAtual)))
            {
                PartidaTerminada = true;
            }
            else
            {
                Turno++;
                MudarJogador();
            }
            //teste en passant
            VulneravelEmPassant = (peca is Peao && ((destino.Linha == origem.Linha - 2) || (destino.Linha == origem.Linha + 2))) ? peca : null;
        }
Example #23
0
        public void RealizaJogada(Posicao origem, Posicao destino)
        {
            Peca pecaCapturada = ExecutarMovimento(origem, destino);
            Peca temPeca       = Tabuleiro.GetPeca(destino);

            if (EstaEmXeque(JogadorAtual))
            {
                DesfazerMovimento(origem, destino, pecaCapturada);
                throw new TabuleiroException("\nPara de pensar com a bunda!!\nVocê não pode se colocar em Xeque!!");
            }
            // #jogadaespecial promocao
            if (temPeca is Peao)
            {
                if ((temPeca.Cor == Cor.branca && destino.Linha == 0) || (temPeca.Cor == Cor.preta && destino.Linha == 7))
                {
                    temPeca = Tabuleiro.RetirarPeca(destino);
                    Pecas.Remove(temPeca);
                    Peca dama = new Queen(temPeca.Cor, Tabuleiro);
                    Tabuleiro.InserirPeca(dama, destino);
                    Pecas.Add(dama);
                }
            }
            Xeque = (EstaEmXeque(Adversario(JogadorAtual))) ? true : false;

            if (XequeMate(Adversario(JogadorAtual)))
            {
                Terminada = true;
            }
            else
            {
                Turno++;
                TrocaJogador();
            }
            // #jogadaespecial en passant
            VulneravelEnPassant = (temPeca is Peao && (destino.Linha == origem.Linha - 2 || destino.Linha == origem.Linha + 2)) ? temPeca : null;
        }