#include <iostream>
#include <vector>
#include <random>
#include <cmath>
#include <chrono>
#include <thread>
// 控制台大小和烟花参数
const int width = 80;
const int height = 25;
const int maxExplosionRadius = 10; // 最大爆炸半径
const int frames = 15; // 烟花爆炸持续的帧数
// 清屏函数
void clearScreen() {
// 注意:这只适用于Unix或者类Unix的系统,包括Mac和Linux
std::cout << "\033[2J\033[H";
}
// 生成随机数
int randomRange(int min, int max) {
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> distrib(min, max);
return distrib(gen);
}
// 打印字符到随机的位置模拟烟花
void printAtPosition(int x, int y, char c) {
std::cout << "\033[" << y + 1 << ";" << x + 1 << "H" << c;
}
void drawFireworks() {
clearScreen();
for (int frame = 0; frame < frames; ++frame) {
// 烟花的中心
int centerX = width / 2;
int centerY = height / 3; // 烟花比屏幕高度的1/3要低
for (int i = 0; i < 100; ++i) { // 100 个粒子
double angle = (randomRange(0, 359) * M_PI) / 180.0; // 随机角度
int radius = randomRange(0, maxExplosionRadius * (frame + 1) / frames);
// 计算每个粒子的坐标
int x = centerX + static_cast<int>(radius * cos(angle));
int y = centerY + static_cast<int>(radius * sin(angle));
if (x >= 0 && x < width && y >= 0 && y < height) {
printAtPosition(x, y, '*'); // 打印粒子
}
}
std::this_thread::sleep_for(std::chrono::milliseconds(200)); // 每帧的延迟
clearScreen();
}
}
int main() {
drawFireworks();
return 0;
}
塞车小游戏.zip
需积分: 0 187 浏览量
2024-03-16
21:18:18
上传
评论
收藏 237KB ZIP 举报
Helloworld898
- 粉丝: 0
- 资源: 1
最新资源
- 基于Javascript的诊所管理系统设计源码
- 人工智能在电子信息管理系统中的应用与效率优化研究
- 详解protobuf-c之在C语言中如何使用repeated生成数组和字符串(包含配置pb-callback-t)
- Python 程序语言设计模式思路-并发模式:消费者模式:协调生产者和消费者之间的数据交换
- pythonA*算法(A-star algorithm),寻路算法
- guitest.zip
- udp_echo.v
- udp_echo_server.v
- python双向广度优先搜索算法(Bidirectional Breadth-First Search, BBFS),寻路算法
- python迭代加深算法(Iterative Deepening Depth-First Search, IDDFS),寻路算法
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