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

            if (estaEmXeque(jogadorAtual))
            {
                desfazMovimento(origem, destino, pecaCapturada);
                throw new TabuleiroException("Você não pode se colcar 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 Dama(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))
            {
                vulneravelEnPassant = p;
            }
            else
            {
                vulneravelEnPassant = null;
            }
        }
示例#2
0
        public void RealizaJogada(Posicao origem, Posicao destino)
        {
            Peca pecaCapturada = ExecutaMovimento(origem, destino);

            if (ValidaPosicaoXeque(CorPecaJogador))
            {
                DesfazerMovimento(origem, destino, pecaCapturada);
                throw new TabuleiroException("Não é possível colocar-se em posição de xeque!");
            }

            Peca pecaMovida = Tabuleiro.Peca(destino);

            // promocao
            if (pecaMovida is Peao)
            {
                if ((pecaMovida.Cor == Cor.Branca && destino.Linha == 0) || (pecaMovida.Cor == Cor.Preta && destino.Linha == 7))
                {
                    pecaMovida = Tabuleiro.RetirarPeca(destino);
                    PecasJogo.Remove(pecaMovida);
                    Peca dama = new Dama(Tabuleiro, pecaMovida.Cor);
                    Tabuleiro.ColocarPeca(dama, destino);
                    PecasJogo.Add(dama);
                }
            }

            if (ValidaPosicaoXeque(IdentificarCorAdversaria(CorPecaJogador)))
            {
                Xeque = true;
            }
            else
            {
                Xeque = false;
            }

            if (ValidaXequeMate(IdentificarCorAdversaria(CorPecaJogador)))
            {
                Terminada = true;
            }
            else
            {
                Turno++;
                MudaCorPeca();
            }

            // en passant
            if (pecaMovida is Peao && (destino.Linha == origem.Linha - 2 || destino.Linha == origem.Linha + 2))
            {
                PecaEnPassant = pecaMovida;
            }
            else
            {
                PecaEnPassant = 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);
                    Peca dama = new Dama(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();
            }

            //#jodadaEspecial - en passant
            if (p is Peao && (destino.Linha == origem.Linha - 2 || destino.Linha == origem.Linha + 2))
            {
                VulneravelEnPassant = p;
            }
            else
            {
                VulneravelEnPassant = null;
            }
        }
示例#4
0
        public void movimentoJogada(Posicao origem, Posicao destino)
        {
            Peca pecaCapturada = movimento(origem, destino);

            if (emXeque(jogador))
            {
                desfazerMovimento(origem, destino, pecaCapturada);
                throw new TabuleiroException("Não é possível movimentar, seu rei vai ficar em xeque");
            }
            Peca auxPeca = tabu.peca(destino);

            // jogada promoção
            if (auxPeca is Peao)
            {
                if ((auxPeca.cor == Cor.Branco && destino.linha == 0) || (auxPeca.cor == Cor.Preto && destino.linha == 7))
                {
                    auxPeca = tabu.removerPeca(destino);
                    pecas.Remove(auxPeca);
                    Peca dama = new Dama(tabu, auxPeca.cor);
                    tabu.incluirPeca(dama, destino);
                    pecas.Add(dama);
                }
            }
            // jogada promoção
            if (emXeque(adversaria(jogador)))
            {
                xeque = true;
            }
            else
            {
                xeque = false;
            }

            if (xequeMate(adversaria(jogador)))
            {
                finalizada = true;
            }
            else
            {
                turno++;
                mudaJogador();
            }
            // jogada en passant
            if (auxPeca is Peca && (destino.linha == origem.linha - 2 || destino.linha == origem.linha + 2))
            {
                enPassant = auxPeca;
            }
            else
            {
                enPassant = null;
            }
            // jogada en passant
        }
示例#5
0
        public void RealizaJogada(Posicao origem, Posicao destino)
        {
            Peca PecaCapturada = ExecutaMovimento(origem, destino);

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

            Peca p = Tab.Peca(destino);

            //Promocao
            if (p is Peao)
            {
                if ((p.Cor == Cor.Branco && destino.Linha == 0) || (p.Cor == Cor.Preto && destino.Linha == 7))
                {
                    p = Tab.RetirarPeca(destino);
                    Minha.Remove(p);
                    Peca dama = new Dama(Tab, p.Cor);
                    Tab.ColocarPeca(dama, destino);
                    Minha.Add(dama);
                }
            }

            if (Xeque(Adversaria(JogadorAtual)))
            {
                EXeque = true;
            }
            else
            {
                EXeque = false;
            }
            if (XequeMate(Adversaria(JogadorAtual)))
            {
                Terminada = true;
            }
            else
            {
                Turno++;
                MudaJogador();
            }

            //#EnPassant
            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);
            Peca pecaDestino   = this.Tabuleiro.peca(destino);

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

            // promoção
            if (pecaDestino is Peao)
            {
                if ((pecaDestino.Cor == Cor.Branca && destino.Linha == 0) || (pecaDestino.Cor == Cor.Preta && destino.Linha == 7))
                {
                    pecaDestino = this.Tabuleiro.retirarPeca(destino);
                    this.Pecas.Remove(pecaDestino);
                    Peca Dama = new Dama(this.Tabuleiro, pecaDestino.Cor);
                    this.Tabuleiro.ColocarPeca(Dama, destino);
                    this.Pecas.Add(Dama);
                }
            }

            if (estaEmXeque(adversaria(JogadorAtual)))
            {
                this.xeque = true;
            }
            else
            {
                this.xeque = false;
            }

            if (testeXequemate(adversaria(JogadorAtual)))
            {
                this.Terminada = true;
            }
            else
            {
                this.Turno++;
                mudaJogador();
            }

            // en passant
            if (pecaDestino is Peao && (destino.Linha == origem.Linha - 2 || destino.Linha == origem.Linha + 2))
            {
                this.vulneravelEnPassant = pecaDestino;
            }
            else
            {
                this.vulneravelEnPassant = null;
            }
        }
