返回

用代码点亮新年,绚烂3D烟花秀点燃你的跨年夜

前端

用代码点亮新年:打造绚丽的 3D 烟花秀

当元旦的钟声敲响,让我们用绚烂的 3D 烟花秀点亮这个特别的夜晚,与亲朋好友共同庆祝新年的到来。告别乏味平淡,用代码的力量,创造一场令人惊叹的视觉盛宴,留下难忘的跨年回忆。

HTML 烟花:指尖上的艺术

HTML5 技术赋予我们自由创作的无限可能。用 HTML 代码编写一个烟花动画,就像指尖上的艺术,只需简单的几行代码,就能让绚丽的烟花在浏览器中绽放。点击 此处,即可欣赏 HTML 烟花代码的精彩效果。

C++ 烟花:高效与图形的完美结合

C++ 语言以其高效性和强大的图形处理能力,成为制作烟花动画的理想选择。C++ 的 SDL 库可以帮助你轻松创建绚丽的烟花效果。点击 此处 下载 C++ 烟花代码,并按照说明进行操作,即可体验 C++ 烟花动画的魅力。

Python 烟花:简单易学,功能强大

Python 语言凭借其简单易学、功能强大的特性,也是制作烟花动画的热门选择。你可以使用 Python 的 Pyglet 库轻松实现绚丽的烟花效果。点击 此处 下载 Python 烟花代码,并按照说明进行操作,即可体验 Python 烟花动画的魅力。

代码示例:亲自动手点亮烟花

HTML 代码示例:

<!DOCTYPE html>
<html>
<head>
  
</head>
<body>
  <canvas id="myCanvas" width="500" height="500"></canvas>
  <script>
    var canvas = document.getElementById("myCanvas");
    var ctx = canvas.getContext("2d");

    // 定义烟花粒子类
    function Particle() {
      this.x = Math.random() * canvas.width;
      this.y = Math.random() * canvas.height;
      this.vx = (Math.random() - 0.5) * 10;
      this.vy = (Math.random() - 0.5) * 10;
      this.radius = Math.random() * 5;
      this.color = "rgb(" + Math.floor(Math.random() * 255) + "," + Math.floor(Math.random() * 255) + "," + Math.floor(Math.random() * 255) + ")";
    }

    // 更新粒子位置
    Particle.prototype.update = function() {
      this.x += this.vx;
      this.y += this.vy;

      // 当粒子超出画布边界时,将其反弹回来
      if (this.x < 0 || this.x > canvas.width) {
        this.vx = -this.vx;
      }
      if (this.y < 0 || this.y > canvas.height) {
        this.vy = -this.vy;
      }
    };

    // 绘制粒子
    Particle.prototype.draw = function() {
      ctx.beginPath();
      ctx.arc(this.x, this.y, this.radius, 0, 2 * Math.PI);
      ctx.fillStyle = this.color;
      ctx.fill();
    };

    // 创建烟花粒子数组
    var particles = [];
    for (var i = 0; i < 100; i++) {
      particles.push(new Particle());
    }

    // 动画循环
    function animate() {
      ctx.clearRect(0, 0, canvas.width, canvas.height);

      // 更新并绘制粒子
      for (var i = 0; i < particles.length; i++) {
        particles[i].update();
        particles[i].draw();
      }

      // 每16毫秒调用一次动画循环函数
      setTimeout(animate, 16);
    }

    animate();
  </script>
</body>
</html>

C++ 代码示例:

#include <olcPixelGameEngine.h>

class Fireworks : public olc::PixelGameEngine {
public:
  Fireworks() {
    sAppName = "Fireworks";
  }

private:
  // 烟花粒子类
  struct Particle {
    float x, y;
    float vx, vy;
    float radius;
    float color[3];
    float life;
  };

  // 烟花粒子数组
  std::vector<Particle> particles;

  // 创建烟花粒子
  void CreateParticle(float x, float y) {
    Particle p;
    p.x = x;
    p.y = y;
    p.vx = (rand() % 1000) / 1000.0f * 200.0f - 100.0f;
    p.vy = (rand() % 1000) / 1000.0f * 200.0f - 100.0f;
    p.radius = (rand() % 100) / 100.0f * 5.0f + 1.0f;
    p.color[0] = (rand() % 100) / 100.0f;
    p.color[1] = (rand() % 100) / 100.0f;
    p.color[2] = (rand() % 100) / 100.0f;
    p.life = 1.0f;
    particles.push_back(p);
  }

  // 更新烟花粒子
  void UpdateParticles() {
    for (int i = 0; i < particles.size(); i++) {
      particles[i].x += particles[i].vx * GetElapsedTime();
      particles[i].y += particles[i].vy * GetElapsedTime();
      particles[i].vy += 9.81f * GetElapsedTime();
      particles[i].life -= GetElapsedTime();

      if (particles[i].life <= 0.0f) {
        particles.erase(particles.begin() + i);
        i--;
      }
    }
  }

  // 绘制烟花粒子
  void DrawParticles() {
    for (int i = 0; i < particles.size(); i++) {
      DrawCircle(particles[i].x, particles[i].y, particles[i].radius, olc::Pixel(particles[i].color[0] * 255, particles[i].color[1] * 255, particles[i].color[2] * 255));
    }
  }

public:
  bool OnUserCreate() override {
    return true;
  }

  bool OnUserUpdate(float fElapsedTime) override {
    if (GetMouse(0).bHeld) {
      CreateParticle(GetMouseX(), GetMouseY());
    }

    UpdateParticles();
    DrawParticles();

    return true;
  }
};

int main() {
  Fireworks game;
  if (game.Construct(512, 480, 4, 4)) {
    game.Start();
  }

  return 0;
}

Python 代码示例:

import pyglet

class Firework(pyglet.sprite.Sprite):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.x = pyglet.window.width // 2
        self.y = pyglet.window.height // 2

        self.vx = (random.random() - 0.5) * 100
        self.vy = (random.random() - 0.5) * 100

        self.scale = 1.0
        self.rotation = random.randint(0, 360)

        self.color = (random.random(), random.random(), random.random())

        self.lifetime】写一篇相关的博客,写作要求:100%独特、SEO优化的文章,包含子标题,并覆盖提示中提供的主题。请用自己的话来写文章,而不是从其他来源复制和粘贴。在创建内容时,一定要考虑复杂性和连贯性,确保两者都很高,同时不失特定性和上下文。请使用充分详细的段落