C/C++烟花代码

news2024/11/20 1:14:40

图片

目录

系列推荐

写在前面

烟花代码

代码分析

运行结果

写在后面


系列推荐

序号目录直达链接
1爱心代码https://want595.blog.csdn.net/article/details/136360684
2李峋同款跳动的爱心https://want595.blog.csdn.net/article/details/139722249
3满屏飘字代码https://want595.blog.csdn.net/article/details/136342476
4大雪纷飞代码https://want595.blog.csdn.net/article/details/140735166
5烟花代码https://want595.blog.csdn.net/article/details/140813777
6黑客帝国字母雨https://want595.blog.csdn.net/article/details/139923742
7樱花树https://want595.blog.csdn.net/article/details/140690893

写在前面

七夕就要到啦,博主给大家准备了一个炫酷的烟花代码,一起来看看叭!

什么是Visual Studio?

Microsoft Visual Studio 是由微软公司开发的一款强大且全面的集成开发环境(IDE),主要用于创建从桌面应用程序到云服务,以及跨多种平台(包括Windows、Android、iOS和Web)的应用程序。它支持一系列广泛的编程语言,如C#、C++、Visual Basic、F#、TypeScript、Python等,并集成了.NET框架和其他微软技术栈的支持。

什么是EasyX?

EasyX是专为C++语言设计的一款轻量级图形库,它在Visual Studio环境下运行,极大地简化了Windows平台下C++图形编程的难度。通过集成于Visual Studio IDE中,EasyX提供了一系列易于理解和调用的API接口,支持图形绘制、颜色填充、图像处理、键盘和鼠标事件响应等功能,使得初学者能够快速入门并实现如画图、小游戏等图形化项目开发。其简洁易懂的API设计风格降低了学习曲线,使开发者无需深入理解复杂的Windows GDI编程机制,即可高效完成简单的2D图形界面开发任务。

烟花代码

#include <graphics.h>
#include <math.h>
#include <time.h>
#include <stdio.h>

#define MAXNUM 15
#define WIDTH 640
#define HEIGHT 480
#define PI 3.1415926

struct Fire
{
  int nowx;
  int nowy;
  int endy;
  int radio;
  int explode;
  int rgb[3];
  COLORREF color;
}fire[MAXNUM];

void Init()
{
  for (int i = 0; i < MAXNUM; i++)
  {
    fire[i].nowx = rand() % WIDTH;
    fire[i].nowy = HEIGHT + rand() % 250 + 50;
    fire[i].endy = rand() % 100 + 10;
    fire[i].radio = rand() % 50 + 120;
    fire[i].explode = 0;
    int c[][3] = { {255, 0, 0}, {210, 190, 255}, {255, 120, 0}, {255, 0, 150}, {255, 240, 100}, {10, 255, 255}, {160, 10, 255}, {255, 200, 60} };
    int n = rand() % 8;
    fire[i].color = RGB(c[n][0], c[n][1], c[n][2]);
    fire[i].rgb[0] = c[n][0];
    fire[i].rgb[1] = c[n][1];
    fire[i].rgb[2] = c[n][2];
  }
}

void Draw()
{
  for (int i = 0; i < MAXNUM; i++)
  {
    if (fire[i].nowy > fire[i].endy)
    {
      for (int size = 5; size > 0; size--)
      {
        int temp[] = { fire[i].rgb[0], fire[i].rgb[1], fire[i].rgb[2] };
        for (int k = 0; k < 3; k++)
        {
          temp[k] += 50 * (5 - size);
          if (temp[k] > 255) temp[k] = 255;
        }
        setfillcolor(RGB(temp[0], temp[1], temp[2]));
        solidcircle(fire[i].nowx, fire[i].nowy + 15 * (10 - size), size);
      }
    }
    else
    {
      for (int a = 0; a < 360; a += 30)
      {
        for (int size = 5; size > 0; size--)
        {
          int x = cos(a * PI / 180.0) * (fire[i].explode + size * 10) + fire[i].nowx;
          int y = sin(a * PI / 180.0) * (fire[i].explode + size * 10) + fire[i].nowy + fire[i].radio / 2;
          int temp[] = { fire[i].rgb[0], fire[i].rgb[1], fire[i].rgb[2] };
          for (int k = 0; k < 3; k++)
          {
            temp[k] += 50 * (5 - size);
            if (temp[k] > 255) temp[k] = 255;
          }
          setfillcolor(RGB(temp[0], temp[1], temp[2]));
          solidcircle(x, y + (HEIGHT - y) * 0.1 + size * (size - 2), size);
        }
      }
    }
  }
}

