Ejemplo n.º 1
0
        private void RunEnemis()
        {
            enemiTargets.Clear();
            tempEn.Clear();
            foreach (Enemi i in enemis)
            {
                if (i.X + i.Enemi_x > real_x && i.X < real_x + desc_Size_x &&
                    i.Y + i.Enemi_y > real_y && i.Y < real_y + desc_Size_y)
                {
                    if (i.Status != EnemiStatus.Death)
                    {
                        i.Status = EnemiStatus.Playing;
                    }
                }
                else
                {
                    if (i.Status != EnemiStatus.Death)
                    {
                        i.Status = EnemiStatus.NotView;
                        i.Search = false;
                    }
                    else
                    {
                        tempEn.Add(i);
                    }
                }
            }
            foreach (Enemi i in tempEn)
            {
                enemis.Remove(i);
            }

            foreach (Enemi i in enemis.FindAll(r => r.Status == EnemiStatus.Playing))
            {
                //if (Math.Abs(termin.Real_x - i.X) < 300 && Math.Abs(termin.Real_y - i.Y) < 300)
                //{
                if (i.Search || Crosser.Iscross(i, termin, walls))
                {
                    i.Search = true;
                    i.RunToTermin(termin.Real_x + termin.Termin_x / 2, termin.Real_y + termin.Termin_y / 2);
                    if (i.TargetDelay == 0)
                    {
                        EnemiFire(i);
                    }
                }
                else
                {
                    i.RunRandom();
                }
                //}
                //else
                //    i.RunRandom();
                i.TurnAround(enemis.FindAll(r => r != i && r.Status == EnemiStatus.Playing && Math.Abs(r.X - i.X) < 100 && Math.Abs(r.Y - i.Y) < 100));

                i.Run();
            }
        }
Ejemplo n.º 2
0
        internal void InitLine(List <Rectangle> rects)
        {
            List <Point> tempPoints = new List <Point>();

            foreach (Rectangle r in rects)
            {
                tempPoints.AddRange(Crosser.LineToRect(r, new Point(start_x, start_y), new Point(end_x, end_y)));
            }
            foreach (Point i in tempPoints)
            {
                if (Math.Abs(i.X - start_x) <= Math.Abs(end_x - start_x) && Math.Abs(i.Y - start_y) <= Math.Abs(end_y - start_y))
                {
                    end_x = (int)i.X;
                    end_y = (int)i.Y;
                }
            }
        }
Ejemplo n.º 3
0
        private void EnemiFire(Enemi e)
        {
            Target tempTarget = new Target();

            tempTarget.Start_x = e.X + e.Enemi_x / 2 + e.Direct_x * e.Enemi_x / 2;
            tempTarget.Start_y = e.Y + e.Enemi_y / 2 + e.Direct_y * e.Enemi_y / 2;

            Point tempPoint = Crosser.SmallLine(tempTarget.Start_x, tempTarget.Start_y, termin);

            tempTarget.End_x = tempPoint.X;
            tempTarget.End_y = tempPoint.Y;

            int tx1 = Math.Min(tempTarget.Start_x, tempTarget.End_x);
            int tx2 = Math.Max(tempTarget.Start_x, tempTarget.End_x);
            int ty1 = Math.Min(tempTarget.Start_y, tempTarget.End_y);
            int ty2 = Math.Max(tempTarget.Start_y, tempTarget.End_y);

            Rectangle        trect = new Rectangle(tx1, ty1, tx2 - tx1, ty2 - ty1);
            List <Rectangle> rects = new List <Rectangle>();

            foreach (Wall i in walls.FindAll(r => trect.IntersectsWith(new Rectangle(r.X1, r.Y1, r.X2 - r.X1, r.Y2 - r.Y1))))
            {
                rects.Add(new Rectangle(i.X1, i.Y1, i.X2 - i.X1, i.Y2 - i.Y1));
            }
            foreach (Enemi i in enemis.FindAll(r => r != e && r.Status == EnemiStatus.Playing &&
                                               trect.IntersectsWith(new Rectangle(r.X, r.Y, r.Enemi_x, r.Enemi_y))))
            {
                rects.Add(new Rectangle(i.X, i.Y, i.Enemi_x, i.Enemi_y));
            }
            rects.Add(new Rectangle(termin.Real_x, termin.Real_y, termin.Termin_x, termin.Termin_y));
            if (rects.Count != 0)
            {
                tempTarget.InitLine(rects);
            }
            enemiTargets.Add(tempTarget);
            e.TargetDelay = 5;
            if (tempTarget.End_x >= termin.Real_x && tempTarget.End_x <= termin.Real_x + termin.Termin_x &&
                tempTarget.End_y >= termin.Real_y && tempTarget.End_y <= termin.Real_y + termin.Termin_y &&
                termin.HurtTermin == 0)
            {
                termin.Life--;
                termin.HurtTermin = termin.HurtTerminTime;
            }
        }