示例#1
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);
        }
示例#2
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);
                }
            }
        }
示例#3
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;
        }
示例#4
0
 public void ColocarNovaPeca(int linha, int coluna, Peca peca)
 {
     Tabuleiro.InserirPeca(peca, new Posicao(linha, coluna));
     Pecas.Add(peca);
 }