Ejemplo n.º 1
0
        public World(int tick, double width, double height, Player[] players, Obstacle[] obstacles, Tank[] tanks, Shell[] shells, Bonus[] bonuses)
        {
            this.tick = tick;
            this.width = width;
            this.height = height;

            this.players = new Player[players.Length];
            Array.Copy(players, this.players, players.Length);

            this.obstacles = new Obstacle[obstacles.Length];
            Array.Copy(obstacles, this.obstacles, obstacles.Length);

            this.tanks = new Tank[tanks.Length];
            Array.Copy(tanks, this.tanks, tanks.Length);

            this.shells = new Shell[shells.Length];
            Array.Copy(shells, this.shells, shells.Length);

            this.bonuses = new Bonus[bonuses.Length];
            Array.Copy(bonuses, this.bonuses, bonuses.Length);
        }
Ejemplo n.º 2
0
        // returns - 0 - не пересекает, 1 - пересекает, 2 - пересекает, но есть шанс уклониться
        private int CheckToBeWoundedBy(Shell shell, Tank self, int speedK = 2)
        {
            // speedK == 2 - двигаться как обычно
            // speedK == 0 - стоять
            // speedL == 1 - вперёд
            // speedK == -1 - назад

            int steps = 0;
            double x = shell.X, y = shell.Y;
            Tank t = null;
            double selfDx = SelfSpeed * Math.Cos(self.Angle);
            double selfDy = SelfSpeed * Math.Sin(self.Angle);

            while (x >= 0 && x < world.Width && y >= 0 && y < world.Height)
            {
                if (t == null || !OutOfRange(t, 0.9))
                {
                    if (speedK == 2)
                        t = new Tank(0, "", 0, steps * self.SpeedX + self.X, steps * self.SpeedY + self.Y, self.SpeedX, self.SpeedY, self.Angle, self.AngularSpeed, self.TurretRelativeAngle, self.CrewHealth, self.HullDurability, self.ReloadingTime, self.RemainingReloadingTime, self.PremiumShellCount, self.IsTeammate, self.Type);
                    else if (speedK == 0)
                        t = self;
                    else
                        t = new Tank(0, "", 0, steps * selfDx * speedK + self.X, steps * selfDy * speedK + self.Y, self.SpeedX, self.SpeedY, self.Angle, self.AngularSpeed, self.TurretRelativeAngle, self.CrewHealth, self.HullDurability, self.ReloadingTime, self.RemainingReloadingTime, self.PremiumShellCount, self.IsTeammate, self.Type);
                }
                int inunit = InUnit(t, x, y, 1.2);
                if (inunit != -1)
                {
                    if (shell.Type == ShellType.Premium)
                        return 1;
                    double angle = Math.Abs(NormAngle(self.Angle - shell.Angle));
                    if (angle > Angle[90])
                        angle = Angle[180] - angle;

                    if (inunit == 0 || inunit == 2)
                        return 2;
                    if (angle > Angle[20])
                        return 1;
                    return 0;
                }
                x += shell.SpeedX;
                y += shell.SpeedY;
                steps++;
            }
            return 0;
        }