21xrx.com
2024-11-10 00:55:36 Sunday
登录
文章检索 我的文章 写文章
C++ 编写烟花和爱心代码
2023-07-13 06:40:58 深夜i     --     --
C++ 烟花 爱心 编写 代码

C++是一种广泛使用的编程语言,被应用于各种领域,包括游戏开发、机器人控制、金融分析等等。其中,C++在图形编程方面也相当出色,可以使用C++编写出很多好玩有趣的小程序,比如烟花和爱心代码。

首先,我们先来看看怎么用C++编写烟花代码。编写烟花代码需要使用到图形库,比如OpenGL、SFML等等。这里以SFML为例,下面是一个简单的烟花代码:


#include <SFML/Graphics.hpp>

#include <cstdlib>

#include <ctime>

#include <cmath>

const int SCREEN_WIDTH = 800;

const int SCREEN_HEIGHT = 600;

class Firework

{

private:

  float x;

  float y;

  float vx;

  float vy;

  float t;

public:

  Firework(float x, float y, float vx, float vy)

    : x(x), y(y), vx(vx), vy(vy), t(0)

  {}

  void update(float dt)

  {

    x += vx * dt;

    y += vy * dt;

    vy += 200.0f * dt;

    t += dt;

  }

  void draw(sf::RenderWindow& window) const

  {

    sf::CircleShape circle(2.0f);

    circle.setFillColor(sf::Color::White);

    circle.setPosition(x, y);

    window.draw(circle);

  }

  bool isDone() const

  

    return t > 2.0f;

  

};

int main()

{

  srand(time(nullptr));

  sf::RenderWindow window(sf::VideoMode(SCREEN_WIDTH, SCREEN_HEIGHT), "Fireworks");

  window.setFramerateLimit(60);

  std::vector<Firework> fireworks;

  while (window.isOpen())

  {

    sf::Event event;

    while (window.pollEvent(event))

    {

      if (event.type == sf::Event::Closed)

      {

        window.close();

      }

    }

    float dt = 1.0f / 60.0f;

    fireworks.erase(std::remove_if(fireworks.begin(), fireworks.end(), [](const Firework& firework){ return firework.isDone(); }), fireworks.end());

    for (auto& firework : fireworks)

    {

      firework.update(dt);

    }

    if (rand() % 100 < 2)

    {

      float x = rand() % SCREEN_WIDTH;

      float y = SCREEN_HEIGHT;

      float vx = (rand() % 200) - 100;

      float vy = -std::sqrt(2 * 981 * 100);

      fireworks.push_back(Firework(x, y, vx, vy));

    }

    window.clear();

    for (auto& firework : fireworks)

    {

      firework.draw(window);

    }

    window.display();

  }

  return 0;

}

运行上述代码,可见窗口中会有不同的小白点,它们模拟了烟花的形态。接下来我们再来看看怎么用C++编写爱心代码。

同样的,编写爱心代码也需要用到图形库。这里,我们还是以SFML为例,下面是一个简单的爱心代码:


#include <SFML/Graphics.hpp>

const int SCREEN_WIDTH = 800;

const int SCREEN_HEIGHT = 600;

int main()

{

  sf::RenderWindow window(sf::VideoMode(SCREEN_WIDTH, SCREEN_HEIGHT), "Heart");

  window.setFramerateLimit(60);

  sf::CircleShape acircle(160, 1000);

  acircle.setFillColor(sf::Color::Red);

  acircle.setOutlineColor(sf::Color(0, 0, 0));

  acircle.setOutlineThickness(3);

  acircle.setPosition(sf::Vector2f(240, 120));

  sf::CircleShape bcircle(160, 1000);

  bcircle.setFillColor(sf::Color::Red);

  bcircle.setOutlineColor(sf::Color(0, 0, 0));

  bcircle.setOutlineThickness(3);

  bcircle.setPosition(sf::Vector2f(400, 120));

  sf::RectangleShape rect(sf::Vector2f(200, 300));

  rect.setFillColor(sf::Color::Red);

  rect.setOutlineColor(sf::Color(0, 0, 0));

  rect.setOutlineThickness(3);

  rect.setPosition(sf::Vector2f(300, 235));

  while (window.isOpen())

  {

    sf::Event event;

    while (window.pollEvent(event))

    {

      if (event.type == sf::Event::Closed)

      {

        window.close();

      }

    }

    window.clear();

    window.draw(acircle);

    window.draw(bcircle);

    window.draw(rect);

    window.display();

  }

  return 0;

}

运行上述代码,可见窗口中会出现一个红色的心形和一个红色的矩形,它们组合在一起形成了一个完整的爱心。

总之,C++编写烟花和爱心代码是很有趣的。这些代码不仅可以通过调整参数来渲染出不同的效果,还可以进一步扩展出更加复杂有趣的图形。希望读者能够通过这篇文章对C++的图形编程有一定了解,并且享受到编程的乐趣!

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复