package {
    import flash.display.MovieClip;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.geom.Point;

    public class RangeDetectionGame extends Sprite {
        private var target:MovieClip; // 目标对象
        private var bullet:MovieClip; // 子弹对象
        private var detectionRange:Number = 150; // 检测范围
        private var bulletSpeed:Number = 5; // 子弹速度
        private var trackingStrength:Number = 0.1; // 追踪强度

        public function RangeDetectionGame() {
            // 初始化目标和子弹
            target = new MovieClip();
            target.graphics.beginFill(0xFF0000);
            target.graphics.drawCircle(0, 0, 20);
            target.graphics.endFill();
            target.x = stage.stageWidth / 2;
            target.y = stage.stageHeight / 2;
            addChild(target);

            bullet = new MovieClip();
            bullet.graphics.beginFill(0x0000FF);
            bullet.graphics.drawCircle(0, 0, 10);
            bullet.graphics.endFill();
            bullet.x = stage.stageWidth / 4;
            bullet.y = stage.stageHeight / 4;
            addChild(bullet);

            // 添加鼠标移动监听器来更新目标位置
            stage.addEventListener(MouseEvent.MOUSE_MOVE, updateTargetPosition);

            // 每帧更新子弹位置和检测范围
            addEventListener(Event.ENTER_FRAME, updateBulletPosition);
        }

        private function updateTargetPosition(event:MouseEvent):void {
            target.x = event.stageX;
            target.y = event.stageY;
        }

        private function updateBulletPosition(event:Event):void {
            // 检测子弹与目标的距离
            var distance:Number = Point.distance(new Point(bullet.x, bullet.y), new Point(target.x, target.y));

            // 如果目标在检测范围内
            if (distance <= detectionRange) {
                // 计算目标方向
                var direction:Point = new Point(target.x - bullet.x, target.y - bullet.y);

                // 归一化方向向量
                var length:Number = Math.sqrt(direction.x * direction.x + direction.y * direction.y);
                if (length > 0) {
                    direction.x /= length;
                    direction.y /= length;
                }

                // 更新子弹速度，使其逐渐转向目标方向
                var bulletVelocityX:Number = bullet.xSpeed ? bullet.xSpeed : 0;
                var bulletVelocityY:Number = bullet.ySpeed ? bullet.ySpeed : 0;
                bulletVelocityX += (direction.x - bulletVelocityX) * trackingStrength;
                bulletVelocityY += (direction.y - bulletVelocityY) * trackingStrength;

                // 限制子弹速度
                length = Math.sqrt(bulletVelocityX * bulletVelocityX + bulletVelocityY * bulletVelocityY);
                if (length > bulletSpeed) {
                    bulletVelocityX /= length * bulletSpeed;
                    bulletVelocityY /= length * bulletSpeed;
                }

                // 更新子弹位置
                bullet.x += bulletVelocityX;
                bullet.y += bulletVelocityY;
            }
        }
    }
}