用C++写新年快乐烟花代码高级
时间: 2024-11-05 08:33:45 浏览: 22
编写一个C++程序来模拟新年烟花的效果,我们通常会使用图形库,如SFML或GLFW等。下面是一个基本的例子,展示如何使用SFML库绘制简单的烟花动画:
```cpp
#include <SFML/Graphics.hpp>
#include <random>
class Firework {
private:
sf::Sprite sprite;
int lifespan;
sf::Vector2f speed;
public:
Firework(float x, float y, sf::Texture& texture) : lifespan(50), speed{rand() % 10 - 5, rand() % 10 - 5} {
sprite.setPosition(x, y);
sprite.setTexture(texture);
}
void update() {
if (lifespan > 0) {
--lifespan;
sprite.move(speed);
if (sprite.getPosition().y <= -100 || sprite.getPosition().x >= 800) {
alive = false;
}
} else {
sprite.setOpacity(0);
}
}
bool alive() const { return lifespan > 0; }
};
int main() {
sf::RenderWindow window(sf::VideoMode(800, 600), "新年烟花");
sf::Texture texture; // 加载烟花图片到纹理
texture.loadFromFile("firework.png");
std::vector<Firework> fireworks;
for (int i = 0; i < 20; ++i) {
fireworks.push_back(Firework(window.getSize().x / 2, window.getSize().y * 0.9 - i * 20, texture));
}
while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)) {
if (event.type == sf::Event::Closed)
window.close();
}
for (Firework &fw : fireworks) {
fw.update();
if (fw.alive())
window.draw(fw.sprite);
}
}
return 0;
}
```
这个代码首先定义了一个`Firework`类,它有生命周期、位置和速度属性,并包含更新方法。主循环里,我们在窗口大小的一半处随机生成多个烟花,然后在每一帧都更新它们的位置和透明度。当烟花下落出屏幕时,就不再显示。
阅读全文