当前位置: 首页 > news >正文

C/C++流星雨

流星雨

系列文章

序号直达链接
1C/C++爱心代码
2C/C++跳动的爱心
3C/C++李峋同款跳动的爱心代码
4C/C++满屏飘字表白代码
5C/C++大雪纷飞代码
6C/C++烟花代码
7C/C++黑客帝国同款字母雨
8C/C++樱花树代码
9C/C++奥特曼代码
10C/C++精美圣诞树
11C/C++俄罗斯方块
12C/C++贪吃蛇
13C/C++孤单又灿烂的神-鬼怪
14C/C++闪烁的爱心
15C/C++哆啦A梦
16C/C++简单圣诞树
17C/C++小宇宙
18C/C++冰墩墩
19C/C++七彩花朵
20C/C++玫瑰花
21C/C++小猪佩奇
22C/C++简易爱心

写在前面

C/C++语言实现流星雨动态效果的完整代码。

完整代码

#include <stdio.h>
#include <graphics.h> 
#include <conio.h>
#include <math.h>
#include <Windows.h>
#include <time.h>
#include <mmsystem.h>
#pragma comment(lib, "winmm.lib")#define PI 3.1415926535897932384624
#define MAXSTAR 300  // 限制星星数量,减少性能消耗
#define MAXMETEOR 199 // 流星数量// 定义图片变量
IMAGE img1, img2, background;// 星星结构体
struct Star
{int x, y;int speed;int color;
} star[MAXSTAR];// 流星结构体
struct Meteor
{int x, y;int speed;int style;
} meteor[MAXMETEOR];// 初始化星星
void initStar(int i)
{star[i].x = rand() % 1500;star[i].y = rand() % 1000;star[i].speed = rand() % 8 + 1;star[i].color = RGB(rand() % 256, rand() % 256, rand() % 256);
}// 绘制并移动星星
void drawAndMoveStar(int i)
{setfillcolor(star[i].color);solidcircle(star[i].x, star[i].y, 2); // 绘制小圆作为星星star[i].x += star[i].speed;if (star[i].x > 1500){initStar(i); // 重新初始化超出边界的星星}
}// 初始化流星
void initMeteor(int i)
{meteor[i].x = rand() % 2200 - 1200; meteor[i].y = -400;meteor[i].speed = rand() % 15 + 5;  // 速度范围 [5,19]meteor[i].style = rand() % 2;       // [0,1]
}// 更新并绘制流星
void updateAndDrawMeteor()
{for (int i = 0; i < MAXMETEOR; i++){// 移动流星meteor[i].x = meteor[i].x + meteor[i].speed / 2;meteor[i].y = meteor[i].y + meteor[i].speed / 2;// 绘制流星if (meteor[i].style == 0){putimage(meteor[i].x, meteor[i].y, &img1, SRCPAINT);}else{putimage(meteor[i].x, meteor[i].y, &img2, SRCPAINT);}// 流星超出边界重新初始化if (meteor[i].x > 1500 || meteor[i].y > 1000){initMeteor(i);}}
}// 主函数
int main()
{// 加载图片loadimage(&img1, "1.jpg", 50, 50);loadimage(&img2, "2.jpg", 50, 50);loadimage(&background, "background.jpg", 1500, 1000);srand((unsigned int)time(NULL));// 创建图形窗口HWND hwnd = initgraph(1500, 1000);ShowWindow(hwnd, 3);// 播放背景音乐mciSendString("open 小幸运.mp3 alias MM", 0, 0, 0);mciSendString("play MM repeat", 0, 0, 0);// 初始化星星和流星for (int i = 0; i < MAXSTAR; i++){initStar(i);}for (int i = 0; i < MAXMETEOR; i++){initMeteor(i);}// 主绘图循环while (1){BeginBatchDraw();// 绘制背景putimage(0, 0, &background);// 绘制并移动星星for (int i = 0; i < MAXSTAR; i++){drawAndMoveStar(i);}// 更新并绘制流星updateAndDrawMeteor();EndBatchDraw();// 控制帧率Sleep(10);}_getch();closegraph();return 0;
}

代码分析

这段代码是一个使用 EasyX 图形库编写的 C++ 程序,它创建了一个模拟星空效果的图形窗口。程序中包含了星星和流星的动画效果,并且背景音乐在循环播放。下面是对这段代码的详细分析。

包含的头文件

  • graphics.h:EasyX 库的图形函数。
  • conio.h:提供控制台输入输出功能,如 _getch() 用于等待按键输入。
  • math.h:数学运算函数。
  • Windows.hmmsystem.h:Windows API 头文件,以及多媒体支持。

宏定义

  • PI:圆周率的值。
  • MAXSTAR:设定最大星星数量为300个,以限制性能消耗。
  • MAXMETEOR:设定最大流星数量为199个。

结构体定义

  • Star:表示一个星星,包含位置(x, y)、速度(speed)和颜色(color)。
  • Meteor:表示一个流星,包含位置(x, y)、速度(speed)和样式(style),其中样式决定了使用哪个图片作为流星图像。

函数定义

  • initStar(int i):初始化第i颗星星的位置、速度和颜色。
  • drawAndMoveStar(int i):绘制第i颗星星并更新其位置;如果星星移出了屏幕,则重新初始化。
  • initMeteor(int i):初始化第i颗流星的位置、速度和样式。
  • updateAndDrawMeteor():更新所有流星的位置,并根据它们的样式绘制相应的图片;如果流星移出了屏幕,则重新初始化。

主函数 main()

  • 加载了三张图片资源,分别用作两种不同样式的流星图像 (img1, img2) 和背景图像 (background)。
  • 使用当前时间来播种随机数生成器 (srand((unsigned int)time(NULL))),确保每次运行时星星和流星的初始状态都是不同的。
  • 创建了一个1500x1000像素的图形窗口,并显示出来。
  • 打开并循环播放名为“小幸运.mp3”的背景音乐。
  • 初始化所有星星和流星的状态。
  • 进入主绘图循环,持续不断地绘制背景、移动和绘制星星及流星,直到用户关闭程序。
  • 在主循环内使用 BeginBatchDraw()EndBatchDraw() 来批量处理绘图命令,提高效率。
  • 控制帧率为大约每秒100帧(通过 Sleep(10) 实现)。
  • 最后,在用户按键之前保持图形窗口打开,并在结束时清理图形环境。

请注意,为了正确运行这段代码,你需要有 EasyX 图形库的开发环境配置好,并且需要准备对应的图片文件和音频文件。此外,由于这个程序是无限循环的,通常应该有一个退出条件或事件监听机制,例如检测用户的关闭窗口操作或者特定键的按下,以便能够优雅地退出程序。

写在后面

我是一只有趣的兔子,感谢你的喜欢!

相关文章:

C/C++流星雨

系列文章 序号直达链接1C/C爱心代码2C/C跳动的爱心3C/C李峋同款跳动的爱心代码4C/C满屏飘字表白代码5C/C大雪纷飞代码6C/C烟花代码7C/C黑客帝国同款字母雨8C/C樱花树代码9C/C奥特曼代码10C/C精美圣诞树11C/C俄罗斯方块12C/C贪吃蛇13C/C孤单又灿烂的神-鬼怪14C/C闪烁的爱心15C/C…...

计算机网络:传输层、应用层、网络安全、视频/音频/无线网络、下一代因特网

目录 &#xff08;五&#xff09;传输层 1&#xff0e;传输层寻址与端口 2&#xff0e;无连接服务与面向连接服务 3. 传输连接的建立与释放 4. UDP 的优点 5. UDP 和 TCP 报文段报头格式 6. TCP 的流量控制 7&#xff0e;TCP 的拥塞控制 8. TCP 传送连接的管理 &#…...

[漏洞挖掘与防护] 05.CVE-2018-12613:phpMyAdmin 4.8.1后台文件包含缺陷复现及防御措施

这是作者新开的一个专栏——“漏洞挖掘与防护”,前期会复现各种经典和最新漏洞,并总结防护技巧;后期尝试从零学习漏洞挖掘技术,包括Web漏洞和二进制及IOT相关漏洞,以及Fuzzing技术。新的征程,新的开启,漫漫长征路,偏向虎山行。享受过程,感谢您的陪伴,一起加油~ 欢迎关…...

GroundingDINO微调训练_训练日志解释

文章目录 1. 训练日志1. Epoch 和 Iteration2. Learning Rate&#xff08;学习率&#xff09;3. ETA&#xff08;预计剩余时间&#xff09;4. Time 和 Data Time5. Memory6. Gradient Norm&#xff08;梯度范数&#xff09;7. Loss&#xff08;损失&#xff09;8. Individual L…...

【0362】Postgres内核 XLogReaderState readBuf 有完整 XLOG page header 信息 ? ( 7 )

上一篇: 【0361】Postgres内核 page_read 读取所请求数据长度(至少 short page header)( 6 ) 文章目录 1. 检查 page_read 返回值 readLen2. 根据 readBuf 计算 XLogPageHeader 大小2.1 验证 XLOG Page header2.2 更新 XLogReaderState 读取状态信息1. 检查 page_read 返回…...

H5接入Steam 获取用户数据案例 使用 OpenID 登录绑定公司APP账户 steam公开用户信息获取 steam webapi文档使用

官方文档地址 1.注册 Steam API Key&#xff1a; 你需要一个 Steam Web API Key&#xff0c;可以在 Steam API Key 页面 获取。https://steamcommunity.com/dev/apikey 这里开发做demo用自己steam账户的就好&#xff0c;后续上线要用公司的账户 2.使用 OpenID 登录&#xff…...

pytorch多GPU训练教程

pytorch多GPU训练教程 文章目录 pytorch多GPU训练教程1. Torch 的两种并行化模型封装1.1 DataParallel1.2 DistributedDataParallel 2. 多GPU训练的三种架构组织方式2.2 数据不拆分&#xff0c;模型拆分&#xff08;Model Parallelism&#xff09;2.3 数据拆分&#xff0c;模型…...

力扣--LCR 178.训练计划VI

题目 教学过程中&#xff0c;教练示范一次&#xff0c;学员跟做三次。该过程被混乱剪辑后&#xff0c;记录于数组 actions&#xff0c;其中 actions[i] 表示做出该动作的人员编号。请返回教练的编号。 示例 1&#xff1a; 输入&#xff1a;actions [5, 7, 5, 5] 输出&#…...

Linux 网络接口配置

在 Linux 中,网络接口配置文件用于控制系统中的软件网络接口,并通过接口实现对网络设备的控制。当系统启动时,系统通过这些接口配置文件决定启动哪些接口,以及如此对这些接口进行配置. 在 Linux 中,网络接口配置文件用于控制系统中的软件网络接口,并通过这些接口实现对网络…...

【从零开始入门unity游戏开发之——C#篇01】理论开篇

文章目录 前言前置条件什么是编程&#xff1f;什么是代码&#xff1f;什么是编程语言&#xff1f;常见的编程语言什么是C#&#xff1f;学习Unity为什么要先学习C#&#xff1f;选择适合自己的IDE集成开发环境VSCode安装和环境配置VSCode调试模式专栏推荐完结 前言 这个系列我想…...

ABAP开发-批量导入BAPI和BDC_1

系列文章目录 文章目录 系列文章目录[TOC](文章目录) 前言一、概念二、BDC和BAPI数据导入1、BDC数据导入&#xff08;录屏&#xff09;2、BAPI数据导入 三、实例1、BAPI2、BDC 总结 前言 一、概念 SAP中&#xff0c;对一个事务码反复操作并且达到批量处理数据的效果&#xff0…...

RabbitMQ七种工作模式之 RPC通信模式, 发布确认模式

文章目录 六. RPC(RPC通信模式)客户端服务端 七. Publisher Confirms(发布确认模式)1. Publishing Messages Individually(单独确认)2. Publishing Messages in Batches(批量确认)3. Handling Publisher Confirms Asynchronously(异步确认) 六. RPC(RPC通信模式) 客⼾端发送消息…...

并非传统意义上的整体二分

是的&#xff0c;如标题所见&#xff0c;本文章会以作者所理解的整体二分思想来介绍一系列整体二分食用方法。 一下内容均是作者本人理解&#xff0c;可能会与算法本身冲突。 1 本质 1.1 板子及从中的启发 我们在做主席树板子的时候&#xff0c;如果使用整体二分&#xff0…...

PostgreSQL的一主一从集群搭建部署 (同步)

一、实验环境 虚拟机名IP身份简称keep-postgres12-node1192.168.122.87主节点node1keep-postgres12-node2192.168.122.89备节点node2 二、安装数据库 源码包方式&#xff08;主&#xff09; 1、创建用户 [rootkeep-postgres12-node1 ~]# groupadd postgres [rootkeep-post…...

ios逆向某新闻 md5+aes

本期的案例比较简单&#xff0c;也许是ios逆向算法本来就比较简单的原因&#xff0c;所以前面我就多扯一些爬虫和逆向的东西。之前写的文章都是js逆向和android逆向的案例&#xff0c;这也是首篇ios的案例&#xff0c;所以会从入门开始讲起。 3大逆向对比 首先爬虫工程师大部…...

grpc的负载均衡

grpc的负载均衡分为client-side load balance和server-side load balance。 所谓的“客户端负载均衡”是指主调方调用被调方的时候&#xff0c;在grpc.DialContext里需要指定grpc.WithDefaultServiceConfig&#xff0c;这个DefaultServiceConfig默认是用pick-first策略。也支持…...

提升搜索体验!—— 推出 Elastic Rerank 模型(技术预览版)

作者&#xff1a;来自 Elastic Shubha Anjur Tupil 几分钟内即可开始使用 Elastic Rerank 模型&#xff1a;强大的语义搜索功能&#xff0c;无需重新索引&#xff0c;提供灵活性和成本控制&#xff1b;高相关性、顶级性能和文本搜索效率。 使用我们全新的先进跨编码器 Elastic …...

【51单片机】程序实验1112.外部中断-定时器中断

主要参考学习资料&#xff1a;B站【普中官方】51单片机手把手教学视频 前置知识&#xff1a;C语言 单片机套装&#xff1a;普中STC51单片机开发板A4标准版套餐7 码字不易&#xff0c;求点赞收藏加关注(•ω•̥) 有问题欢迎评论区讨论~ 目录 程序实验11&12.外部中断-定时器…...

webrtc-java:引领Java进入实时通信新时代

webrtc-java&#xff1a;引领Java进入实时通信新时代 项目地址:https://gitcode.com/gh_mirrors/we/webrtc-java 在现代互联网应用中&#xff0c;实时通信&#xff08;Real-Time Communication, RTC&#xff09;已成为连接人们的桥梁。而说起RTC技术的先锋&#xff0c;不得不…...

TongWeb7-东方通快速使用手册

TongWeb7-东方通 快速使用手册 文章目录 第1章 TongWeb7 产品介绍 1.1 概述1.2 规范支持 第2章 TongWeb7 安装 2.1 TongWeb7 安装要求 2.1.1 TongWeb7 支持的操作系统2.1.2 系统要求2.1.3 其他 2.2 安装TongWeb72.3TongWeb7 目录结构说明2.4 TongWeb7 的启动和停止 第3章 应用…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...