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); }
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); }
internal void MoverElemento(Movimento movimento) { //this.Casas[ObterPosicao(movimento.Elemento)] = null; //this.Casas[movimento.posicao] = movimento.Elemento; movimento.Elemento.posicao = movimento.posicao; }
public bool VerificarAlcanceAtaque(Movimento movimento) { return(this.VerificarAlcanceMovimento(movimento)); }