示例#7
0
        public void RealizaJogada(Posicao origem, Posicao destino)
        {
            Peca pecaCapturada = ExecutaMovimento(origem, destino);

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

            Peca p = Tabuleiro.Peca(destino);

            //Jogada Especial Promoção
            if (p is Peao)
            {
                bool PeaoBrancoEstaNaUltimaLinha = (p.Cor == Cor.Branca) && (destino.Linha == 0);
                bool PeaoPretoEstaNaUltimaLinha  = (p.Cor == Cor.Preta) && (destino.Linha == 7);
                bool EhPromocao = PeaoBrancoEstaNaUltimaLinha || PeaoPretoEstaNaUltimaLinha;
                if (EhPromocao)
                {
                    p = Tabuleiro.RetirarPeca(destino);
                    _pecas.Remove(p);
                    Peca dama = new Dama(Tabuleiro, p.Cor);
                    Tabuleiro.ColocarPeca(dama, destino);
                    _pecas.Add(dama);
                }
            }

            xeque = OReiEstaEmXeque(CorAdversaria(JogadorAtual));

            if (EhXequeMate(CorAdversaria(JogadorAtual)))
            {
                Terminada = true;
            }
            else
            {
                Turno++;
                MudaJogador();
            }

            //Jogada Especial EnPassant
            bool EhOPrimeiroMovimento = (destino.Linha == origem.Linha - 2) || (destino.Linha == origem.Linha + 2);

            if ((p is Peao) && EhOPrimeiroMovimento)
            {
                EnPassant = p;
            }
            else
            {
                EnPassant = null;
            }
        }
        public void realizaJogada(Posicao origem, Posicao destino)
        {
            Peca pecaCapturada = executaMovimento(origem, destino);

            // Se após a jogada, o jogador atual se colocou em xeque
            // a jogada precisa ser desfeita, pois não é permitido se colocar em xeque
            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 Dama(tab, p.cor);
                    tab.colocarPeca(dama, destino);
                    pecas.Add(dama);
                }
            }

            // Verifica se após a jogada do jogador atual, o adversário ficou em xeque
            xeque = estaEmXeque(adversaria(jogadorAtual));

            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)
            {
                vulneravelEnPassant = p;
            }
            else
            {
                vulneravelEnPassant = null;
            }
        }
示例#9
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);

            // # 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 dama = new Dama(p.Cor, Tab);
                    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();
            }

            // # JOGADA ESPECIAL - EN PASSANT
            if (p is Peao && (destino.Linha == origem.Linha - 2 || destino.Linha == origem.Linha + 2))
            {
                VulneravelEnPassant = p;
            }
        }
示例#10
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);

            //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 dama = new Dama(p.Cor, Tab);
                    Tab.ColocarPeca(dama, destino);
                    Pecas.Add(dama);
                    Console.WriteLine("\nSeu peão será promovido à DAMA!\nPressione enter para continuar.");
                    Console.ReadLine();
                }
            }

            Xeque = (EstaEmXeque(Adversario(JogadorAtual))) ? true : false;

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



            //Jogada Especial: En Passant
            if (p is Peao && (destino.Linha == origem.Linha - 2 || destino.Linha == origem.Linha + 2))
            {
                VulneravelEnPassant = p;
            }
            else
            {
                VulneravelEnPassant = null;
            }
        }
