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); }
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); }
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; } }