示例#1
0
        public Peca Promocao(char c, Peca p)
        {
            Peca aux;

            switch (c)
            {
            case 'd':
                aux = new Dama(p.Cor, Tab);
                return(aux);

            case 'D':
                aux = new Dama(p.Cor, Tab);
                return(aux);

            case 'b':
                aux = new Bispo(p.Cor, Tab);
                return(aux);

            case 'B':
                aux = new Bispo(p.Cor, Tab);
                return(aux);

            case 'c':
                aux = new Cavalo(p.Cor, Tab);
                return(aux);

            case 'C':
                aux = new Cavalo(p.Cor, Tab);
                return(aux);

            case 't':
                aux = new Torre(p.Cor, Tab);
                return(aux);

            case 'T':
                aux = new Torre(p.Cor, Tab);
                return(aux);

            default:
                throw new TabuleiroException("O jogo quebrou por favo reinicie!");
            }
        }
        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 se pode colocar me xeque!");
            }

            //Jogada especial Promoção
            Peca p = tab.peca(destino);

            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.Write("Entre com o valor  para o tipo de peça desejado: 1-cavalo, 2,bispo , 3-torre e 4-dama: ");
                    int n = int.Parse(Console.ReadLine());
                    switch (n)
                    {
                    case 1:
                        Peca Cavalo = new Cavalo(tab, p.Cor);
                        tab.colocarPeca(Cavalo, destino);
                        pecas.Add(Cavalo);
                        break;

                    case 2:
                        Peca Bispo = new Bispo(tab, p.Cor);
                        tab.colocarPeca(Bispo, destino);
                        pecas.Add(Bispo);
                        break;

                    case 3:
                        Peca Torre = new Torre(tab, p.Cor);
                        tab.colocarPeca(Torre, destino);
                        pecas.Add(Torre);
                        break;

                    case 4:
                        Peca Dama = new Dama(tab, p.Cor);
                        tab.colocarPeca(Dama, destino);
                        pecas.Add(Dama);
                        break;
                    }
                }
            }

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

            if (testeXequeMate(corAdversaria(jogadorAtual)))
            {
                terminada = true;
            }
            else
            {
                turno++;
                mudaJogador();
            }


            //Jogada especial enpassant
            if (p is Peao && (destino.Linha == origem.Linha - 2 || destino.Linha == origem.Linha + 2))
            {
                vulneravelEnPassant = p;
            }
            else
            {
                vulneravelEnPassant = 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);

            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);
                    while (true)
                    {
                        Console.Clear();
                        Console.WriteLine("Para qual peça você deseja promover o peão?");
                        Console.WriteLine("(A) Bispo");
                        Console.WriteLine("(B) Cavalo");
                        Console.WriteLine("(C) Rainha");
                        Console.WriteLine("(D) Torre");
                        char pecaEscolhida = char.Parse(Console.ReadLine());
                        if (pecaEscolhida == 'A' || pecaEscolhida == 'a')
                        {
                            Peca bispo = new Bispo(Tab, p.Cor);
                            Tab.ColocarPeca(bispo, destino);
                            Pecas.Add(bispo);
                            break;
                        }
                        else if (pecaEscolhida == 'B' || pecaEscolhida == 'b')
                        {
                            Peca cavalo = new Cavalo(Tab, p.Cor);
                            Tab.ColocarPeca(cavalo, destino);
                            Pecas.Add(cavalo);
                            break;
                        }
                        else if (pecaEscolhida == 'C' || pecaEscolhida == 'c')
                        {
                            Peca dama = new Dama(Tab, p.Cor);
                            Tab.ColocarPeca(dama, destino);
                            Pecas.Add(dama);
                            break;
                        }
                        else if (pecaEscolhida == 'D' || pecaEscolhida == 'd')
                        {
                            Peca torre = new Torre(Tab, p.Cor);
                            Tab.ColocarPeca(torre, destino);
                            Pecas.Add(torre);
                            break;
                        }
                        else
                        {
                            Console.WriteLine("Opção inválida!");
                            Console.ReadLine();
                        }
                    }
                }
            }
            if (EstaEmXeque(Adversaria(JogadorAtual)))
            {
                Xeque = true;
            }
            else
            {
                Xeque = false;
            }
            if (TesteXequeMate(Adversaria(JogadorAtual)))
            {
                Terminada = true;
            }
            else
            {
                Turno++;
                MudaJogador();
            }
            //Jogada En Passant
            if (p is Peao && (destino.Linha == origem.Linha - 2 || destino.Linha == origem.Linha + 2))
            {
                VulneravelEnPassant = p;
            }
            else
            {
                VulneravelEnPassant = null;
            }
        }