Пример #1
0
        public void RealizaJogada(Posicao origem, Posicao destino)
        {
            Peca PecaCapturada = executaMovimento(origem, destino);

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

            Peca p = Tabuleiro.peca(destino);

            //#jogada especial 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 (EstaEmCheque(Adversaria(JogadorAtual)))
            {
                Xeque = true;
            }
            else
            {
                Xeque = false;
            }

            if (TestaXequeMate(Adversaria(JogadorAtual)))
            {
                Terminada = true;
            }
            else
            {
                Turno++;
                MudaJogador();
            }


            //#jogada especial en passant

            if (p is Peao && (destino.Linha == origem.Linha - 2) || destino.Linha == origem.Linha + 2)
            {
                VulneravelEnPassant = p;
            }
            else
            {
                VulneravelEnPassant = null;
            }
        }
Пример #2
0
        public Peca executaMovimento(Posicao origem, Posicao destino)
        {
            Peca p = Tabuleiro.RetirarPeca(origem);

            p.IncrementarQteMovimentos();
            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    T        = Tabuleiro.RetirarPeca(OrigemT);
                T.IncrementarQteMovimentos();
                Tabuleiro.ColocarPeca(T, 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    T        = Tabuleiro.RetirarPeca(OrigemT);
                T.IncrementarQteMovimentos();
                Tabuleiro.ColocarPeca(T, DestinoT);
            }

            //#jogada especial 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);
        }
Пример #3
0
        public Peca ExecutaMovimento(Posicao origem, Posicao destino)
        {
            Peca p = Tabuleiro.RetirarPeca(origem);

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

            if (p is Peao)
            {
                if (origem.Coluna != destino.Coluna && pecaCapturada == null)
                {
                    Posicao posicaoP;
                    if (p.Cor == Cor.Branca)
                    {
                        posicaoP = new Posicao(destino.Linha + 1, destino.Coluna);
                    }
                    else
                    {
                        posicaoP = new Posicao(destino.Linha - 1, destino.Coluna);
                    }
                    pecaCapturada = Tabuleiro.RetirarPeca(posicaoP);
                    Capturadas.Add(pecaCapturada);
                }
            }
            return(pecaCapturada);
        }
Пример #4
0
        public void DesfazMovimento(Posicao origem, Posicao destino, Peca pecaCapturada)
        {
            Peca p = Tabuleiro.RetirarPeca(destino);

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

            // #Jogada especial En Passant
            if (p is Peao)
            {
                if (origem.Coluna != destino.Coluna && pecaCapturada == VulneravelEnPassant)
                {
                    Peca    peao = Tabuleiro.RetirarPeca(destino);
                    Posicao posicaoP;
                    if (peao.Cor == Cor.Branca)
                    {
                        posicaoP = new Posicao(3, destino.Coluna);
                    }
                    else
                    {
                        posicaoP = new Posicao(4, destino.Coluna);
                    }
                    Tabuleiro.ColocarPeca(peao, posicaoP);
                }
            }
        }
Пример #5
0
        public void DesfazMovimento(Posicao origem, Posicao destino, Peca PecaCapturada)
        {
            Peca p = Tabuleiro.RetirarPeca(destino);

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

            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(DestinoT);
                T.DecrementarQteMovimentos();
                Tabuleiro.ColocarPeca(T, OrigemT);
            }

            //desfazendo #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    T        = Tabuleiro.RetirarPeca(DestinoT);
                T.DecrementarQteMovimentos();
                Tabuleiro.ColocarPeca(T, OrigemT);
            }


            //desfazendo #jogada especial en passant
            if (p is Peao)
            {
                if (origem.Coluna != destino.Coluna && PecaCapturada == null)
                {
                    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);
                }
            }
        }
