public void Action(int type) { if (type == 0) { isFirst = true; } String pr = nextC.p.x + " " + nextC.p.y; String act = ""; int dis = this.p.getDistance(nextC.p); var targAng = gettingThere(nextC.p); var speed = (gettingThere(nextC.p) / 180.0); switch (type) { // Racer case 0: Console.Error.WriteLine("Speed id " + this.speed.getSpeed()); int turn = (this.speed.getSpeed() / 80); turn = Math.Min(turn, 4); if (this.testGlide(nextC.p, turn, 600) && gettingThere(nNextC.p) > 90 && (Game.tlap > 0 || nextC.num != 0)) { pr = nNextC.p.x + " " + nNextC.p.y; act = this.testGlide(nextC.p, 1, 450)?"50":"1"; Console.Error.WriteLine("GLIDING !!"); } else { int print = (int)(200 - speed * 200); if (targAng > 120 && dis < 1500) { print = 5; Console.Error.WriteLine(" POSITIONING"); } else if (targAng > 18 && getNext().getDistance(nextC.p) < 3000) { print = print / 2; Console.Error.WriteLine("BRAKING /2"); } act = print + ""; } if (Pods.HitEn(this) || Pods.meP.ElementAt(1).getNext().equal(getNext(), 800) && shield <= 0) { shield = 5; act = "SHIELD"; } else { shield--; } act = (kickStart)? act + " KICK ME" : act; Console.WriteLine(pr + " " + act); break; // BLOCKER case 1: Pod en; en = (Pods.enP.ElementAt(0).prog > Pods.enP.ElementAt(1).prog || (Pods.enP.ElementAt(0).prog == Pods.enP.ElementAt(1).prog&& Pods.enP.ElementAt(0).p.getDistance(this.p) < Pods.enP.ElementAt(1).p.getDistance(this.p))) ? Pods.enP.ElementAt(0) : Pods.enP.ElementAt(1); Pod frd = Pods.meP.ElementAt(0); if (goKick == true && frd.kickStart && p.getDistance(frd.p) < 1500 && Game.getNext(target.num).num == frd.nextC.num && p.getDistance(target.p) > 400) { pr = frd.p.x + " " + frd.p.y; act = "" + 200; } else { if (!gettingInPos) { target = Game.checkPs.ElementAt((en.nextC.num + 2) % Game.checkPs.Count); gettingInPos = true; } // Ready to Attack if (en.nextC.num == target.num && en.getNext().getDistance(this.p) < 5000) { if (!en.getNext().equal(getNext(), 900)) { // ATTACK !! act = 200 + ""; pr = en.getNext().x + " " + en.getNext().y; } else { act = "SHIELD"; pr = en.p.x + " " + en.p.y; } } else { if (this.testGlide(Game.getNext(target.num).p.getOuter(target.p.x, target.p.y, 400), 4, 600)) { act = " 1"; pr = en.p.x + " " + en.p.y; goKick = true; } else { if (this.p.equal(target.p, 2000)) { act = "10"; } else { act = "90"; } pr = target.p.x + " " + target.p.y; } } } if (frd.kickStart && getNext().equal(frd.getNext(), 800)) { // act = "SHIELD GO GO "; frd.kickStart = false; goKick = false; } if (Pods.HitEn(this)) { act = "SHIELD ATTACK!"; goKick = false; } ; Console.WriteLine(pr + " " + act); if (((target.num + 1) % Game.checkPs.Count) == en.nextC.num) { gettingInPos = false; direct = false; } break; } }
static void Main(string[] args) { #region init string[] inputs; int laps = int.Parse(Console.ReadLine()); Game.tlap = (laps); Pods ps = new Pods(); int checkpointCount = int.Parse(Console.ReadLine()); for (int i = 0; i < checkpointCount; i++) { inputs = Console.ReadLine().Split(' '); int checkpointX = int.Parse(inputs[0]); int checkpointY = int.Parse(inputs[1]); Game.checkPs.Add(new CheckP(i, checkpointX, checkpointY)); } ps.checkPs = Game.checkPs; #endregion // game loop while (true) { Console.Error.WriteLine(Game.tlap); #region setUp for (int i = 0; i < 2; i++) { inputs = Console.ReadLine().Split(' '); int x = int.Parse(inputs[0]); int y = int.Parse(inputs[1]); ps.SetP(i, x, y); int vx = int.Parse(inputs[2]); int vy = int.Parse(inputs[3]); ps.getP(i).speed = new Speed(vx, vy); int angle = int.Parse(inputs[4]); ps.getP(i).ang = Math.Max(0, angle); int nextCheckPointId = int.Parse(inputs[5]); ps.getP(i).SetC(Game.checkPs.ElementAt(nextCheckPointId)); } for (int i = 0; i < 2; i++) { inputs = Console.ReadLine().Split(' '); int x = int.Parse(inputs[0]); int y = int.Parse(inputs[1]); ps.SetP(i + 2, x, y); int vx = int.Parse(inputs[2]); int vy = int.Parse(inputs[3]); ps.getP(i + 2).speed = new Speed(vx, vy); int angle = int.Parse(inputs[4]); ps.getP(i + 2).ang = angle; int nextCheckPointId = int.Parse(inputs[5]); ps.getP(i + 2).SetC(Game.checkPs.ElementAt(nextCheckPointId)); } #endregion // To debug: Console.Error.WriteLine("Debug messages..."); // using // using 16516 Pods.meP.ElementAt(0).Action(0); Pods.meP.ElementAt(1).Action(1); } }