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);
                    char escolha  = TelaXadrez.escolherPeca();
                    Peca novaPeca = escolha switch
                    {
                        't' => new Torre(tab, p.cor),
                        'c' => new Cavalo(tab, p.cor),
                        'b' => new Bispo(tab, p.cor),
                        'd' => new Dama(tab, p.cor),
                        _ => throw new TabuleiroException("Peça invalida!"),
                    };
                    tab.colocarPeca(novaPeca, destino);
                    pecas.Add(novaPeca);

                    /*
                     * 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;
            }
        }
Esempio n. 2
0
        public bool podeMover(Posicao pos)
        {
            Peca p = tabu.peca(pos);

            return(p == null || p.cor != cor);
        }
Esempio n. 3
0
        public bool podeMovimentar(Posicao posicao)
        {
            Peca pecaNoTabuleiro = _tabuleiro.peca(posicao);

            return(pecaNoTabuleiro == null);
        }
 public void colocarNovaPeca(char coluna, int linha, Peca peca)
 {
     tab.colocarPeca(peca, new PosicaoXadrez(coluna, linha).ToPosicao());
     pecas.Add(peca);
 }
Esempio n. 5
0
        private bool PodeMover(Posicao pos)
        {
            Peca p = Tab.Peca(pos);

            return(p == null || p.Cor != Cor);
        }
        /// <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;
                }
            }
        }
Esempio n. 7
0
        private bool PodeMover(Posicao pos)
        {
            Peca p = Tab._peca(pos);

            return(p == null || p.CorPeca != this.CorPeca);
        }
Esempio n. 8
0
        private bool podeMover(Posicao pos)
        {
            Peca p = Tabuleiro.peca(pos);

            return(p == null || p.Cor != Cor);
        }
Esempio n. 9
0
        private bool PodeMover(Posicao posicao)
        {
            Peca Peca = Tabuleiro.Peca(posicao);

            return(Peca == null || Peca.Cor != Cor);
        }
Esempio n. 10
0
 // metodo auxiliar/ melhorar o colocarPeças
 public void colocarNovaPeca(char coluna, int linha, Peca peca)
 {
     tab.colocarPeca(peca, new PosicaoXadrez(coluna, linha).toPosicao());
     // guardando as peças no conjunto pecas.
     pecas.Add(peca);
 }
Esempio n. 11
0
        private bool existeInimigo(Posicao pos)
        {
            Peca p = Tabuleiro.peca(pos);

            return(p != null && p.Cor != Cor); // Tira dúvida com o Fred
        }
Esempio n. 12
0
        private bool PodeMover(Posicao pos)
        {
            Peca peca = Tab.GetPeca(pos);

            return(peca == null || peca.Cor != Cor);
        }
Esempio n. 13
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 passant
            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();
            }



            // # Joga Especial en passant

            if (p is Peao && (destino.linha == origem.linha - 2 || destino.linha == origem.linha + 2))
            {
                vulneravelEmPassant = p;
            }
            else
            {
                vulneravelEmPassant = null;
            }
        }
Esempio n. 14
0
        private bool podeMover(Posicao posicao)
        {
            Peca peca = base.tabuleiro.peca(posicao);

            return(peca == null || peca.cor != base.cor);
        }
Esempio n. 15
0
        private bool posicaoInimigo(Posicao pos)
        {
            Peca p = tabuleiro.peca(pos);

            return(p != null && p.cor != this.cor);
        }
Esempio n. 16
0
 private bool podeMover(Posicao posicao)
 {
     Peca peca = tabuleiro.peca(posicao);
Esempio n. 17
0
 public void colocarNovaPeca(int linha, char coluna, Peca peca)
 {
     tab.colocarPeca(peca, new PosicaoXadrez(linha, coluna).toPosicao());
     pecas.Add(peca);
 }
Esempio n. 18
0
        public bool PodeMover(Posicao pos)
        {
            Peca p = Tab.QualPeca(pos);

            return(p == null || p.Cor != this.Cor);
        }
Esempio n. 19
0
        private bool TesteTorreParaRoque(Posicao pos)
        {
            Peca p = tab.peca(pos);

            return(p != null && p is Torre && p.Cor == Cor && p.QtdMovimentos == 0);
        }
Esempio n. 20
0
        private bool TesteTorreParaRoque(Posicao pos)
        {
            Peca p = Tab.QualPeca(pos);

            return(p != null && p is Torre && p.Cor == this.Cor && p.QteDeMovimentos == 0);
        }
Esempio n. 21
0
        private bool testeTorreParaRoque(Posicao pos)
        {
            Peca p = tab.peca(pos);

            return(p != null && p is Torre && p.cor == cor && p.qteMovimentos == 0);
        }
Esempio n. 22
0
        private bool ExisteInimigo(Posicao pos)
        {
            Peca p = Tab.Value.Peca(pos);

            return(p != null && p.Cor.Value != Cor.Value);
        }
Esempio n. 23
0
        private bool podeMover(Posicao pos)
        {
            Peca p = tab.peca(pos);

            return(p == null || p.cor != cor);
        }
Esempio n. 24
0
 public void colocaNovaPeca(char coluna, int linha, Peca p)
 {
     tab.ColocarPeca(p, new PosicaoXadrez(coluna, linha).toPosicao());
     pecas.Add(p);
 }
Esempio n. 25
0
        private bool existeInimigo(Posicao pos)
        {
            Peca p = tab.peca(pos);

            return(p != null && p.cor != cor);
        }
Esempio n. 26
0
        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;
            }
        }
Esempio n. 27
0
        public override bool[,] movimentosPossiveis()
        {
            //posição teste. implementar entrada depois
            Posicao pos        = new Posicao(0, 0);
            Posicao posInicial = new Posicao(0, 0);

            // recebe todas as linhas e colunas do tabuleiro em verdadeiro ou falso
            bool[,] matriz = new bool[_tabuleiro.linhas, _tabuleiro.colunas];

            // instacia uma peca auxiliar que recebe a peça do tabuleiro
            Peca pecaNoTabuleiro = _tabuleiro.peca(_posicao);


            //primeiro movimento
            if (pecaNoTabuleiro._cor == Cor.Branca && pecaNoTabuleiro._qtdMovimentos == 0)
            {
                posInicial.setarValores(_posicao._linha + 2, _posicao._coluna);
                pos.setarValores(_posicao._linha + 1, _posicao._coluna);
            }
            else if (pecaNoTabuleiro._cor == Cor.Preta && _qtdMovimentos == 0)
            {
                posInicial.setarValores(_posicao._linha - 2, _posicao._coluna);
                pos.setarValores(_posicao._linha - 1, _posicao._coluna);
            }
            if (_tabuleiro.posicaoPermitida(pos) && podeMovimentar(pos))
            {
                matriz[pos._linha, pos._coluna] = true;
                matriz[posInicial._linha, posInicial._coluna] = true;
            }
            // verificar acima
            if (pecaNoTabuleiro._cor == Cor.Branca)
            {
                pos.setarValores(_posicao._linha + 1, _posicao._coluna);
            }
            else if (pecaNoTabuleiro._cor == Cor.Preta)
            {
                pos.setarValores(_posicao._linha - 1, _posicao._coluna);
            }

            if (_tabuleiro.posicaoPermitida(pos) && podeMovimentar(pos))
            {
                matriz[pos._linha, pos._coluna] = true;
            }

            // verificar acima direita
            if (pecaNoTabuleiro._cor == Cor.Branca)
            {
                pos.setarValores(_posicao._linha + 1, _posicao._coluna + 1);
            }
            else if (pecaNoTabuleiro._cor == Cor.Preta)
            {
                pos.setarValores(_posicao._linha - 1, _posicao._coluna - 1);
            }

            if (_tabuleiro.posicaoPermitida(pos) && adversario(pos))
            {
                matriz[pos._linha, pos._coluna] = true;
            }

            // verificar acima esquerda
            if (pecaNoTabuleiro._cor == Cor.Branca)
            {
                pos.setarValores(_posicao._linha + 1, _posicao._coluna - 1);
            }
            else if (pecaNoTabuleiro._cor == Cor.Preta)
            {
                pos.setarValores(_posicao._linha - 1, _posicao._coluna + 1);
            }

            if (_tabuleiro.posicaoPermitida(pos) && adversario(pos))
            {
                matriz[pos._linha, pos._coluna] = true;
            }

            return(matriz);
        }
Esempio n. 28
0
        private bool podeMover(Posicao pos)
        {
            Peca p = tab.peca(pos);

            return(p == null || p.cor != cor);//retornará se o destino é nullo ou se o destino possui peça adversária
        }
Esempio n. 29
0
        private bool adversario(Posicao posicao)
        {
            Peca pAdversaria = _tabuleiro.peca(posicao);

            return(pAdversaria != null && pAdversaria._cor != _cor);
        }
Esempio n. 30
0
 public PartidaDeXadrez() : base()
 {
     vulneravelEnPassant = null;
     colocarPecas();
 }