Пример #1
0
        public void realizaJogada(Posicao origem, Posicao destino)
        {
            var p             = tabuleiro.peca(origem);
            var pecaCapturada = ExecultaMovimento(origem, destino);

            //TODO jogada especial promocao
            if (p is Peao)
            {
                if ((p.cor == Cor.branco && destino.linha == 0) || (p.cor == Cor.preto && destino.linha == 7))
                {
                    p = tabuleiro.retirarPeca(destino);
                    pecas.Remove(p);

                    Peca rainha = new Rainha(tabuleiro, p.cor);
                    tabuleiro.colocarPeca(rainha, destino);
                    pecas.Add(rainha);
                }
            }

            if (estaEmXeque(_jogadorAtual))
            {
                desfazMovimento(origem, destino, pecaCapturada);
                throw new ExceptionUtil("Você não pode se colocar em xeque!");
            }


            if (estaEmXeque(adversaria(_jogadorAtual)))
            {
                xeque = true;
            }
            else
            {
                xeque = false;
            }

            if (testeXequeMate(adversaria(_jogadorAtual)))
            {
                terminada = true;
            }
            else
            {
                _turno++;
                mudarJogaodr();
            }


            //TODO jogada especial En Passant
            if (p is Peao && (destino.linha == origem.linha - 2 || destino.linha == origem.linha + 2))
            {
                vulnevaralEnPassant = p;
            }
            else
            {
                vulnevaralEnPassant = null;
            }
        }
Пример #2
0
        public void RealizaJogada(Posicao origem, Posicao destino)
        {
            Peca pecaCapturada = ExecutaMovimento(origem, destino);

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

            Peca peca = Tabuleiro.Peca(destino);

            // #jogadaespecial promocao
            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 rainha = new Rainha(Tabuleiro, peca.Cor);
                    Tabuleiro.ColocarPeca(rainha, destino);
                    Pecas.Add(rainha);
                }
            }

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

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

            // #jogadaespecial en passant
            if (peca is Peao && destino.Linha == origem.Linha - 2 || destino.Linha == origem.Linha + 2)
            {
                VulneravelEnPassant = peca;
            }
            else
            {
                VulneravelEnPassant = null;
            }
        }
Пример #3
0
    public Peca PromoverPeao(Movimento m, int tipoNovaPeca)
    {
        int  indicePeao = 0;
        Peca peaoAtual  = m.destino.PecaAtual;

        //tipoNovaPeca = FUNÇÂOQUEUSAINTERFACEPARADEFINIR (TODO)

        // acha a posicao do peao no array de peças do jogador
        foreach (Peca p in peaoAtual.jDono.conjuntoPecas)
        {
            if (p == peaoAtual)
            {
                break;
            }
            indicePeao++;
        }

        Peca novaPeca;

        //se 1, então vira rainha
        //se 2, então vira torre
        //se 3, então vira cavalo
        //senao, então vira Bispo
        if (tipoNovaPeca == 1)
        {
            novaPeca = new Rainha(peaoAtual.jDono);
        }
        else if (tipoNovaPeca == 2)
        {
            novaPeca = new Torre(peaoAtual.jDono);
        }
        else if (tipoNovaPeca == 3)
        {
            novaPeca = new Cavalo(peaoAtual.jDono);
        }
        else
        {
            novaPeca = new Bispo(peaoAtual.jDono);
        }

        //define a posição e salva a peça na casa e no jogador
        novaPeca.jDono.conjuntoPecas[indicePeao] = novaPeca;
        m.destino.ColocarPeca(novaPeca);
        novaPeca.CasaAtual = m.destino;

        novaPeca.UltimoTurnoMovido = this.UltimoTurnoMovido;


        return(novaPeca);
    }
Пример #4
0
        public void RealizaJogada(Posicao origem, Posicao destino)
        {
            Peca pecaCapturada = ExecutaMovimento(origem, destino);

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

            Peca peca = Tabuleiro.GetPeca(destino);

            // Jogada especial
            // Promoção
            if (peca is Peao)
            {
                if ((peca.Cor == Cor.Branco && destino.Linha == 0) ||
                    (peca.Cor == Cor.Preto && destino.Linha == 7))
                {
                    peca = Tabuleiro.RetirarPeca(destino);
                    _pecas.Remove(peca);
                    Peca rainha = new Rainha(Tabuleiro, peca.Cor);
                    Tabuleiro.ColocarPeca(rainha, destino);
                }
            }

            Xeque = EstaEmXeque(Adversário(JogadorAtual));

            if (XequeMate(Adversário(JogadorAtual)))
            {
                Terminada = true;
            }
            else
            {
                Turno++;
                AlternaJogador();
            }
        }