Beispiel #1
0
 public bool Jogar(Movimento movimento)
 {
     if (movimento.Elemento.Saude <= 0)
     {
         return(false);
     }
     if (movimento.TipoMovimento == Movimento.EnumTipoMovimento.Mover)
     {
         //O destino da movimentação da peça deve estar vazio.
         if (this.Tabuleiro.ObterElemento(movimento.posicao) == null)
         {
             if (VerificarAlcanceMovimento(movimento) == true)
             {
                 this.Tabuleiro.MoverElemento(movimento);
                 return(true);
             }
         }
     }
     else if (movimento.TipoMovimento == Movimento.EnumTipoMovimento.Atacar)
     {
         //O destino do ataque deve estar ocupado.
         if (this.Tabuleiro.ObterElemento(movimento.posicao) != null)
         {
             //Verificar se é possível atacar
             if (VerificarAlcanceAtaque(movimento) == true)
             {
                 var oponente = this.Tabuleiro.ObterElemento(movimento.posicao);
                 oponente.Saude -= movimento.Elemento.Ataque;
                 if (oponente.Saude < 0)
                 {
                     oponente.Saude = 0;
                     //Caso tenha matado um elemento verificar quantos
                     //elementos vivos o oponente ainda tem.
                     if (oponente.Exercito.ElementosVivos.Count == 0)
                     {
                         //Caso seja 0 a batalha terminou.
                         this.Estado = EstadoBatalhaEnum.Finalizado;
                         //O vencedor é o autor do movimento.
                         this.Vencedor = movimento.Autor;
                     }
                 }
                 return(true);
             }
         }
     }
     return(false);
 }
Beispiel #2
0
        public bool VerificarAlcanceMovimento(Movimento movimento)
        {
            //Posição Atual
            Posicao p = Tabuleiro.ObterPosicao(movimento.Elemento);
            //Diferença entre a posição Atual e a nova.
            int movLargura = Math.Abs(p.Largura - movimento.posicao.Largura);
            int movAltura  = Math.Abs(p.Altura - movimento.posicao.Altura);

            //Se for um movimento de ataque comparar com o alcançe do elemento
            //para ataque. Caso seja um movimento comparar alcance para movimentação
            int alcance = (movimento.TipoMovimento == Movimento.EnumTipoMovimento.Atacar) ?
                          movimento.Elemento.AlcanceAtaque : movimento.Elemento.AlcanceMovimento;

            if ((movAltura > 0 && movAltura <= alcance) ||
                (movLargura > 0 && movLargura <= alcance))
            {
                return(true);
            }


            return(false);
        }
Beispiel #3
0
 internal void MoverElemento(Movimento movimento)
 {
     //this.Casas[ObterPosicao(movimento.Elemento)] = null;
     //this.Casas[movimento.posicao] = movimento.Elemento;
     movimento.Elemento.posicao = movimento.posicao;
 }
Beispiel #4
0
 public bool VerificarAlcanceAtaque(Movimento movimento)
 {
     return(this.VerificarAlcanceMovimento(movimento));
 }