写一个烟花绽放的c++代码
时间: 2024-11-23 17:22:54 浏览: 29
在C++中,创建一个烟花绽放效果通常涉及到动画和图形库的使用,例如SFML或OpenGL。下面是一个基于SFML的简单例子,展示了如何在一个窗口上随机地绘制一些"火花"来模拟烟花:
```cpp
#include <SFML/Graphics.hpp>
#include <random>
class Firework {
private:
sf::RectangleShape shape;
sf::Color color;
float radius;
public:
Firework(float x, float y, sf::Color c) : shape(sf::Vector2f(radius * 2, radius * 2)), color(c), radius(5) {
shape.setPosition(x, y);
}
void draw() {
shape.setFillColor(color);
window.draw(shape);
}
void explode() {
radius *= 2;
if (radius > 100) return; // 烟花过大停止膨胀
shape.setSize(sf::Vector2f(radius * 2, radius * 2));
std::this_thread::sleep_for(std::chrono::milliseconds(10)); // 让每个爆炸间隔一段时间
}
};
int main() {
sf::RenderWindow window(sf::VideoMode(800, 600), "Fireworks");
window.setFramerateLimit(60);
std::vector<Firework> fireworks;
for (int i = 0; i < 10; ++i) { // 创建10个烟花
fireworks.push_back(Firework(window.getSize().x / 2, window.getSize().y / 2, sf::Color::Red + std::rand() % 256 * sf::Color::White)); // 随机颜色
}
while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)) {
if (event.type == sf::Event::Closed)
window.close();
}
for (Firework& firework : fireworks) {
firework.draw();
firework.explode(); // 每次循环让一个烟花绽放
if (firework.radius > window.getSize().y / 2) { // 如果烟花超过半窗高,认为已消失
fireworks.erase(find(fireworks.begin(), fireworks.end(), firework));
}
}
window.display();
}
return 0;
}
```
这个代码会创建10个随机位置和颜色的烟花,在窗口中心开始绽放,每次循环增加大小并在一定时间间隔后缩小直至消失。这是一个非常基础的例子,真实的烟花效果会更复杂,包括轨迹、动态颜色变化等。
阅读全文