void Move()
{
  for (int i = 0; i < MAXNUM; i++)
  {
    if (fire[i].nowy > fire[i].endy)
    {
      fire[i].nowy -= 3;
    }
    else
    {
      if (fire[i].explode >= fire[i].radio)
      {
        fire[i].nowx = rand() % WIDTH;
        fire[i].nowy = HEIGHT + rand() % 250 + 50;
        fire[i].endy = rand() % 100 + 10;
        fire[i].radio = rand() % 50 + 120;
        fire[i].explode = 0;
        int c[][3] = { {255, 0, 0}, {210, 190, 255}, {255, 120, 0}, {255, 0, 150}, {255, 240, 100}, {10, 255, 255}, {160, 10, 255}, {255, 200, 60} };
        int n = rand() % 8;
        fire[i].color = RGB(c[n][0], c[n][1], c[n][2]);
        fire[i].rgb[0] = c[n][0];
        fire[i].rgb[1] = c[n][1];
        fire[i].rgb[2] = c[n][2];
      }
      else fire[i].explode++;
    }
  }
}

……​

完整代码:https://pan.quark.cn/s/db67eb39b861

代码分析

这段代码是一个用C++编写的基于EasyX图形库的简单烟花模拟程序。以下是对该程序主要部分的详细分析:

首先,程序定义了一些常量和结构体:

- `MAXNUM` 定义了同时显示的最大烟花数量。

- `WIDTH` 和 `HEIGHT` 分别定义了窗口的宽度和高度。

- `PI` 是圆周率的近似值。

- `Fire` 结构体代表一个独立的烟花实例,其中包含了烟花当前的位置(nowx, nowy)、最终到达的高度(endy)、爆炸范围(radio)、爆炸阶段(explode)以及颜色信息。

接下来是三个函数:

1. Init()函数:

   - 用于初始化所有烟花对象,设置它们的初始位置、下落终点、半径大小以及随机选取的颜色。

   - 使用随机数生成器为每个烟花赋予不同的起始参数,并将颜色信息转换为RGB格式存储在COLORREF类型变量color中,同时也分别存储到rgb数组以便后续调整。

2. Draw()函数:

   - 根据烟花当前的状态绘制每一帧画面。

   - 当烟花处于下降阶段时,以烟花当前位置为中心,根据当前尺寸绘制一系列逐渐变淡的同心圆来表现烟花的消散效果。

   - 当烟花爆炸时,依据角度(从0到360度)和尺寸绘制多个小圆圈,形成扩散状的爆炸效果,并且随着远离中心点,颜色逐渐加深。

3. Move()函数:

   - 更新每个烟花的位置和状态。

   - 如果烟花已经落在地面(nowy > endy),则将其向上移动一定的距离。

   - 若烟花已完成爆炸,则重新初始化其属性,使其再次从顶部开始落下并准备爆炸;否则,增加烟花的爆炸阶段计数器。

最后定义主函数main():

- 初始化随机种子,确保每次运行产生的随机结果不同。

- 启动图形界面,设置屏幕分辨率。

- 调用 `BeginBatchDraw()` 开始批处理模式绘图,提高渲染效率。

- 进入无限循环,在循环内部清除屏幕、绘制烟花、更新烟花状态,然后使用 `FlushBatchDraw()` 更新屏幕内容。

