Beispiel #1
0
        public void DrawD()
        {
            int x_initial = Tower3.Location.X + 8;
            int y_initial = Tower3.Location.Y;

            int x_final = Val.X;
            int y_final = Val.Y;

            double x_current = (double)x_initial;
            int    y_current = y_initial;

            int exR = 5;

            int time = y_final - y_initial;

            double add = ((double)x_final - (double)x_initial) / (double)time;

            Point[]    move     = new Point[2];
            Pen        myPen    = new Pen(Color.Pink, 1);
            SolidBrush pinkBomb = new SolidBrush(Color.Pink);

            Rectangle explosionRec = new Rectangle();

            Graphics g = Warzone.CreateGraphics();

            for (int i = 0; i < Math.Abs(y_initial - y_final); i++)
            {
                Thread.Sleep(10);
                x_current -= add;
                y_current -= 1;

                move[0] = new Point(x_initial, y_initial);
                move[1] = new Point(Convert.ToInt32(Math.Round(x_current)), y_current);

                g.DrawLines(myPen, move);
            }



            for (i = 0; i < 5; i++)
            {
                Thread.Sleep(100);
                exR              += 4;
                explosionRec.X    = move[1].X - 7 - i;
                explosionRec.Y    = move[1].Y - 7 - i;
                explosionRec.Size = new Size(exR, exR);
                g.FillPie(pinkBomb, explosionRec, 0, 360);
            }
            g.Clear(Warzone.BackColor);
        }
Beispiel #2
0
        public static Card ToCardEvent(this string str)
        {
            Card ret;

            //First character indicates stage

            GameStage stage = (GameStage)int.Parse("" + str[0]);

            //Second character indicates subclass
            switch (str[1])
            {
            case 'a':
                //format: 'Stage''a''CrewCost''DayCost''Reward'
                ret = new AbandonedShip
                      (
                    stage,
                    Convert.ToInt32("" + str[2], 16),
                    int.Parse("" + str[3]),
                    Convert.ToInt32("" + str[4], 16)
                      );
                break;

            case 'A':
                //format: 'Stage''A''MinimumCrew''DayCost''Wares.Count'('Ware')+
                List <Ware> stationWares = new List <Ware>();
                int         wareCount    = int.Parse("" + str[4]);
                for (int i = 0; i < wareCount; ++i)
                {
                    stationWares.Add((Ware)(int.Parse("" + str[i + 5])));
                }
                ret = new AbandonedStation
                      (
                    stage,
                    Convert.ToInt32("" + str[2], 16),
                    int.Parse("" + str[3]),
                    stationWares
                      );
                break;

            case 'm':
                //format: 'Stage''m''Projectiles.Count'('Projectile','Direction')+
                List <(Projectile, Direction)> projectiles = new List <(Projectile, Direction)>();
                int projectileCount = int.Parse("" + str[2]);
                for (int i = 0; i < projectileCount; ++i)
                {
                    projectiles.Add(((Projectile)(int.Parse("" + str[3 + 2 * i])), (Direction)int.Parse("" + str[4 + 2 * i])));
                }
                ret = new MeteorShower(stage, projectiles);
                break;

            case 'y':
                //format: 'Stage''y''Firepower''DayCost''Reward''Penalty.Projectiles.Count'('Projectile','Direction')+
                List <(Projectile, Direction)> pirateProjectiles = new List <(Projectile, Direction)>();
                int pirateProjectileCount = int.Parse("" + str[5]);
                for (int i = 0; i < pirateProjectileCount; ++i)
                {
                    pirateProjectiles.Add(((Projectile)(int.Parse("" + str[6 + 2 * i])), (Direction)int.Parse("" + str[7 + 2 * i])));
                }
                ret = new Pirates
                      (
                    stage,
                    Convert.ToInt32("" + str[2], 16),
                    int.Parse("" + str[3]),
                    pirateProjectiles,
                    Convert.ToInt32("" + str[4], 16)
                      );
                break;

            case 'd':
                //format: 'Stage''d''Firepower''DayCost''Reward.Count'('Ware')+'Penalty'
                List <Ware> smugglerWares     = new List <Ware>();
                int         smugglerWareCount = int.Parse("" + str[4]);
                for (int i = 0; i < smugglerWareCount; ++i)
                {
                    smugglerWares.Add((Ware)int.Parse("" + str[5 + i]));
                }
                ret = new Smugglers
                      (
                    stage,
                    Convert.ToInt32("" + str[2], 16),
                    int.Parse("" + str[3]),
                    int.Parse("" + str[5 + smugglerWareCount]),
                    smugglerWares
                      );
                break;

            case 'S':
                //format: 'Stage''S''Firepower''DayCost''Reward''Penalty'
                ret = new Slavers
                      (
                    stage,
                    Convert.ToInt32("" + str[2], 16),
                    int.Parse("" + str[3]),
                    int.Parse("" + str[5]),
                    Convert.ToInt32("" + str[4], 16)
                      );
                break;

            case 'o':
                //format: 'Stage''o'
                ret = new OpenSpace(stage);
                break;

            case 'p':
                //format: 'Stage''p'
                ret = new Pandemic(stage);
                break;

            case 'g':
                //format: 'Stage''g'
                ret = new Sabotage(stage);
                break;

            case 'P':
                //format: 'Stage''P''DayCost''Offers.Count'('offer.count'('Ware')+)+
                List <List <Ware> > offers = new List <List <Ware> >();
                int offerCount             = int.Parse("" + str[3]);
                int index = 0;
                for (int i = 0; i < offerCount; ++i)
                {
                    int         offerWareCount = int.Parse("" + str[4 + index]);
                    List <Ware> offer          = new List <Ware>();
                    for (int j = 0; j < offerWareCount; ++j)
                    {
                        offer.Add((Ware)int.Parse("" + str[5 + index + j]));
                    }
                    offers.Add(offer);
                    index += offerWareCount + 1;
                }
                ret = new Planets
                      (
                    stage,
                    int.Parse("" + str[2]),
                    offers
                      );
                break;

            case 's':
                //format: 'Stage''s'
                ret = new Stardust(stage);
                break;

            case 'w':
                //format: 'Stage''w''Event1.Attribute''Event1.PenaltyType''Event1.Penalty'
                //                  'Event2.Attribute''Event2.PenaltyType''Event2.Penalty"
                //                  'Event3.Attribute''Event3.PenaltyType''Event3.Penalty.Projectiles.Count'('Projectile','Direction')+
                WarzoneEvent <int> event1 = new WarzoneEvent <int>
                                            (
                    (CardCheckAttribute)int.Parse("" + str[2]),
                    (CardPenalty)int.Parse("" + str[3]),
                    int.Parse("" + str[4])
                                            );
                WarzoneEvent <int> event2 = new WarzoneEvent <int>
                                            (
                    (CardCheckAttribute)int.Parse("" + str[5]),
                    (CardPenalty)int.Parse("" + str[6]),
                    int.Parse("" + str[7])
                                            );
                List <(Projectile, Direction)> event3Projectiles = new List <(Projectile, Direction)>();
                int event3ProjectilesCount = int.Parse("" + str[10]);
                for (int i = 0; i < event3ProjectilesCount; ++i)
                {
                    event3Projectiles.Add(((Projectile)int.Parse("" + str[11 + 2 * i]), (Direction)int.Parse("" + str[12 + 2 * i])));
                }
                WarzoneEvent <List <(Projectile, Direction)> > event3 = new WarzoneEvent <List <(Projectile, Direction)> >
                                                                        (
                    (CardCheckAttribute)int.Parse("" + str[8]),
                    (CardPenalty)int.Parse("" + str[9]),
                    event3Projectiles
                                                                        );
                ret = new Warzone(stage, event1, event2, event3);
                break;

            default:
                throw new InvalidCastException("Unrecognized CardEvent type character");
            }

            return(ret);
        }
