Beispiel #1
0
        public void RealizaJogada(Posicao origem, Posicao destino)
        {
            Peca pecaCapturada = this.ExecutaMovimento(origem, destino);

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

            CorEnum adversario = Adversario(JogadorAtual);

            if (EstaEmXeque(adversario))
            {
                this.PartidaEmXeque = true;
            }
            else
            {
                this.PartidaEmXeque = false;
            }

            if (this.VerificaXequeMate(adversario))
            {
                this._terminada = true;
            }
            else
            {
                this._turno++;
                this.MudaJogador();
            }
        }
Beispiel #2
0
 public Peca(Tabuleiro tabuleiro, CorEnum cor)
 {
     this.Posicao              = null;
     this.Tabuleiro            = tabuleiro;
     this.Cor                  = cor;
     this.QuantidadeMovimentos = 0;
 }
Beispiel #3
0
 public bool VerificaXequeMate(CorEnum cor)
 {
     if (!this.EstaEmXeque(cor))
     {
         return(false);
     }
     foreach (Peca x in this.PecasEmJogo(cor))
     {
         bool[,] mat = x.MovimentosPossiveis();
         for (int i = 0; i < this._tabuleiro.Linhas; i++)
         {
             for (int j = 0; j < this._tabuleiro.Colunas; j++)
             {
                 if (mat[i, j])
                 {
                     Posicao origem        = x.Posicao;
                     Posicao destino       = new Posicao(i, j);
                     Peca    pecaCapturada = this.ExecutaMovimento(origem, destino);
                     bool    testeXeque    = this.EstaEmXeque(cor);
                     this.DesfazMovimento(origem, destino, pecaCapturada);
                     if (!testeXeque)
                     {
                         return(false);
                     }
                 }
             }
         }
     }
     return(true);
 }
Beispiel #4
0
 public PartidaDeXadrez()
 {
     this._tabuleiro    = new Tabuleiro(8, 8);
     this._turno        = 1;
     this._jogadorAtual = CorEnum.Branca;
     this._terminada    = false;
     PartidaEmXeque     = false;
     Pecas      = new HashSet <Peca>();
     Capturadas = new HashSet <Peca>();
     ColocarPecas();
 }
Beispiel #5
0
 private Peca GetRei(CorEnum cor)
 {
     foreach (Peca x in PecasEmJogo(cor))
     {
         if (x is Rei)
         {
             return(x);
         }
     }
     return(null);
 }
Beispiel #6
0
 private void MudaJogador()
 {
     if (this._jogadorAtual == CorEnum.Branca)
     {
         this._jogadorAtual = CorEnum.Preta;
     }
     else
     {
         this._jogadorAtual = CorEnum.Branca;
     }
 }
Beispiel #7
0
        public HashSet <Peca> PecasEmJogo(CorEnum cor)
        {
            HashSet <Peca> aux = new HashSet <Peca>();

            foreach (Peca x in this.Pecas)
            {
                if (x.Cor == cor)
                {
                    aux.Add(x);
                }
            }
            aux.ExceptWith(this.PecasCapturadas(cor));
            return(aux);
        }
Beispiel #8
0
        public HashSet <Peca> PecasCapturadas(CorEnum cor)
        {
            HashSet <Peca> aux = new HashSet <Peca>();

            foreach (Peca x in this.Capturadas)
            {
                if (x.Cor == cor)
                {
                    aux.Add(x);
                }
            }

            return(aux);
        }
Beispiel #9
0
        public bool EstaEmXeque(CorEnum cor)
        {
            Peca rei = GetRei(cor);

            if (rei == null)
            {
                throw new TabuleiroException($"Não tem rei da cor {cor} no tabuleiro!");
            }

            foreach (Peca x in PecasEmJogo(Adversario(cor)))
            {
                bool[,] matriz = x.MovimentosPossiveis();
                if (matriz[rei.Posicao.Linha, rei.Posicao.Coluna])
                {
                    return(true);
                }
            }

            return(false);
        }
Beispiel #10
0
 private CorEnum Adversario(CorEnum cor)
 {
     return(cor == CorEnum.Branca ? CorEnum.Preta : CorEnum.Branca);
 }
Beispiel #11
0
 public Rei(Tabuleiro.Tabuleiro tabuleiro, CorEnum cor) : base(tabuleiro, cor)
 {
 }
Beispiel #12
0
 public Dama(Tabuleiro.Tabuleiro tabuleiro, CorEnum cor) : base(tabuleiro, cor)
 {
 }
Beispiel #13
0
 public Cavalo(Tabuleiro.Tabuleiro tabuleiro, CorEnum cor) : base(tabuleiro, cor)
 {
 }
Beispiel #14
0
 public Torre(Tabuleiro.Tabuleiro tabuleiro, CorEnum cor) : base(tabuleiro, cor)
 {
 }
Beispiel #15
0
 public Peao(Tabuleiro.Tabuleiro tabuleiro, CorEnum cor) : base(tabuleiro, cor)
 {
 }
Beispiel #16
0
 public Bispo(Tabuleiro.Tabuleiro tabuleiro, CorEnum cor) : base(tabuleiro, cor)
 {
 }