示例#11
0
        private Peca EscolhePromo(Tabuleiro tabuleiro, Cor cor)
        {
            char resp = ' ';
            int  aux  = 0;

            while (aux == 0)
            {
                System.Console.Write("Escolha sua promoção(D/B/T/C): ");
                resp = char.Parse(Console.ReadLine());

                if (resp == 'd' || resp == 'D')
                {
                    Peca p = new Dama(tabuleiro, cor);
                    if (FoiCapturada(p))
                    {
                        return(p);
                    }
                }
                else if (resp == 't' || resp == 'T')
                {
                    Peca p = new Torre(tabuleiro, cor);
                    if (FoiCapturada(p))
                    {
                        return(p);
                    }
                }
                else if (resp == 'b' || resp == 'B')
                {
                    Peca p = new Bispo(tabuleiro, cor);
                    if (FoiCapturada(p))
                    {
                        return(p);
                    }
                }
                else if (resp == 'c' || resp == 'C')
                {
                    Peca p = new Cavalo(tabuleiro, cor);
                    if (FoiCapturada(p))
                    {
                        return(p);
                    }
                }

                Console.WriteLine("Peça inexistente, tente novamente!");
                Console.WriteLine();
            }
            return(null);
        }
示例#12
0
        public void realizarJogada(Posicao origem, Posicao destino)
        {
            Peca pecaCapturada = executarMovimento(origem, destino);

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

            Peca peca = this.tabuleiro.peca(destino);

            // #jogadas especiais - promoção
            if (peca is Peao)
            {
                if ((peca.cor == Cor.Branca && destino.linha == 0) || (peca.cor == Cor.Preta && destino.linha == 7))
                {
                    peca = this.tabuleiro.retirarPeca(destino);
                    pecas.Remove(peca);
                    Peca dama = new Dama(this.tabuleiro, peca.cor);
                    this.tabuleiro.colocarPeca(dama, destino);
                    pecas.Add(dama);
                }
            }

            this.xeque = estaEmXeque(pecaAdversaria(jogadorAtual)) ? true : false;
            if (estaEmXequemate(pecaAdversaria(jogadorAtual)))
            {
                this.finalizada = true;
            }
            else
            {
                alternarJogador();
                this.turno++;
            }

            // #jogadas especiais - en passant
            if (peca is Peao && (destino.linha == origem.linha - 2 || destino.linha == origem.linha + 2))
            {
                capturaEspecial = peca;
            }
            else
            {
                capturaEspecial = null;
            }
        }
示例#13
0
        public void realizaJogada(Posicao origem, Posicao destino)
        {
            Peca pecaCapturada = executaMovimento(origem, destino);

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

            Peca p = tab.peca(destino);

            // #JogadaEspecial: 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 dama = new Dama(tab, p.cor);
                    tab.colocarPeca(dama, destino);
                    pecas.Add(dama);
                }
            }


            if (estahEmXeque(adversaria(jogadorAtual)))
            {
                xeque = true;
            }
            else
            {
                xeque = false;
            }

            if (testeXequeMate(adversaria(jogadorAtual)))
            {
                terminada = true;
            }
            else
            {
                turno++;
                mudaJogador();
            }
        }
        public void escolhaPromocao(string s)
        {
            pecaPromocao = tab.retirarPeca(posicaoPecaPromocao);
            pecas.Remove(pecaPromocao);
            Peca p;
            int  i = 0;

            if (int.TryParse(s, out i))
            {
                switch (i)
                {
                case 1:
                    p = new Dama(tab, pecaPromocao.cor);
                    break;

                case 2:
                    p = new Bispo(tab, pecaPromocao.cor);
                    break;

                case 3:
                    p = new Torre(tab, pecaPromocao.cor);
                    break;

                case 4:
                    p = new Cavalo(tab, pecaPromocao.cor);
                    break;

                default:
                    p = new Dama(tab, pecaPromocao.cor);
                    break;
                }
                tab.colocarPeca(p, posicaoPecaPromocao);
                pecas.Add(p);
                promocao = false;
            }
            else
            {
                p = new Dama(tab, pecaPromocao.cor);
                tab.colocarPeca(p, posicaoPecaPromocao);
                pecas.Add(p);
                promocao = false;
                throw new TabuleiroException("Valor digitado não é um número óu é inválido! Peça será uma Dama!");
            }
        }