Beispiel #3
0
        public void DrawMissile()
        {
            int    x_initial = ranLoc.Next(0, Warzone.Width);                   //Will move a Line from top to bottom of panel
            int    y_initial = 0;
            double x_current = x_initial;
            int    y_current = y_initial;
            int    city      = ranLoc.Next(0, 3);
            int    time      = Tower1.Location.Y;

            double add = 0;

            Point[]    move        = new Point[2];
            Pen        myPen       = new Pen(Color.White, 1);
            Pen        outlineBase = new Pen(Color.Gold, 2);
            SolidBrush allWhite    = new SolidBrush(Color.LightGray);
            SolidBrush missileF    = new SolidBrush(Color.Blue);

            Graphics g = Warzone.CreateGraphics();



            Rectangle baseMid = new Rectangle(240, Warzone.Height - 5, 20, 10);

            g.DrawEllipse(outlineBase, baseMid);                                    //was supposed to represent the towers
            g.FillEllipse(allWhite, baseMid);

            Rectangle baseLeft = new Rectangle(120, Warzone.Height - 5, 20, 10);

            g.DrawEllipse(outlineBase, baseLeft);
            g.FillEllipse(allWhite, baseLeft);

            Rectangle baseRight = new Rectangle(360, Warzone.Height - 5, 20, 10);

            g.DrawEllipse(outlineBase, baseRight);
            g.FillEllipse(allWhite, baseRight);

            switch (city)
            {
            case 0:
                add = ((double)Tower1.Location.X + 8 - (double)x_initial) / time;                // rate = distance/time

                for (int i = 0; i < Warzone.Height; i++)
                {
                    Thread.Sleep(10);
                    x_current += add;
                    y_current += 1;

                    move[0] = new Point(x_initial, y_initial);
                    move[1] = new Point(Convert.ToInt32(Math.Round(x_current)), y_current);

                    g.DrawLines(myPen, move);
                }
                g.Clear(Warzone.BackColor);
                break;

            case 1:
                add = ((double)Tower2.Location.X + 8 - (double)x_initial) / time;


                for (int i = 0; i < Warzone.Height; i++)
                {
                    Thread.Sleep(10);
                    x_current += add;
                    y_current += 1;

                    move[0] = new Point(x_initial, y_initial);
                    move[1] = new Point(Convert.ToInt32((Math.Round(x_current))), y_current);

                    g.DrawLines(myPen, move);
                }
                g.Clear(Warzone.BackColor);
                break;

            case 2:
                add = ((double)Tower3.Location.X + 8 - (double)x_initial) / time;


                for (int i = 0; i < Warzone.Height; i++)
                {
                    Thread.Sleep(10);
                    x_current += add;
                    y_current += 1;

                    move[0] = new Point(x_initial, y_initial);
                    move[1] = new Point(Convert.ToInt32((Math.Round(x_current))), y_current);

                    g.DrawLines(myPen, move);
                }
                g.Clear(Warzone.BackColor);
                break;
            }
        }