利用 C++面向对象的编程思想,设计并实现多束烟花上升并在一定高度绽放绽放效 果

时间: 2024-03-06 21:47:48 浏览: 17
以下是一个简单的 C++ 代码示例,用于实现多束烟花上升并在一定高度绽放绽放效果: ```c++ #include <iostream> #include <vector> #include <cstdlib> #include <ctime> #include <windows.h> using namespace std; const int SCREEN_WIDTH = 80; const int SCREEN_HEIGHT = 24; class Firework { public: Firework(int x, int y) : m_x(x), m_y(y), m_height(0), m_exploded(false) {} void rise(); void explode(); bool is_exploded() { return m_exploded; } private: int m_x; int m_y; int m_height; bool m_exploded; }; void Firework::rise() { if (m_height >= SCREEN_HEIGHT / 2) { explode(); } else { m_height++; cout << "\033[" << m_y - m_height << ";" << m_x << "H*"; } } void Firework::explode() { m_exploded = true; static const vector<int> colors = { 31, 32, 33, 34, 35, 36, 37 }; static const vector<char> shapes = { '*', '+', '-', '=', '#' }; static const int num_particles = 50; for (int i = 0; i < num_particles; i++) { int color = colors[rand() % colors.size()]; char shape = shapes[rand() % shapes.size()]; int x_offset = rand() % 6 - 2; int y_offset = rand() % 6 - 2; int x = m_x + x_offset; int y = m_y - m_height + y_offset; if (x >= 0 && x < SCREEN_WIDTH && y >= 0 && y < SCREEN_HEIGHT) { cout << "\033[" << y << ";" << x << "H\033[" << color << "m" << shape << "\033[0m"; } } } int main() { srand(time(nullptr)); vector<Firework> fireworks; while (true) { if (rand() % 10 == 0) { int x = rand() % SCREEN_WIDTH; int y = SCREEN_HEIGHT - 1; fireworks.emplace_back(x, y); } for (auto& firework : fireworks) { if (!firework.is_exploded()) { firework.rise(); } } fireworks.erase(remove_if(fireworks.begin(), fireworks.end(), [](const Firework& firework) { return firework.is_exploded(); }), fireworks.end()); Sleep(50); } return 0; } ``` 该代码利用了面向对象的编程思想,设计了一个 Firework 类来表示每个烟花。每个烟花具有 x、y 坐标、高度和是否已经绽放的状态。在主循环中,首先根据一定概率生成新的烟花,并将其添加到烟花向量中。然后遍历烟花向量,逐个调用 rise() 方法使其上升,在达到一定高度后调用 explode() 方法绽放烟花。在 explode() 方法中,生成一定数量的颜色、形状随机的粒子,并输出到屏幕上。最后,将已经绽放的烟花从烟花向量中移除。

相关推荐

最新推荐

recommend-type

【长春理工大学】面向对象程序设计下期末复习浏览题.pdf

这个是我本人在大一下学期期间整理的C++题库,涵盖机考(2018级及以后的南区软件工大一下学期程面向对象程序设计期末考试题库)中几乎所有的题目,并配有解析,方便记忆,考试这个东西……最主要还是自己会,我自己...
recommend-type

C++稀疏矩阵的各种基本运算并实现加法乘法

今天小编就为大家分享一篇关于C++稀疏矩阵的各种基本运算并实现加法乘法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
recommend-type

C++面向对象实现五子棋小游戏

本文介绍了如何运用面向对象思想进行五子棋游戏的设计与开发,与面向过程程序设计比较,面向对象程序设计更易于实现对现实世界的描述,提高软件的扩展性和可维护性。附上最终的程序源码,推荐给大家,有需要的小伙伴...
recommend-type

C++_面向对象程序设计_谭浩强 word完整版

第1篇 基 本 知 识 第1章 C++的初步知识 第2章 数据类型与表达式 第2篇 面向过程的程序设计 ... 第4篇 面向对象的程序设计 第11章 继承与派生 第12章 多态性与虚函数 第13章 输入输出流 第14章 C++工具
recommend-type

面向对象程序设计(c++)课程设计实验报告

熟练掌握面向对象程序设计的编程思想,能够使用c++语法在编程中使用类、继承、重载、多态、模板等概念;熟练使用VC等集成环境进行编程。 要求: 1. 利用面向对象的方法对业务进行系统分析; 2. 对各个功能模块分析...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

如何用python编写api接口

在Python中编写API接口可以使用多种框架,其中比较流行的有Flask和Django。这里以Flask框架为例,简单介绍如何编写API接口。 1. 安装Flask框架 使用pip命令安装Flask框架: ``` pip install flask ``` 2. 编写API接口 创建一个Python文件,例如app.py,编写以下代码: ```python from flask import Flask, jsonify app = Flask(__name__) @app.route('/api/hello', methods=['GET']) def hello():
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。