示例#15
0
        public void checarPromocao()
        {
            if (promocao != null)
            {
                Console.WriteLine("Peao promovido! Escolha uma promocao:");
                Console.WriteLine("1 - Bispo.");
                Console.WriteLine("2 - Cavalo.");
                Console.WriteLine("3 - Dama.");
                Console.WriteLine("4 - Torre.");
                int     n       = 3;
                Posicao destino = promocao.pos;
                tab.retirarPeca(destino);
                pecas.Remove(promocao);
                Peca nova = new Dama(tab, promocao.cor);

                if (int.TryParse(Console.ReadLine(), out n))
                {
                    if (n == 1)
                    {
                        nova = new Bispo(tab, promocao.cor);
                    }
                    else if (n == 2)
                    {
                        nova = new Cavalo(tab, promocao.cor);
                    }
                    else if (n == 4)
                    {
                        nova = new Torre(tab, promocao.cor);
                    }
                }

                tab.adicionarPeca(nova, destino);
                pecas.Add(nova);
                promocao = null;
            }
        }
        //MÉTODO COM NIVEL MAIS ALTO DE ABSTRAÇÃO
        public void realizaJogada(Posicao origem, Posicao destino)
        {
            //REALIZA A JOGODA
            Peca pecaCapturada = executaMovimento(origem, destino);

            if (estaEmXeque(jogadorAtual))//teste
            {
                desfazMovimento(origem, destino, pecaCapturada);
                throw new TabuleiroException("Você não pode se colocar em Xeque!");
            }
            Peca p = tab.peca(destino);//armazena peça que foi movida

            //#JOGADA ESPECIAL PROMOCAO
            //verifica se a peça que efetuou a jogada é um peão
            if (p is Peao)
            {
                //verifica se o peão alcançou a linha máxima de sua cor
                if ((p.cor == Cor.Branca && destino.linha == 0) || (p.cor == Cor.Preta && destino.linha == 7))
                {
                    //remove a peça do tabuleiro
                    p = tab.retirarPeca(destino);
                    pecas.Remove(p);
                    //como forma de simplificar será colocado uma dama dentro do tabuleiro não haverá a escolha
                    Peca dama = new Dama(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
            {
                //INCREMENTA O TURNO DO JOGO
                turno++;
                //ALTERA A VEZ DE QUEM IRÁ JOGAR
                mudaJogador();
            }
            //#JOGADA ESPECIAL EN PASSANT

            //testa se a peça é um peão e se a mesma efetuou o movimento especial inicial de mover duas posições tanto para preta
            //como para branca
            if (p is Peao && (destino.linha == origem.linha - 2 || destino.linha == origem.linha + 2))
            {
                vulneravelEnPassant = p;
            }
            else
            {
                vulneravelEnPassant = null;
            }
        }
示例#17
0
        public void RealizaJogada(Posicao origem, Posicao destino, string opPromocao)
        {
            Peca pecaCapturada = executaMovimento(origem, destino);

            if (EstaEmXeque(jogadorAtual))
            {
                DesfazMovimento(origem, destino, pecaCapturada);
                throw new TabuleiroException("Não podes colocar-te em xeque!");
            }

            Peca p = tab.GetPeca(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);
                    if (opPromocao != null && opPromocao != "N")
                    {
                        switch (opPromocao)
                        {
                        case "D":
                        {
                            Peca dama = new Dama(p.Cor, tab);
                            tab.ColocarPeca(dama, destino);
                            Pecas.Add(dama);
                            break;
                        }

                        case "B":
                        {
                            Peca bispo = new Bispo(p.Cor, tab);
                            tab.ColocarPeca(bispo, destino);
                            Pecas.Add(bispo);
                            break;
                        }

                        case "C":
                        {
                            Peca cavalo = new Cavalo(p.Cor, tab);
                            tab.ColocarPeca(cavalo, destino);
                            Pecas.Add(cavalo);
                            break;
                        }

                        case "T":
                        {
                            Peca torre = new Torre(p.Cor, tab);
                            tab.ColocarPeca(torre, destino);
                            Pecas.Add(torre);
                            break;
                        }

                        default:
                        {
                            throw new TabuleiroException("Peça errada para Promocao!");
                        }
                        }
                    }
                }
            }

            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))
            {
                vulneravelEnPassant = p;
            }
            else
            {
                vulneravelEnPassant = null;
            }
        }
        /// <summary>
        /// metodo que executa a jogada passada pelo jogador e solicita confirmacoes de xeque e xequemate
        /// </summary>
        /// <param name="origem"></param>
        /// <param name="destino"></param>
        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.cor == Cor.Branca && destino.linha == 0) || (p.cor == Cor.Amarela && destino.linha == 7))
            {
                bool pergunta = false;
                while (!pergunta)
                {
                    Console.WriteLine("Deseja transformar seu Peao em qual Peca? D/C/T/B");
                    char resposta = char.Parse(Console.ReadLine());
                    if (resposta == 'd' || resposta == 'D')
                    {
                        p = tab.retirarPeca(destino);
                        pecas.Remove(p);
                        Peca dama = new Dama(tab, p.cor);
                        tab.colocarPeca(dama, destino);
                        pecas.Add(dama);
                        pergunta = true;
                    }
                    else if (resposta == 'c' || resposta == 'C')
                    {
                        p = tab.retirarPeca(destino);
                        pecas.Remove(p);
                        Peca cavalo = new Cavalo(tab, p.cor);
                        tab.colocarPeca(cavalo, destino);
                        pecas.Add(cavalo);
                        pergunta = true;
                    }
                    else if (resposta == 't' || resposta == 'T')
                    {
                        p = tab.retirarPeca(destino);
                        pecas.Remove(p);
                        Peca torre = new Torre(tab, p.cor);
                        tab.colocarPeca(torre, destino);
                        pecas.Add(torre);
                        pergunta = true;
                    }
                    else if (resposta == 'b' || resposta == 'B')
                    {
                        p = tab.retirarPeca(destino);
                        pecas.Remove(p);
                        Peca bispo = new Bispo(tab, p.cor);
                        tab.colocarPeca(bispo, destino);
                        pecas.Add(bispo);
                        pergunta = true;
                    }
                    else
                    {
                        Console.WriteLine("Opcao invalida");
                    }
                }
            }

            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)
            {
                vulneravelEnPassant = p;
            }
            else
            {
                vulneravelEnPassant = null;
            }
        }
