コード例 #1
0
 public void Die()
 {
     queen.Die();
     foreach (Worker worker in workers)
     {
         worker.Die();
     }
     foreach (Egg egg in eggs)
     {
         egg.Die();
     }
 }
コード例 #2
0
        public override void Live()
        {
            tick++;
            if (charging)
            {
                if (MyColony.FoodStore > 1000)
                {
                    EatFromStore(45, MotherNature.DigestionFor.Strength);
                }
                charging = false;
            }
            else
            {
                if (sortirImpasse)
                {
                    if ((tick % 10) == 0)
                    {
                        Random r = new Random();
                        goToPosition = new Point(X + r.Next(-100, 100), Y + r.Next(-100, 100));
                    }
                    Speed.X = goToPosition.X - X;
                    Speed.Y = goToPosition.Y - Y;
                    Move();
                    if ((tick % 25) == 0)
                    {
                        if (BlockedBy == null)
                        {
                            sortirImpasse = false;
                        }
                    }
                }
                bool  attackQueen = false;
                Queen qu          = null;
                foreach (Queen queen in listOfQueen)
                {
                    int distance = Math.Abs(Convert.ToInt32(queen.X) - Convert.ToInt32(X)) + Math.Abs(Convert.ToInt32(queen.Y) - Convert.ToInt32(Y));
                    if (distance < 100)
                    {
                        qu          = queen;
                        attackQueen = true;
                    }
                }
                if (attackQueen)
                {
                    int distance = Math.Abs(Convert.ToInt32(qu.X) - Convert.ToInt32(X)) + Math.Abs(Convert.ToInt32(qu.Y) - Convert.ToInt32(Y));
                    if (distance > 30)
                    {
                        Logger.WriteLogFile("ATTAKING A QUEEN! ( RED COLONY )");
                        Speed.X = qu.X - X;
                        Speed.Y = qu.Y - Y;
                        Move();
                    }
                    else
                    {
                        Logger.WriteLogFile("QUEEN IS DEAD! ( RED COLONY )");
                        qu.Die();
                        listOfQueen.Remove(qu);
                    }


                    /*goToPosition = new Point(qu.X, qu.Y);
                     * int distance = Math.Abs(Convert.ToInt32(goToPosition.X) - Convert.ToInt32(X)) + Math.Abs(Convert.ToInt32(goToPosition.Y) - Convert.ToInt32(Y));
                     * if (distance < 40)
                     * {
                     *  Hit(enemyToTarget);
                     *  Logger.WriteLogFile("RED COLONY FORCE: ATTAQUE :" + enemyToTarget.Fullname + " PV:" + enemyToTarget.Energy + " Distance" + distance);
                     * }
                     * else
                     * {
                     *  Speed.X = goToPosition.X - X;
                     *  Speed.Y = goToPosition.Y - Y;
                     *  Move();
                     * }*/
                }
                else
                {
                    if (enemyRepered.Count > 0)
                    {
                        if (enemyToTarget == null || enemyToTarget.Energy < 1 || ((tick % 7) == 0))
                        {
                            /*SELECT PART*/
                            int   optimal    = 0;
                            int   counter    = 0;
                            float importance = 0;
                            int   distLast   = 100000;

                            foreach (EnemyListedActu enemyTest in enemyRepered)
                            {
                                if (enemyTest.importance > importance)
                                {
                                    if (enemyTest.fourmis.Energy >= 0)
                                    {
                                        importance = enemyTest.importance;
                                        optimal    = counter;
                                    }
                                }
                                if (enemyTest.importance == importance)
                                {
                                    int distActu = Math.Abs(Convert.ToInt32(enemyTest.fourmis.X) - Convert.ToInt32(X)) + Math.Abs(Convert.ToInt32(enemyTest.fourmis.Y) - Convert.ToInt32(Y));
                                    if (distLast >= distActu)
                                    {
                                        if (enemyTest.fourmis.Energy >= 0)
                                        {
                                            importance = enemyTest.importance;
                                            optimal    = counter;
                                        }
                                    }
                                }
                                counter++;
                            }
                            enemyToTarget = enemyRepered[optimal].fourmis;
                        }
                        if (BlockedBy != null)
                        {
                            sortirImpasse = true;
                        }
                        else
                        {
                            goToPosition = new Point(enemyToTarget.X, enemyToTarget.Y);
                        }
                        int distance = Math.Abs(Convert.ToInt32(goToPosition.X) - Convert.ToInt32(X)) + Math.Abs(Convert.ToInt32(goToPosition.Y) - Convert.ToInt32(Y));
                        if (distance < 40)
                        {
                            Hit(enemyToTarget);
                            Logger.WriteLogFile("RED COLONY FORCE: ATTAQUE :" + enemyToTarget.Fullname + " PV:" + enemyToTarget.Energy + " Distance" + distance);
                        }
                        else
                        {
                            Speed.X = goToPosition.X - X;
                            Speed.Y = goToPosition.Y - Y;
                            Move();
                        }
                    }
                    else
                    {
                        goToPosition = pointOfAction;
                        int distance = Math.Abs(Convert.ToInt32(goToPosition.X) - Convert.ToInt32(X)) + Math.Abs(Convert.ToInt32(goToPosition.Y) - Convert.ToInt32(Y));
                        if (distance > 40)
                        {
                            if (BlockedBy != null)
                            {
                                sortirImpasse = true;
                            }
                            Speed.X = goToPosition.X - X;
                            Speed.Y = goToPosition.Y - Y;
                            Move();
                        }
                    }
                }
                if ((tick % 3) == 0)
                {
                    foreach (Ant enemy in EnemiesAroundMe())
                    {
                        SoldierAnt.PointAnEnemy(enemy, 2);
                    }
                }
            }
        }