C/C++流星雨
系列文章
序号 | 直达链接 |
1 | C/C++爱心代码 |
2 | C/C++跳动的爱心 |
3 | C/C++李峋同款跳动的爱心代码 |
4 | C/C++满屏飘字表白代码 |
5 | C/C++大雪纷飞代码 |
6 | C/C++烟花代码 |
7 | C/C++黑客帝国同款字母雨 |
8 | C/C++樱花树代码 |
9 | C/C++奥特曼代码 |
10 | C/C++精美圣诞树 |
11 | C/C++俄罗斯方块 |
12 | C/C++贪吃蛇 |
13 | C/C++孤单又灿烂的神-鬼怪 |
14 | C/C++闪烁的爱心 |
15 | C/C++哆啦A梦 |
16 | C/C++简单圣诞树 |
17 | C/C++小宇宙 |
18 | C/C++冰墩墩 |
19 | C/C++七彩花朵 |
20 | C/C++玫瑰花 |
21 | C/C++小猪佩奇 |
22 | C/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.h
和mmsystem.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…...
计算机网络:传输层、应用层、网络安全、视频/音频/无线网络、下一代因特网
目录 (五)传输层 1.传输层寻址与端口 2.无连接服务与面向连接服务 3. 传输连接的建立与释放 4. UDP 的优点 5. UDP 和 TCP 报文段报头格式 6. TCP 的流量控制 7.TCP 的拥塞控制 8. TCP 传送连接的管理 &#…...
[漏洞挖掘与防护] 05.CVE-2018-12613:phpMyAdmin 4.8.1后台文件包含缺陷复现及防御措施
这是作者新开的一个专栏——“漏洞挖掘与防护”,前期会复现各种经典和最新漏洞,并总结防护技巧;后期尝试从零学习漏洞挖掘技术,包括Web漏洞和二进制及IOT相关漏洞,以及Fuzzing技术。新的征程,新的开启,漫漫长征路,偏向虎山行。享受过程,感谢您的陪伴,一起加油~ 欢迎关…...
GroundingDINO微调训练_训练日志解释
文章目录 1. 训练日志1. Epoch 和 Iteration2. Learning Rate(学习率)3. ETA(预计剩余时间)4. Time 和 Data Time5. Memory6. Gradient Norm(梯度范数)7. Loss(损失)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: 你需要一个 Steam Web API Key,可以在 Steam API Key 页面 获取。https://steamcommunity.com/dev/apikey 这里开发做demo用自己steam账户的就好,后续上线要用公司的账户 2.使用 OpenID 登录ÿ…...
pytorch多GPU训练教程
pytorch多GPU训练教程 文章目录 pytorch多GPU训练教程1. Torch 的两种并行化模型封装1.1 DataParallel1.2 DistributedDataParallel 2. 多GPU训练的三种架构组织方式2.2 数据不拆分,模型拆分(Model Parallelism)2.3 数据拆分,模型…...
力扣--LCR 178.训练计划VI
题目 教学过程中,教练示范一次,学员跟做三次。该过程被混乱剪辑后,记录于数组 actions,其中 actions[i] 表示做出该动作的人员编号。请返回教练的编号。 示例 1: 输入:actions [5, 7, 5, 5] 输出&#…...
Linux 网络接口配置
在 Linux 中,网络接口配置文件用于控制系统中的软件网络接口,并通过接口实现对网络设备的控制。当系统启动时,系统通过这些接口配置文件决定启动哪些接口,以及如此对这些接口进行配置. 在 Linux 中,网络接口配置文件用于控制系统中的软件网络接口,并通过这些接口实现对网络…...
【从零开始入门unity游戏开发之——C#篇01】理论开篇
文章目录 前言前置条件什么是编程?什么是代码?什么是编程语言?常见的编程语言什么是C#?学习Unity为什么要先学习C#?选择适合自己的IDE集成开发环境VSCode安装和环境配置VSCode调试模式专栏推荐完结 前言 这个系列我想…...
ABAP开发-批量导入BAPI和BDC_1
系列文章目录 文章目录 系列文章目录[TOC](文章目录) 前言一、概念二、BDC和BAPI数据导入1、BDC数据导入(录屏)2、BAPI数据导入 三、实例1、BAPI2、BDC 总结 前言 一、概念 SAP中,对一个事务码反复操作并且达到批量处理数据的效果࿰…...
RabbitMQ七种工作模式之 RPC通信模式, 发布确认模式
文章目录 六. RPC(RPC通信模式)客户端服务端 七. Publisher Confirms(发布确认模式)1. Publishing Messages Individually(单独确认)2. Publishing Messages in Batches(批量确认)3. Handling Publisher Confirms Asynchronously(异步确认) 六. RPC(RPC通信模式) 客⼾端发送消息…...
并非传统意义上的整体二分
是的,如标题所见,本文章会以作者所理解的整体二分思想来介绍一系列整体二分食用方法。 一下内容均是作者本人理解,可能会与算法本身冲突。 1 本质 1.1 板子及从中的启发 我们在做主席树板子的时候,如果使用整体二分࿰…...
PostgreSQL的一主一从集群搭建部署 (同步)
一、实验环境 虚拟机名IP身份简称keep-postgres12-node1192.168.122.87主节点node1keep-postgres12-node2192.168.122.89备节点node2 二、安装数据库 源码包方式(主) 1、创建用户 [rootkeep-postgres12-node1 ~]# groupadd postgres [rootkeep-post…...
ios逆向某新闻 md5+aes
本期的案例比较简单,也许是ios逆向算法本来就比较简单的原因,所以前面我就多扯一些爬虫和逆向的东西。之前写的文章都是js逆向和android逆向的案例,这也是首篇ios的案例,所以会从入门开始讲起。 3大逆向对比 首先爬虫工程师大部…...
grpc的负载均衡
grpc的负载均衡分为client-side load balance和server-side load balance。 所谓的“客户端负载均衡”是指主调方调用被调方的时候,在grpc.DialContext里需要指定grpc.WithDefaultServiceConfig,这个DefaultServiceConfig默认是用pick-first策略。也支持…...
提升搜索体验!—— 推出 Elastic Rerank 模型(技术预览版)
作者:来自 Elastic Shubha Anjur Tupil 几分钟内即可开始使用 Elastic Rerank 模型:强大的语义搜索功能,无需重新索引,提供灵活性和成本控制;高相关性、顶级性能和文本搜索效率。 使用我们全新的先进跨编码器 Elastic …...
【51单片机】程序实验1112.外部中断-定时器中断
主要参考学习资料:B站【普中官方】51单片机手把手教学视频 前置知识:C语言 单片机套装:普中STC51单片机开发板A4标准版套餐7 码字不易,求点赞收藏加关注(•ω•̥) 有问题欢迎评论区讨论~ 目录 程序实验11&12.外部中断-定时器…...
webrtc-java:引领Java进入实时通信新时代
webrtc-java:引领Java进入实时通信新时代 项目地址:https://gitcode.com/gh_mirrors/we/webrtc-java 在现代互联网应用中,实时通信(Real-Time Communication, RTC)已成为连接人们的桥梁。而说起RTC技术的先锋,不得不…...
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章 应用…...
JVM内存区块
大家好,经过前两篇文章的介绍,大家对数组也有了一定了解,其实所有的数组都是对象,我们在方法中引用数组的变量叫做引用变量(简称引用),那么数组到底是存放在哪里的呢,为什么引用再出…...
C语言单元总结
黑色加粗表示刷题刷到这样的题 红色加粗表示可能重要 单元一 程序设计宏观认识 C语言程序框架 C语言程序最基本的程序框架由两部分构成,分别是 1) 编译预处理 2) 函数组 C语言程序构成 C程序最大的特点就是所有的程序都是用函数来装配的,函数是构成…...
通过PS和Unity制作2D动画之一:创建形象
1、通过路径画出轮廓 使用路径的过程中,需要注意: 1)如果使用形状工具作图,比如使用椭圆工具画正圆形,需要设置其属性为“路径”。 2)使用路径选择工具,再按住Alt键点击某个路径,可…...
Notable是一款优秀开源免费的Markdown编辑器
一、Notable简介 Notable是一款开源的跨平台Markdown编辑器,支持Linux、MacOS、Windows以及国产操作系统等多种主流操作系统。它以其高颜值和强大的功能,成为了许多用户的首选工具。 主要特性 实时预览: Notable提供了实时预览功能&…...
基于MFC绘制门电路
MFC绘制门电路 1. 设计内容、方法与难点 本课题设计的内容包括了基本门电路中与门和非门的绘制、选中以及它们之间的连接。具体采用的方法是在OnDraw函数里面进行绘制,并设计元器件基类,派生出与门和非门,并组合了一个引脚类,在…...
C—指针初阶(2)
如果看完阁下满意的话,能否一键三连呢,我的动力就是大家的支持与肯定,冲! 二级指针 我们先看概念以及作用:用来存放一级指针的地址的指针 先看例子,我们逐一分析 我们先分析上面那个“1” 标注那里&#x…...
Linux 基础环境的开发工具以及使用(下)
1. make / Makefile 自动化构建的工具 1)引入 在我们进行一些大型的工程的时候,代码量是极其大,当我们代码在进行一系列的编译的时候,难免会出现一些错误,当我们对错误进行一系列的更改之后,难道我们需要…...
constexpr、const和 #define 的比较
constexpr、const 和 #define 的比较 一、定义常量 constexpr 定义:constexpr用于定义在编译期可求值的常量表达式。示例:constexpr int x 5;这里,x的值在编译期就确定为5。 const 定义:const表示变量在运行期间不能被修改&…...
期末复习-Hadoop综合复习
说明 以下内容仅供参考,提到不代表考到,请结合实际情况自己复习 目录 说明 一、题型及分值 二、综合案例题-部署Hadoop集群 或 部署Hadoop HA集群 案例 1:Hadoop 基础集群部署 案例 2:Hadoop HA 集群部署 案例 3ÿ…...
禁用SAP Hana错误密码锁定用户功能
背景 公司项目适配多种数据库其中包含SAP Hana,由于有同事的数据库连接工具保存了某个在用的数据库的旧密码,导致时不时会被锁用户。通过查询官方文档已解决,这里统一记录一下。 禁用密码锁定方法 以下按系统管理员和普通用户的解法分别列…...
香河网站建设/网站软件下载
转载于:https://www.cnblogs.com/panda88/p/6006372.html...
济南微网站建设/阳山网站seo
为什么80%的码农都做不了架构师?>>> package com.dy.pool;import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;/*** 在Executors类里面提供了一些静态工厂,生成一些常用的线程池。* 1. newSingleThreadEx…...
大淘客优惠券网站是怎么做的/网络服务器的功能
都说Android最近行情不好,很多人都遇到瓶颈或放弃或转行。其实这种情况17年18年也是如此,相对比之下,个人认为今年比去年好多了,Android接下来将会走向复苏的春天。 自从Google开始推出AMP项目已经有一年了。除此之外,…...
加强政府网站安全建设的通知/线上培训平台
优步正计划收购仿真软件开发商Foresight,目前正处于深入谈判。盖世汽车讯 据外媒报道,当地时间12月9日,The Information援引知情人士的话表示,优步科技公司(Uber Technologies Inc)正在就收购一家开发仿真软件的初创公司Foresight…...
济南网站建设优化/网站内容检测
一个同事问我,说他用innobackupex恢复数据后用mysqlbinlog导入增量数据时,发现数据没有导入进去并且也没有报错。 mysqlbinlog /u01/mysql_py/database/mysql3306/logs/mysql-bin.000014 /u01/mysql_py/database/mysql3306/logs/mysql-bin.000015 --sta…...
wordpress菜单底部导航/营销方案策划
最近在实施一个大型BI项目,其中KPI指标数据是按月存放的,但用户要求每天进行一次计算,并替换前一天的计算结果,直到月末不再更新为止。项目初期Oracle数据库一直性能稳定,但最近两周性能突然大幅下降。经检查ÿ…...