/// <summary>
        /// Este método é uma factory para a Abstract Factory.
        /// Deste modo, não existirá dependência do sistema com as
        /// Factories concretas.
        /// </summary>
        /// <param name="nacionalidade"></param>
        /// <returns></returns>
        public static AbstractFactoryExercito CriarFactoryExercito(Nacao nacionalidade)
        {
            AbstractFactoryExercito factory = null;

            if (nacionalidade == Nacao.Persia)
            {
                factory = null;
            }
            else if (Nacao.Egito == nacionalidade)
            {
                factory = new Factory.FactoryExercitoPersa();
            }
            else if (Nacao.India == nacionalidade)
            {
                factory = new Factory.FactoryExercitoIndiano();
            }
            return(factory);
        }
Ejemplo n.º 2
0
        public void IniciarJogo(Exercito exercito1, Exercito exercito2)
        {
            Contract.Requires <ArgumentException>(exercito1.Nacao > 0);
            Contract.Requires <ArgumentException>(exercito2.Nacao > 0);

            for (int i = 0; i < this.Largura; i++)
            {
                for (int j = 0; j < this.Altura; j++)
                {
                    //Ultima ou primeira fileira?
                    Exercito           exercito             = (j == 0 || j == 1) ? exercito1 : exercito2;
                    ElementoDoExercito elemento             = null;
                    Factory.AbstractFactoryExercito factory =
                        Factory.AbstractFactoryExercito.CriarFactoryExercito(exercito.Nacao);

                    if (j == 0 || j == this.Altura - 1)
                    {
                        //Cria arqueiro nas posições pares e Cavaleiros nas posições impáres.
                        elemento =
                            (i % 2 == 0)?
                            (ElementoDoExercito)factory.CriarArqueiro():
                            (ElementoDoExercito)factory.CriarCavalaria();
                    }
                    else if (j == 1 || j == this.Altura - 2)
                    {
                        //Cria guerreiros
                        elemento = (ElementoDoExercito)factory.CriarGuerreiro();
                    }

                    //Se o elemento tiver sido instanciado criará o elemento no tabuleiro.
                    if (elemento != null)
                    {
                        exercito.Elementos.Add(elemento);
                        elemento.posicao   = new Posicao(i, j);
                        elemento.Tabuleiro = this;
                    }
                }
            }
        }