Beispiel #1
0
        public bool JogarMovimento(Movimento movimento)
        {
            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 (this.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);

                        var oponenteMorreu = this.Tabuleiro.AtacarElemento(movimento.Elemento, oponente);

                        if (oponenteMorreu)
                        {
                            //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));
 }