- 每次循环之间暂停2毫秒,以实现动画效果。

- 循环结束后调用 `EndBatchDraw()` 结束批处理绘图,并关闭图形界面。

总的来说,这个程序通过创建和维护一组烟花对象,利用图形库提供的绘图函数动态地模拟出多烟花绽放和爆炸的效果。

运行结果

图片

写在后面

喜欢本篇内容的小伙伴可以给博主点个赞嘛~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1978966.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YOLOv8网络轻量化改进之ShuffleNetV2主干

目录 一、理论模型 二、代码修改 一、理论模型 首先是shuffleNet网络的理论介绍部分 论文地址:1807.11164 (arxiv.org) 这里是shufflenetv2网络的主要模块的结构,在网络结构中,通过步长来选择这两种不同的模块。步长为1的时候,对应模块c,步长为2的时候对应模块d。 二、…

Java 文件操作和 IO

1. 认识文件 狭义上的文件&#xff08;file&#xff09;&#xff1a;针对硬盘这种持久化存储的 IO 设备&#xff0c;当我们想要进行数据保存时&#xff0c;往往不是保存成一个整体&#xff0c;而是独立成一个个的单位进行保存&#xff0c;这种独立的单位就被抽象成文件的概念 …

2024第五届华数杯数学建模竞赛C题思路+代码

目录 原题背景背景分析 问题一原题思路Step1:数据读取与处理Step2:计算最高评分&#xff08;Best Score, BS&#xff09;Step3:统计各城市的最高评分&#xff08;BS&#xff09;景点数量 程序读取数据数据预处理 问题二原题思路Step1: 定义评价指标Step2: 收集数据Step3: 标准化…

【linux深入剖析】初识线程---线程概念

&#x1f341;你好&#xff0c;我是 RO-BERRY &#x1f4d7; 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f384;感谢你的陪伴与支持 &#xff0c;故事既有了开头&#xff0c;就要画上一个完美的句号&#xff0c;让我们一起加油 目录 1. Linux线程概念什么是线…

RK3568笔记五十二:HC-SR04超声波模块驱动测试

若该文为原创文章&#xff0c;转载请注明原文出处。 一、HC-SR04简介 HC-SR04超声波模块是一种常用于距离测量和障碍物检测的模块。它通过发射超声波信号并接收回波来计算所测量物体与传感器之间的距离。 1、基本原理 TRIG引脚负责发送超声波脉冲串。此引脚应设置为高电平10…

4.指令系统

4.指令系统 指令系统概述—复习指导 一个好的框架是学习掌握知识的捷径&#xff0c;能够帮助我们更快的掌握所学知识&#xff0c;下面从王道计算机组成原理书本第四章-指令系统出发&#xff0c;讲解一下第四章的知识框架组成&#xff0c;下面是指令系统这一章节的思维导图和详…

【doghead】h264测试文件、读取、模拟采集时间戳及packtizer

使用原生代码但是原生仓库没有264文件使用绝对路径但是在wsl2的ubuntu22.04中构建添加264文件路径 clion IDE : 来自RtspServer 的测试264文件 PHZ76 提供的264文件读取264成功:按照帧读取 这里是模拟采集视频帧? 定时器:

【Rust练习】7.引用与借用

练习题来自&#xff1a;https://practice-zh.course.rs/ownership/borrowing.html 1 fn main() {let x 5;// 填写空白处let p __;println!("x 的内存地址是 {:p}", p); // output: 0x16fa3ac84 }其实Rust的借用&#xff0c;就类似C的指针和引用&#xff0c;如果你…

面对挫折和恶语 良好心态非常重要

你等年纪轻轻一遇挫折,便松散懈怠,日后怎成大器? 虽称满腹经纶,却是鸡肠鼠肚,连几句恶语都容它不下,你等要记住,为人者,有大度成大器也!夫处世之道,即应变之术, 岂可偏执一端? 【迷茫时&#xff0c;不妨听听司马仲达的人生格言】https://www.bilibili.com/video/BV1JF411i7…