示例#19
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);

            //jogada especial promocao
            if (p is Peao)
            {
                if ((p.Cor == Cor.Branca && destino.Linha == 0) || (p.Cor == Cor.Preta && destino.Linha == 7))
                {
                    bool result = false;
                    Console.WriteLine();
                    Console.Write("Qual peça deseja substituir seu Peão 1-Dama 2-Cavalo 3-Bispo 4-Torre: ");
                    int opcao = int.Parse(Console.ReadLine());

                    while (!result)
                    {
                        if (opcao < 1)
                        {
                            result = false;
                            Console.Write("Opção inválida! Informe uma das seguintes opções 1-Dama 2-Cavalo 3-Bispo 4-Torre: ");
                            opcao = int.Parse(Console.ReadLine());
                        }
                        else if (opcao > 4)
                        {
                            result = false;
                            Console.Write("Opção inválida! Informe uma das seguintes opções 1-Dama 2-Cavalo 3-Bispo 4-Torre: ");
                            opcao = int.Parse(Console.ReadLine());
                        }
                        else
                        {
                            result = true;
                        }
                    }
                    p = Tab.retirarPeca(destino);
                    Pecas.Remove(p);

                    switch (opcao)
                    {
                    case 1:
                        Peca dama = new Dama(p.Cor, Tab);
                        Tab.colocarPeca(dama, destino);
                        Pecas.Add(dama);
                        break;

                    case 2:
                        Peca cavalo = new Cavalo(p.Cor, Tab);
                        Tab.colocarPeca(cavalo, destino);
                        Pecas.Add(cavalo);
                        break;

                    case 3:
                        Peca bispo = new Bispo(p.Cor, Tab);
                        Tab.colocarPeca(bispo, destino);
                        Pecas.Add(bispo);
                        break;

                    case 4:
                        Peca torre = new Torre(p.Cor, Tab);
                        Tab.colocarPeca(torre, destino);
                        Pecas.Add(torre);
                        break;
                    }
                }
            }

            if (estaEmXeque(adversaria(JogadorAtual)))
            {
                Xeque = true;
            }
            else
            {
                Xeque = false;
            }
            if (testeXequemate(adversaria(JogadorAtual)))
            {
                Terminada = true;
            }
            else
            {
                Turno++;
                mudaJogador();
            }

            // jogada especial en passant
            if (p is Peao && (destino.Linha == origem.Linha - 2 || destino.Linha == origem.Linha + 2))
            {
                vuleravelEmPassant = p;
            }
            else
            {
                vuleravelEmPassant = null;
            }
        }
