Exemplo n.º 1
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;
            }
        }
Exemplo n.º 2
0
        public static bool Iscross(Enemi i, Termin termin, List <Wall> walls)
        {
            int i2x, i2y, i1x, i1y;

            i1x = Math.Min(i.X + i.Enemi_x / 2, termin.Real_x + termin.Termin_x / 2);
            i1y = Math.Min(i.Y + i.Enemi_y / 2, termin.Real_y + termin.Termin_y / 2);
            i2x = Math.Abs(i.X + i.Enemi_x / 2 - termin.Real_x - termin.Termin_x / 2);
            i2y = Math.Abs(i.Y + i.Enemi_y / 2 - termin.Real_y - termin.Termin_y / 2);
            Rectangle tr  = new Rectangle(i1x, i1y, i2x, i2y);
            bool      bol = true;

            foreach (Wall j in walls)
            {
                Rectangle t1 = new Rectangle(j.X1, j.Y1, j.X2 - j.X1, j.Y2 - j.Y1);
                if (tr.IntersectsWith(t1))
                {
                    if (LineToRectFunct(j.X1, j.Y1, j.X2, j.Y2, i1x, i1y, i1x + i2x, i1y + i2y).Count > 0)
                    {
                        bol = false;
                    }
                }
            }
            return(bol);
        }