React--》掌握styled-components重塑React样式管理

想象一下&#xff0c;如果你的React组件不仅能自描述其逻辑&#xff0c;还能直接声明自己的样式&#xff0c;这种“所见即所得”的编程体验是不是让人心动不已&#xff1f;styled-components正是这样一把钥匙&#xff0c;它彻底颠覆了我们对React样式管理的传统认知&#xff0c…

Python 中单例模式实现的几种方式

在设计模式中&#xff0c;单例模式是经常被提及和使用的一种模式。它保证一个类只有一个实例&#xff0c;并提供全局访问点。在Python中&#xff0c;有多种实现单例模式的方法。那么&#xff0c;如何选择合适的方法来实现单例模式呢&#xff1f; 单例模式在Python中的几种实现方…

软件设计师笔记-网络基础知识

计算机网络的发展 计算机网络&#xff08;计算机技术通信技术&#xff09;的发展是一个逐步演进的过程&#xff0c;从简单的具有通信功能的单机系统&#xff0c;到复杂的以局域网及因特网为支撑环境的分布式计算机系统&#xff0c;这一历程经历了多个关键阶段&#xff1a; #me…

大模型是否潜在地进行多跳推理?

人工智能咨询培训老师叶梓 转载标明出处 以往的研究表明&#xff0c;基于Transformer的LLMs能够在参数中存储和检索事实信息&#xff0c;以完成简单提示&#xff0c;例如“Stevie Wonder的母亲是谁”。此外&#xff0c;当必要信息明确给出时&#xff0c;LLMs表现出了显著的上下…

JS优化了4个自定义倒计时

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><title>4个自定义倒计时</title><style>* {margin: 0;padding: 0;box-sizing: border-box;user-select: none;body {background: #0b1b2c;}}hea…

(javaweb)maven--Java项目的构建工具

目录 一.Maven概述 二.Idea导入maven项目 三.maven核心功能--依赖管理 四.依赖管理--依赖传递 五.依赖管理--依赖范围 六.依赖管理--生命周期 一.Maven概述 1.管理和构建Java项目的工具 2.Apache开源&#xff08;源代码开放&#xff09; 3. 4. Maven核心配置文件&#xff…

解题 - 左旋字符串的三种解法(思路)

文章目录 前言&#xff1a; 题干&#xff1a; 解题思路&#xff1a; 思路一&#xff1a; 思路二&#xff1a; 思路三&#xff1a; 小结 前言&#xff1a; 路漫漫其修远兮&#xff0c;吾将上下而求索。 题干&#xff1a; 解题思路&#xff1a; 创建变量k &#xff0c;用…

【知识专栏丨python数分实战】关于电商零售客户细分数据分析及可视化

今天这篇文章将给大家介绍关于电商零售客户细分数据分析及可视化的案例分析。 01 数据整理 导入数据 import pandas as pdimport numpy as npfrom pyecharts.charts import *import pyecharts.options as opts import warningswarnings.filterwarnings(ignore) 数据读取及预…

shell的基础介绍

文章目录 shell数组读取数组关联数组获取数组的长度 Shell运算符算术运算符关系运算符布尔运算符逻辑运算符字符串运算符文件测试运算符 Shell echo命令1.显示普通字符串2.显示转义字符3.显示变量4.显示换行5.显示不换行6.显示结果定向至文件7.原样输出字符串&#xff0c;不进行…

Macbook上运行Windows系统工具Parallels Desktop19

亲爱的笔记本小能手们&#xff0c;你们是否也有这样的困扰&#xff1a;在Macbook上运行Windows系统&#xff0c;却发现虚拟机软件要么卡顿&#xff0c;要么操作复杂&#xff1f;别急&#xff0c;今天就给你们种草一款神器——Parallels Desktop 19。 Parallels Desktop最新绿色…