示例#20
0
        public void realizaJogada(Posicao origem, Posicao destino)
        {
            Peca pecaCapturada = executaMovimento(origem, destino);

            if (estaEmXeque(jogadorAtual))
            {
                desfazMvimento(origem, destino, pecaCapturada);
                throw new TabuleiroException("Você não pode se colocar em xeque.");
            }

            Peca p = tab.peca(destino);

            // 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);
                    bool foiPromovido = false;
                    Console.WriteLine("Informe a peça desejada (D, T, B, C): ");
                    while (foiPromovido == false)
                    {
                        string promovida = Console.ReadLine();
                        if (promovida == "C")
                        {
                            Peca cavalo = new Cavalo(tab, p.cor);
                            tab.colocarPeca(cavalo, destino);
                            pecas.Add(cavalo);
                            foiPromovido = true;
                        }
                        else if (promovida == "D")
                        {
                            Peca dama = new Dama(tab, p.cor);
                            tab.colocarPeca(dama, destino);
                            pecas.Add(dama);
                            foiPromovido = true;
                        }
                        else if (promovida == "T")
                        {
                            Peca torre = new Torre(tab, p.cor);
                            tab.colocarPeca(torre, destino);
                            pecas.Add(torre);
                            foiPromovido = true;
                        }
                        else if (promovida == "B")
                        {
                            Peca bispo = new Bispo(tab, p.cor);
                            tab.colocarPeca(bispo, destino);
                            pecas.Add(bispo);
                            foiPromovido = true;
                        }
                        else
                        {
                            Console.WriteLine("Peça informada não é válida");
                            Console.WriteLine("Informe a peça desejada (D, T, B, C): ");
                            promovida    = Console.ReadLine();
                            foiPromovido = false;
                        }
                    }
                }
            }

            if (estaEmXeque(adversaria(jogadorAtual)))
            {
                xeque = true;
            }
            else
            {
                xeque = false;
            }
            if (testeXequeMate(adversaria(jogadorAtual)))
            {
                terminada = true;
                Console.WriteLine("XEQUE MATE");
            }
            else
            {
                turno++;
                mudaJogador();
            }

            //enPassant
            if (p is Peao && (destino.linha == origem.linha - 2 || destino.linha == origem.linha + 2))
            {
                vulneravelEnPassant = p;
            }
            else
            {
                vulneravelEnPassant = null;
            }
        }
        /// <summary>
        /// Executa o movimento, confere se está em xeque, itera o turno, muda jogador.
        /// </summary>
        /// <param name="origem"></param>
        /// <param name="destino"></param>
        public void realizaJogada(Posicao origem, Posicao destino)
        {
            Peca pecaCapturada = executaMovimento(origem, destino);

            // Jogada não pode deixar jogador atual em xeque:
            if (estaEmXeque(jogadorAtual))
            {
                desfazMovimento(origem, destino, pecaCapturada);
                throw new TabuleiroException("Você não pode se colocar em xeque!");
            }

            Peca p = tab.peca(destino);

            // Jogada especial: En Passant:
            // Se for peão e [moveu duas casas para baixo (preta) ou moveu duas casas para cima (branca)]
            if (p is Peao)
            {
                if ((destino.Linha == origem.Linha - 2) || (destino.Linha == origem.Linha + 2))
                {
                    vulneravelEnPassant = p;
                }
            }
            // Se nessa jogada não há um peão en passant, anula variável novamente (jogada só pode ser executada imediatamente após a movimentação do peão.
            else
            {
                vulneravelEnPassant = null;
            }

            // 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 dama = new Dama(tab, p.cor);
                    tab.colocarPeca(dama, destino);
                    pecas.Add(dama);
                }
            }

            // Checando se adversário está em xeque:
            if (estaEmXeque(corAdversaria(jogadorAtual)))
            {
                xeque = true;
            }
            else
            {
                xeque = false;
            }

            // Se realizei a jogada e o adversário do jagador atual está em xeque-mate:
            if (testeXequeMate(corAdversaria(jogadorAtual)))
            {
                terminada = true;
            }
            else
            {
                // Itera turno:
                turno++;

                // Muda Jogador:
                if (jogadorAtual == Cor.Branca)
                {
                    jogadorAtual = Cor.Preta;
                }
                else
                {
                    jogadorAtual = Cor.Branca;
                }
            }
        }
