Esempio n. 1
0
        public Peca ExecutaMovimento(Posicao origem, Posicao destino)
        {
            Peca p = Tab.RemoverPeca(origem);

            p.IncrementarQntMovimentos();

            Peca pecaCapturada = Tab.RemoverPeca(destino);

            Tab.AdicionarPeca(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 torre = Tab.RemoverPeca(origemTorre);
                Tab.AdicionarPeca(torre, 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 torre = Tab.RemoverPeca(origemTorre);
                Tab.AdicionarPeca(torre, 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 = Tab.RemoverPeca(posP);
                    _capturadas.Add(pecaCapturada);
                }
            }

            return(pecaCapturada);
        }
Esempio n. 2
0
        public void DesfazMovimento(Posicao origem, Posicao destino, Peca pecaCapturada)
        {
            Peca p = Tab.RemoverPeca(destino);

            p.DecrementarQntMovimentos();

            if (pecaCapturada != null)
            {
                Tab.AdicionarPeca(pecaCapturada, destino);
                _capturadas.Remove(pecaCapturada);
            }
            Tab.AdicionarPeca(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 torre = Tab.RemoverPeca(destinoTorre);
                torre.DecrementarQntMovimentos();
                Tab.AdicionarPeca(torre, 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 torre = Tab.RemoverPeca(destinoTorre);
                torre.DecrementarQntMovimentos();
                Tab.AdicionarPeca(torre, origemTorre);
            }

            // #JogadaEspecial En Passant
            if (p is Peao)
            {
                if (origem.Coluna != destino.Coluna && pecaCapturada == VuneravelEnPassant)
                {
                    Peca    peao = Tab.RemoverPeca(destino);
                    Posicao posP;
                    if (p.Cor == Cor.Branca)
                    {
                        posP = new Posicao(3, destino.Coluna);
                    }
                    else
                    {
                        posP = new Posicao(4, destino.Coluna);
                    }
                    Tab.AdicionarPeca(peao, posP);
                }
            }
        }
Esempio n. 3
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 cheque");
            }

            Peca p = Tab.Peca(destino);

            // #Jogada Especial - Promoção
            if (p is Peao)
            {
                if ((p.Cor == Cor.Branca && destino.Linha == 0) || (p.Cor == Cor.Preta && destino.Linha == 7))
                {
                    p = Tab.RemoverPeca(destino);
                    _pecas.Remove(p);
                    Peca dama = new Dama(Tab, p.Cor);
                    Tab.AdicionarPeca(dama, destino);
                    _pecas.Add(dama);
                }
            }


            if (EstaEmCheque(Adversaria(JogadorAtual)))
            {
                EmXeque = true;
            }
            else
            {
                EmXeque = false;
            }

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

            // #JogadaEspecial En Passant
            if (p is Peao && destino.Linha == origem.Linha - 2 || destino.Linha == origem.Linha + 2)
            {
                VuneravelEnPassant = p;
            }
        }
Esempio n. 4
0
 public void ColocarNovaPeca(char coluna, int linha, Peca peca)
 {
     Tab.AdicionarPeca(peca, new PosicaoXadrez(coluna, linha).ToPosicao());
     _pecas.Add(peca);
 }