コード例 #1
0
 /// <summary>
 /// Método privado que realiza a infeção de um agente.
 /// </summary>
 private void Infect()
 {
     // Agente passa a ser zombie e a ter movimento controlado por IA
     Kind         = AgentKind.Zombie;
     Movement     = AgentMovement.AI;
     moveBehavior = new AIMovement(AgentKind.Human, false, world);
 }
コード例 #2
0
        /// <summary>
        /// Método construtor, instancia um novo agente.
        /// </summary>
        /// <param name="id">ID único do agente.</param>
        /// <param name="pos">Posição inicial do agente.</param>
        /// <param name="kind">
        /// Género inicial do agente (zombie ou humano).
        /// </param>
        /// <param name="movement">Tipo de movimento inicial do agente (por
        /// "inteligência artificial" ou controlado pelo jogador).
        /// </param>
        /// <param name="world">Referência ao mundo de simulação.</param>
        public Agent(int id, Coord pos,
                     AgentKind kind, AgentMovement movement, World world)
        {
            // Género dos agentes considerados inimigos do agente a ser criado
            AgentKind enemy;
            // Indica se o agente a ser criado deve fugir (true) ou não (false)
            // dos inimigos
            bool runaway;

            // Guardar as referências passadas no construtor
            ID         = id;
            Pos        = pos;
            Kind       = kind;
            Movement   = movement;
            this.world = world;

            // Adicionar o agente ao mundo de simulação
            world.AddAgent(this);

            // Definir género dos inimigos e se o agente deve ou não fugir
            // deles, dependendo do género de agente a ser criado
            switch (kind)
            {
            case AgentKind.Zombie:
                // Se agente for zombie os seus inimigos são humanos e
                // não deve fugir deles (antes pelo contrário)
                enemy   = AgentKind.Human;
                runaway = false;
                break;

            case AgentKind.Human:
                // Se agente for humando os seus inimigos são zombies e
                // deve fugir deles
                enemy   = AgentKind.Zombie;
                runaway = true;
                break;

            default:
                // Lançar uma exceção caso seja um género desconhecido de
                // agente
                throw new InvalidEnumArgumentException(
                          "Unknown agent kind");
            }

            // Definir classe concreta que define o movimento dos agentes
            switch (movement)
            {
            case AgentMovement.Player:
                // Movimento controlado pelo jogador
                moveBehavior = new PlayerMovement(world);
                break;

            case AgentMovement.AI:
                // Movimento controlado por IA
                moveBehavior = new AIMovement(enemy, runaway, world);
                break;

            default:
                // Movimento desconhecido, lançar exceção
                throw new InvalidEnumArgumentException(
                          "Unknown movement type");
            }
        }