Ejemplo n.º 1
0
 public override void Update(GameBoard board)
 {
 }
Ejemplo n.º 2
0
 public GameEngine(Position size)
 {
     m_board  = new GameBoard(11, 12, size);
     m_status = enGameStatus.Live;
 }
Ejemplo n.º 3
0
 public abstract void Update(GameBoard board);
Ejemplo n.º 4
0
        public override void Update(GameBoard board)
        {
            double range2 = GameUtils.Sqr(m_range * board.Grid.Size);

            Position tower_position = board.Grid.GetCellCenter(this.Position);

            bool shots_fired = false;

            LinkedList <GameAgent> dead_targets = new LinkedList <GameAgent>();

            //check existing targets
            foreach (GameAgent target in m_targets)
            {
                if (target.isAlive)
                {
                    double temp = (target.Position - tower_position).Length2;

                    if (temp < range2)
                    {
                        target.DoDamage(m_damage, enDamageType.Physical);
                        shots_fired = true;
                        break;
                    }
                }
                else
                {
                    dead_targets.AddLast(target);
                }
            }

            foreach (GameAgent t in dead_targets)
            {
                m_targets.Remove(t);
            }


            //find closest target and shot it
            if (shots_fired == false)
            {
                int    closest_agent      = -1;
                double closest_agent_dist = Double.PositiveInfinity;

                for (int i = 0; i < board.Agents.Count; i++)
                {
                    if (board.Agents[i].isAlive)
                    {
                        double temp = (board.Agents[i].Position - tower_position).Length2;

                        if (temp < range2 && temp < closest_agent_dist)
                        {
                            closest_agent_dist = temp;
                            closest_agent      = i;
                        }
                    }
                }

                if (closest_agent >= 0)
                {
                    GameAgent agent = board.Agents[closest_agent];

                    agent.DoDamage(m_damage, enDamageType.Physical);
                    // board.Agents[closest_agent]
                    m_targets.AddLast(agent);
                }
            }
        }