示例#1
0
        public void realizaJogada(Posicao origem, Posicao destino)
        {
            Peca pecaCapturada = executarMovimento(origem, destino);

            if (estaEmCheque(jogadorAtual))
            {
                desfazerMovimento(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.retirarPeca(destino);
                    pecas.Remove(p);
                    Peca rainha = new Rainha(tab, p.cor);
                    tab.colocarPeca(rainha, destino);
                    pecas.Add(rainha);
                }
            }

            if (estaEmCheque(pecaAdversaria(jogadorAtual)))
            {
                xeque = true;
            }
            else
            {
                xeque = false;
            }

            if (testarChequeMate(pecaAdversaria(jogadorAtual)))
            {
                terminada = true;
            }
            else
            {
                turno++;
                mudaJogador();
            }

            p = tab.peca(destino);

            // #jogada especial en passant

            if (p is Peao && (destino.linha == origem.linha - 2 || destino.linha == origem.linha + 2))
            {
                vulneravelEnPassant = p;
            }
            else
            {
                vulneravelEnPassant = null;
            }
        }
        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 p = Tab.Peca(destino);

            //#JogadaEspecial Promocao
            if (p is Peao)
            {
                if ((p.Cor == Cor.Branca && destino.Linha == 0) || (p.Cor == Cor.Preta && destino.Linha == 7))
                {
                    p = Tab.RetirarPeca(destino);
                    _pecas.Remove(p);
                    Peca dama = new Rainha(Tab, p.Cor);
                    Tab.ColocarPeca(dama, destino);
                    _pecas.Add(dama);
                }
            }

            if (EstaEmXeque(Adversaria(JogadorAtual)))
            {
                Xeque = true;
            }
            else
            {
                Xeque = 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;
            }
            else
            {
                VuneravelEnPassant = null;
            }
        }
示例#3
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 p = tab.peca(destino);

            //jogadaEspecial: promocao
            if (p is Peao)
            {
                if ((p.cor == Cor.Branca && destino.linha == 0) || (p.cor == Cor.Preta && destino.linha == 7))
                {
                    p = tab.retirarPeca(destino);
                    pecas.Remove(p);
                    //verificar todas as outras opções possiveis depois
                    Peca dama = new Rainha(tab, p.cor);
                    tab.colocarPeca(dama, destino);
                    pecas.Add(dama);
                }
            }
            if (estaEmXeque(adversario(jogadorAtual)))
            {
                xeque = true;
            }
            else
            {
                xeque = false;
            }
            if (testeXequeMate(adversario(jogadorAtual)))
            {
                terminada = true;
            }
            else
            {
                turno++;
                mudaJogador();
            }
            //jogadaEspecial: em passant
            if (p is Peao && (destino.linha == origem.linha - 2 || destino.linha == origem.linha + 2))
            {
                vuneravelEmPassant = p;
            }
            else
            {
                vuneravelEmPassant = null;
            }
        }
示例#4
0
        public void RelizaJogada(Posicao origem, Posicao destino)
        {
            Peca pecaCapturada = ExecutaMovimento(origem, destino);

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

            PartidaEmXeque = EstahEmXeque(Adversaria(JogadorAtual));
            Peca peca = Tabuleiro.Peca(destino);

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

            if (TestarXequeMate(Adversaria(JogadorAtual)))
            {
                PartidaTerminada = true;
            }
            else
            {
                Turno++;
                MudarJogador();
            }
            //teste en passant
            VulneravelEmPassant = (peca is Peao && ((destino.Linha == origem.Linha - 2) || (destino.Linha == origem.Linha + 2))) ? peca : null;
        }
示例#5
0
        // private void colocarPecas()
        // {
        //     colocarNovaPeca('c', 1, new Torre(tabuleiro, Cor.Branca));
        //     colocarNovaPeca('h', 7, new Torre(tabuleiro, Cor.Branca));
        //     colocarNovaPeca('d', 2, new Bispo(tabuleiro, Cor.Branca));
        //     colocarNovaPeca('e', 2, new Bispo(tabuleiro, Cor.Branca));
        //     colocarNovaPeca('e', 1, new Cavalo(tabuleiro, Cor.Branca));
        //     colocarNovaPeca('d', 1, new Rei(tabuleiro, Cor.Branca));

        //     colocarNovaPeca('a', 8, new Rei(tabuleiro, Cor.Preta));
        //     colocarNovaPeca('b', 8, new Torre(tabuleiro, Cor.Preta));
        // }

        /// <summary>
        /// Metodo que executa um movimento dada um posicao de origem e destino
        /// Este metodo tbm valida se o movimento ti levou a uma situacao de xeque
        /// </summary>
        /// <param name="origem"></param>
        /// <param name="destino"></param>
        public void realizaJogada(Posicao origem, Posicao destino)
        {
            Peca pecaCapturada = ExecutaMovimento(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
            if (pecaMovida is Peao)
            {
                if ((pecaMovida.cor == Cor.Branca && destino.linha == 0) ||
                    (pecaMovida.cor == Cor.Preta && destino.linha == 8))
                {
                    pecaMovida = tabuleiro.removerPeca(destino);
                    pecas.Remove(pecaMovida);
                    Peca dama = new Rainha(tabuleiro, pecaMovida.cor);
                    tabuleiro.adicionarPeca(dama, destino);
                    pecas.Add(dama);
                }
            }

            if (estaEmXeque(adversario(jogadorAtual)))
            {
                xeque = true;
            }
            else
            {
                xeque = false;
            }

            if (testeXequeMate(adversario(jogadorAtual)))
            {
                terminada = true;
            }
            else
            {
                turno++;
                mudaJoador();
            }

            // #jogadaEspecial = en passant
            if (pecaMovida is Peao && (destino.linha == origem.linha - 2 ||
                                       destino.linha == origem.linha + 2))
            {
                vuneralvelEnPassant = pecaMovida;
            }
            else
            {
                vuneralvelEnPassant = null;
            }

            // jogadaEspecial en passant
            if (pecaMovida is Peao)
            {
                if (origem.coluna != destino.coluna && pecaCapturada == null)
                {
                    Posicao posP;
                    if (pecaMovida.cor == Cor.Branca)
                    {
                        posP = new Posicao(destino.linha + 1, destino.coluna);
                    }
                    else
                    {
                        posP = new Posicao(destino.linha - 1, destino.coluna);
                    }
                    pecaCapturada = tabuleiro.removerPeca(posP);
                    capturadas.Add(pecaCapturada);
                }
            }
        }