예제 #1
0
        private Peca ExecutaMovimento(Posicao origem, Posicao destino)
        {
            Peca peca = Tabuleiro.RetirarPeca(origem);

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

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

            if (peca is Rei && destino.Coluna == origem.Coluna + 2)
            {
                ExecutaRoquePequeno(origem);
            }

            if (peca is Rei && destino.Coluna == origem.Coluna - 2)
            {
                ExecutaRoqueGrande(origem);
            }

            if (peca is Peao)
            {
                ExecutaEnPassant(peca, pecaCapturada, origem, destino);
            }

            return(pecaCapturada);
        }
예제 #2
0
        public Peca ExecutaMovimento(Posicao origem, Posicao destino)
        {
            Peca p = Tab.RetirarPeca(origem);

            p.IncrementarQtdDeMovimentos();
            Peca pecaCapturada = Tab.RetirarPeca(destino);

            Tab.ColocarPeca(p, destino);

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

            // Jogada especial reque pequeno
            if (p is Rei && destino.Coluna == origem.Coluna + 2)
            {
                Posicao origTorre    = new Posicao(origem.Linha, origem.Coluna + 3);
                Posicao destinoTorre = new Posicao(origem.Linha, origem.Coluna + 1);
                Peca    T            = Tab.RetirarPeca(origTorre);
                T.IncrementarQtdDeMovimentos();
                Tab.ColocarPeca(T, destinoTorre);
            }

            // Jogada especial reque pequeno
            if (p is Rei && destino.Coluna == origem.Coluna - 2)
            {
                Posicao origTorre    = new Posicao(origem.Linha, origem.Coluna - 4);
                Posicao destinoTorre = new Posicao(origem.Linha, origem.Coluna - 1);
                Peca    T            = Tab.RetirarPeca(origTorre);
                T.IncrementarQtdDeMovimentos();
                Tab.ColocarPeca(T, destinoTorre);
            }

            // 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 = Tab.RetirarPeca(posP);
                    PecasCapturadas.Add(pecaCapturada);
                }
            }

            return(pecaCapturada);
        }
예제 #3
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);
        }
예제 #4
0
 private void ExecutaEnPassant(Peca peca, Peca pecaCapturada, Posicao origem, Posicao destino)
 {
     if (origem.Coluna != destino.Coluna && pecaCapturada == null)
     {
         Posicao posPeca;
         if (peca.Cor == Cor.Branco)
         {
             posPeca = new Posicao(destino.Linha + 1, destino.Coluna);
         }
         else
         {
             posPeca = new Posicao(destino.Linha - 1, destino.Coluna);
         }
         pecaCapturada = Tabuleiro.RetirarPeca(posPeca);
         PecasCapturadas.Add(pecaCapturada);
     }
 }