Пример #6
0
        public Peca ExecutarMovimento(Posicao origem, Posicao destino)
        {
            Peca pecaDoTurnoAtual = Tabuleiro.RetirarPeca(origem);

            pecaDoTurnoAtual.IncrementarQuantidadeDeMovimentos();
            Peca pecaCapturada = Tabuleiro.RetirarPeca(destino);

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

            //#JogadaEspecial Roque Pequeno
            if (pecaDoTurnoAtual 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.IncrementarQuantidadeDeMovimentos();
                Tabuleiro.ColocarPeca(torre, destinoTorre);
            }

            //#JogadaEspecial Roque Grande
            if (pecaDoTurnoAtual 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.IncrementarQuantidadeDeMovimentos();
                Tabuleiro.ColocarPeca(torre, destinoTorre);
            }

            //#JogadaEspecial En Passant
            if (pecaDoTurnoAtual is Peao)
            {
                if (origem.Coluna != destino.Coluna && pecaCapturada == null)
                {
                    int     complementoParaLinhaDestino = pecaDoTurnoAtual.Cor == Cor.Branca ? +1 : -1;
                    Posicao posPeao = new Posicao(destino.Linha + complementoParaLinhaDestino, destino.Coluna);

                    pecaCapturada = Tabuleiro.RetirarPeca(posPeao);
                    PecasCapturadas.Add(pecaCapturada);
                }
            }

            return(pecaCapturada);
        }
Пример #7
0
        private void DesfazMovimento(Posicao origem, Posicao destino, Peca pecaCapturada)
        {
            Peca pecaDoDestino = Tabuleiro.RetirarPeca(destino);

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

            //#JogadaEspecial Roque Pequeno
            if (pecaDoDestino 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.DecrementarQuantidadeDeMovimentos();
                Tabuleiro.ColocarPeca(torre, origemTorre);
            }

            //#JogadaEspecial Roque Grande
            if (pecaDoDestino 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.DecrementarQuantidadeDeMovimentos();
                Tabuleiro.ColocarPeca(torre, origemTorre);
            }

            //#JogadaEspecial En Passant
            if (pecaDoDestino is Peao)
            {
                if (origem.Coluna != destino.Coluna && pecaCapturada == PecaVuneravelAEnPassant)
                {
                    Peca    peao          = Tabuleiro.RetirarPeca(destino);
                    int     linhaOriginal = pecaDoDestino.Cor == Cor.Branca ? 3 : 4;
                    Posicao posPeao       = new Posicao(linhaOriginal, destino.Coluna);

                    Tabuleiro.ColocarPeca(peao, posPeao);
                }
            }
        }
Пример #8
0
        public void RealizaJogada(Posicao origem, Posicao destino)
        {
            Peca pecaCapturada = ExecutarMovimento(origem, destino);
            Peca pecaMovida    = Tabuleiro.Peca(destino);

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

            //#JogadaEspecial Promoção
            if (pecaMovida is Peao)
            {
                if ((pecaMovida.Cor == Cor.Branca && destino.Linha == 0) || (pecaMovida.Cor == Cor.Preta && destino.Linha == 7))
                {
                    pecaMovida = Tabuleiro.RetirarPeca(destino);
                    PecasEmJogo.Remove(pecaMovida);

                    Peca dama = new Dama(Tabuleiro, pecaMovida.Cor);
                    Tabuleiro.ColocarPeca(dama, destino);
                    PecasEmJogo.Add(dama);
                }
            }

            EmXeque = EstaEmXeque(CorAdversariaACor(JogadorAtual));

            if (TesteXequeMate(CorAdversariaACor(JogadorAtual)))
            {
                Terminada = true;
            }
            else
            {
                Turno++;
                MudaJogador();
            }

            //#JogadaEspecial En Passant
            bool isVuneravelEnPassant = pecaMovida is Peao && (destino.Linha == origem.Linha - 2 || destino.Linha == origem.Linha + 2);

            PecaVuneravelAEnPassant = isVuneravelEnPassant ? pecaMovida : null;
        }