用ai写ai代码 (ai代码简单)

我让ai写了一段夜空的代码,很轻易且完美的实现了,没有用默认的python,是因为h5不挑环境,有浏览器就能运行,只是简单演示的话,会显得更加友好。

但是这里要说的并不是这个夜空,虽然ai干不了太精细太复杂的重活,但如果只是如此的话,也显得太过于浅薄了,完全不能体现出它的笨事(划掉,是本事)。

所以我要求它写一段星空,不仅要求星星会闪烁,甚至偶尔还要有流星划过夜空,想想都很浪漫咧,本来没报什么希望,没想到!它真的!做到了!

其间只出现了两个小bug,一是没有设置背景色,导致页面上啥也没看不到,这个只要背景设成黑色就行了。二是流星头尾颠倒,看起来就像是宇宙范围内的大规模时空倒流(当然这不是我们想要的笑果……)

总的来说,良品率相当高!

下面直接上代码!使用方法:直接复制粘贴到文本编辑器中,然后另存为后缀为.html的文件,比如(星空.html),点击即可运行!

ps.注意,windows电脑可能会默认不显示扩展名,这时候你需要让扩展名显示出来,然后再设扩展名。否则你的真实文件名很有可能是这样的:星空.html.txt。

#ai聊天##chat GPT##chatgpt到底有多牛#

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>当连绵的流星划过天际,那是山宗对你的无尽思念</title>
    <style>
      /* 隐藏滚动条 */
      body {
        margin: 0px;
        overflow: hidden;
        background-color:black;
      }
</style>
</head>
<body>
  <canvas id="myCanvas"></canvas>
  <script>
    // 定义变量
    let canvas, context, screenW, screenH, stars = [], meteors = [];
    // 定义常量
    const FPS = 50, numStars = 2000;

    window.onload = function () {
      // 获取canvas 
      canvas = document.getElementById('myCanvas');
      // 设置画布大小
      screenW = canvas.width = window.innerWidth;
      screenH = canvas.height = window.innerHeight;
      // 获取canvas执行上下文
      context = canvas.getContext('2d');
      
      // 组件应用层
      // 创建星星
      for (let i = 0; i < numStars; i++) {
        stars.push({
          x: Math.random() * screenW,
          y: Math.random() * screenH,
          radius: Math.random(),
          alpha: Math.random(),
          twinkleSpeed: Math.random() * 0.03 + 0.02
        });
      }
      // 创建流星
      setInterval(() => {
        let speed = Math.random() * 5 + 5;
        meteors.push({
          x: -100, // 起始x坐标
          y: Math.random() * screenH, // 起始y坐标随机
          length: Math.random() * 80 + 60, // 流星长度随机(60-140)
          angle: Math.PI / 30 * Math.random() - Math.PI / 6, // 角度随机
          speed: speed // 速度随机(5-10)
        });
      }, Math.random() * 500 + 600);
      // 启动计时器
      setInterval(update, 1000 / FPS);
    }

    // 更新
    function update() {
      // 清除画布
      context.clearRect(0, 0, screenW, screenH);

      // 画星星
      for (let i = 0; i < stars.length; i++) {
        drawStar(stars[i]);
        twinkle(stars[i]);
      }

      // 画流星
      for (let i = 0; i < meteors.length; i++) {
        moveMeteor(meteors[i]);
        drawMeteor(meteors[i]);
      }
    }

    // 画星星
    function drawStar(star) {
      context.beginPath();
      context.arc(star.x, star.y, star.radius, 0, 2 * Math.PI);
      context.fillStyle = `rgba(255, 255, 255, ${star.alpha})`;
      context.fill();
    }

    // 星星闪烁
    function twinkle(star) {
      star.alpha += star.twinkleSpeed;
      if (star.alpha <= 0 || star.alpha >= 1) {
        star.twinkleSpeed *= -1;
      }
    }

    // 移动流星
    function moveMeteor(meteor) {
      meteor.x += Math.cos(meteor.angle) * meteor.speed;
      meteor.y += Math.sin(meteor.angle) * meteor.speed;
    }

    // 画流星
    function drawMeteor(meteor) {
      // 渐变色
      let gradient = context.createLinearGradient(meteor.x, meteor.y, meteor.x + Math.cos(meteor.angle) * meteor.length, meteor.y + Math.sin(meteor.angle) * meteor.length);
      gradient.addColorStop(1, 'rgba(255, 255, 255, 1)');
      gradient.addColorStop(0, 'rgba(255, 255, 255, 0)');
      
      context.beginPath();
      // 线性渐变填充
      context.strokeStyle = gradient;
      context.lineCap = 'round';
      context.lineWidth = 2;
      context.moveTo(meteor.x, meteor.y); // 开始坐标
      context.lineTo(meteor.x + Math.cos(meteor.angle) * meteor.length, meteor.y + Math.sin(meteor.angle) * meteor.length); // 结束坐标
      context.stroke();
    }
</script>
</body>
</html>

为了保持小小的神秘感,就不放截图了,大家自己运行康康哟!