示例#22
0
        //realiza as jogadas em turno
        public void realizaJogada(Posicao origem, Posicao destino)
        {
            Peca capturada = executaMovimento(origem, destino);

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

            Peca p = tab.peca(destino);

            // # JOGADA ESPECIAL PROMOÇÃO
            if (p is Peao)
            {
                if ((p.cor == Cor.Branco && destino.linha == 0) || (p.cor == Cor.Preto && destino.linha == 7))
                {
                    tab.retirarPeca(destino);
                    pecas.Remove(p);
                    Peca dama   = new Dama(tab, p.cor);
                    Peca cavalo = new Cavalo(tab, p.cor);
                    Peca bispo  = new Bispo(tab, p.cor);
                    Peca torre  = new Torre(tab, p.cor);
                    Console.WriteLine("Escolha a peça que substituira o Peão: ");
                    Console.WriteLine("DAMA(rainha) = 1");
                    Console.WriteLine("CAVALO       = 2");
                    Console.WriteLine("BISPO        = 3");
                    Console.WriteLine("TORRE        = 4");
                    Console.Write("Sua Escolha: ");
                    int num = int.Parse(Console.ReadLine());
                    switch (num)
                    {
                    case 1:
                        tab.colocarPeca(dama, destino);
                        pecas.Add(dama);
                        break;

                    case 2:
                        tab.colocarPeca(cavalo, destino);
                        pecas.Add(cavalo);
                        break;

                    case 3:
                        tab.colocarPeca(bispo, destino);
                        pecas.Add(bispo);
                        break;

                    case 4:
                        tab.colocarPeca(torre, destino);
                        pecas.Add(torre);
                        break;

                    default:
                        throw new TabuleiroException("Escolha incorreta!, PERDEU A PEÇA!!!");
                    }
                }
            }

            if (estaEmXeque(adversaria(jogadorAtual)))
            {
                xeque = true;
            }
            else
            {
                xeque = false;
            }
            if (testeXequeMate(adversaria(jogadorAtual)))
            {
                terminada = true;
            }
            else
            {
                turno++;
                mudarJogador();
            }
            // # JOGADA ESPECIAL EN PASSANT
            vulneravelEnPassant = (p is Peao && (destino.linha == origem.linha - 2 || destino.linha == origem.linha + 2)) ? p : 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);
                    Console.WriteLine();
                    Console.Write("Escolha entre Bispo, Cavalo, Dama e Torre (B/C/D/T): ");
                    Char pecaescolhida = char.Parse(Console.ReadLine());
                    if (pecaescolhida == 'B')
                    {
                        Peca peca = new Bispo(Tab, p.Cor);
                        Tab.ColocarPeca(peca, destino);
                        Pecas.Add(peca);
                    }
                    else if (pecaescolhida == 'C')
                    {
                        Peca peca = new Cavalo(Tab, p.Cor);
                        Tab.ColocarPeca(peca, destino);
                        Pecas.Add(peca);
                    }
                    else if (pecaescolhida == 'D')
                    {
                        Peca peca = new Dama(Tab, p.Cor);
                        Tab.ColocarPeca(peca, destino);
                        Pecas.Add(peca);
                    }
                    else if (pecaescolhida == 'T')
                    {
                        Peca peca = new Torre(Tab, p.Cor);
                        Tab.ColocarPeca(peca, destino);
                        Pecas.Add(peca);
                    }
                    else
                    {
                        throw new TabuleiroException("Peça inválida!");
                    }
                }
            }

            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))
            {
                VulneravelEnPassant = p;
            }
            else
            {
                VulneravelEnPassant = null;
            }
        }
示例#24
0
        public Peca executaMovimento(Posicao origem, Posicao destino)
        {
            Peca p = tab.retirarPeca(origem);

            p.incrementarQteMovimentos();
            Peca pecaCapturada = tab.retirarPeca(destino);

            tab.colocarPeca(p, destino);
            if (pecaCapturada != null)
            {
                capturadas.Add(pecaCapturada);
            }

            // #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 Dama(tab, p.cor);
                    tab.colocarPeca(dama, destino);
                    pecas.Add(dama);
                }
            }

            // #jogadaespecial roque pequeno
            if (p is Rei && destino.coluna == origem.coluna + 2)
            {
                Posicao origemT  = new Posicao(origem.linha, origem.coluna + 3);
                Posicao destinoT = new Posicao(origem.linha, origem.coluna + 1);
                Peca    T        = tab.retirarPeca(origemT);
                T.incrementarQteMovimentos();
                tab.colocarPeca(T, destinoT);
            }

            // #jogadaespecial roque grande
            if (p is Rei && destino.coluna == origem.coluna - 2)
            {
                Posicao origemT  = new Posicao(origem.linha, origem.coluna - 4);
                Posicao destinoT = new Posicao(origem.linha, origem.coluna - 1);
                Peca    T        = tab.retirarPeca(origemT);
                T.incrementarQteMovimentos();
                tab.colocarPeca(T, destinoT);
            }

            // #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.retirarPeca(posP);
                    capturadas.Add(pecaCapturada);
                }
            }

            return(pecaCapturada);
        }
示例#25
0
        //conta o turno da partida

        /* REGRA:
         * o usuário não pode mover uma peça de modo que seu rei fique em xeque
         */
        public void realizaJogada(Posicao origem, Posicao destino)
        {
            Peca pecaCapturada = executarMovimento(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);

            //---------Jogada Especial---------
            //------------Promoção--------------

            /* REGRA:
             * A jogada promoção é quando um peão atinge a linha final do tabuleiro adversário,
             * quando isso ocorre, ele pode ser transformar em outra peça a escolha do jogador,
             * mas geralmente a rainha é escolhida, por poder se locomover em qualquer direçã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);

                    //transformamos o peão automaticamente numa rainha, para simplificar a implementação
                    Peca dama = new Dama(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++;
                mudarJogador();
            }

            //---------Jogada Especial---------
            //-----------Em Passant------------
            if (p is Peao && (destino.linha == origem.linha - 2 || destino.linha == origem.linha + 2))
            {
                vulneravelEmPassant = p;
            }
            else
            {
                vulneravelEmPassant = null;
            }
        }
示例#26
0
        public void realizaJogada(Posicao origem, Posicao destino)
        {
            // Se executou um movimento e capturou uma peça
            Peca pecaCapturada = executaMovimento(origem, destino);

            // O jogador não se pode colocar em xeque. Então caso acontece, desfazer a jogada
            if (estaEmXeque(jogadorAtual))
            {
                desfazMovimento(origem, destino, pecaCapturada);

                throw new TabuleiroException("Você não pode se colocar em xeque. Aperte Enter para tentar novamente!");
            }

            // Pegando a peça que foi movida
            Peca p = tab.peca(destino);

            // Jogada especial: Promoção
            if (p is Peao)
            {
                // Se um peão branco chegou na linha 0 OU um peão preto chegou na linha 7
                if ((p.cor == Cor.Branca && destino.linha == 0) || (p.cor == Cor.Preta && destino.linha == 7))
                {
                    p = tab.retirarPeca(destino);
                    pecas.Remove(p);

                    // Usuário não terá opção de escolher peça. Peão será substituído por uma Rainha
                    Peca dama = new Dama(tab, p.cor);

                    // Colocando Rainha no lugar do Peão
                    tab.colocarPeca(dama, destino);
                    pecas.Add(dama);
                }
            }

            // Se o jogador adversário que estiver em xeque, jogada é permitida
            if (estaEmXeque(adversaria(jogadorAtual)))
            {
                xeque = true;
            }
            else
            {
                xeque = false;
            }

            // Se após jogada, o adversário estiver em xequemate
            if (testeXequemate(adversaria(jogadorAtual)))
            {
                // Partida termina!
                terminada = true;
            }
            else
            {
                // Incrementa turno pra mudar jogador
                turno++;
                mudaJogador();
            }


            // Jogada Especial: En Passant
            // Se o Peão andou duas linhas a mais ou a menos pela primeira vez
            if (p is Peao && (destino.linha == origem.linha - 2 || destino.linha == origem.linha + 2))
            {
                // Peça está vulnerável
                vulneravelEnPassant = p;
            }
            else
            {
                // Não tem peça vulnerável
                vulneravelEnPassant = null;
            }
        }
        public void realizarJogada(Posicao origem, Posicao destino)
        {
            Peca pecaCapturada = executarMovimento(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.Branco && destino.Linha == 0) || (p.cor == Cor.Preto && destino.Linha == 7))
                {
                    p = tab.retirarPeca(destino);
                    pecas.Remove(p);

                    ConsoleColor aux = Console.ForegroundColor;
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.WriteLine();
                    Console.WriteLine("#--- PROMOÇÃO! ---#");
                    Console.WriteLine("Opções de promoção:");
                    Console.WriteLine(" - Dama[D]\n - Torre[T]\n - Bispo[B]\n - Cavalo[C]");
                    Console.ForegroundColor = aux;
                    Console.Write("Digite o caractere da opção escolhida: ");

                    char escolha = char.Parse(Console.ReadLine());

                    switch (escolha)
                    {
                    //DAMA
                    case 'D':
                        Peca dama = new Dama(tab, p.cor);
                        tab.colocarPeca(destino, dama);
                        pecas.Add(dama);
                        break;

                    case 'd':
                        Peca dama1 = new Dama(tab, p.cor);
                        tab.colocarPeca(destino, dama1);
                        pecas.Add(dama1);
                        break;

                    //TORRE
                    case 'T':
                        Peca torre = new Torre(tab, p.cor);
                        tab.colocarPeca(destino, torre);
                        pecas.Add(torre);
                        break;

                    case 't':
                        Peca torre1 = new Torre(tab, p.cor);
                        tab.colocarPeca(destino, torre1);
                        pecas.Add(torre1);
                        break;

                    //BISPO
                    case 'B':
                        Peca bispo = new Bispo(tab, p.cor);
                        tab.colocarPeca(destino, bispo);
                        pecas.Add(bispo);
                        break;

                    case 'b':
                        Peca bispo1 = new Bispo(tab, p.cor);
                        tab.colocarPeca(destino, bispo1);
                        pecas.Add(bispo1);
                        break;

                    //CAVALO
                    case 'C':
                        Peca cavalo = new Cavalo(tab, p.cor);
                        tab.colocarPeca(destino, cavalo);
                        pecas.Add(cavalo);
                        break;

                    case 'c':
                        Peca cavalo1 = new Cavalo(tab, p.cor);
                        tab.colocarPeca(destino, cavalo1);
                        pecas.Add(cavalo1);
                        break;
                    }
                }
            }

            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))
            {
                vulneravelEnPassant = p;
            }
            else
            {
                vulneravelEnPassant = null;
            }
        }