C/C++小宇宙代码

news2024/10/28 9:28:31

系列目录

序号直达链接
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++小宇宙代码

目录

系列目录

写在前面

完整代码

代码分析

写在后面


写在前面

C语言实现小宇宙的完整代码。

环境:C/C++

软件:Visual Studio 2022

安装教程:最新Visual Studio下载安装以及C语言环境搭建教程(含C语言入门教程)-CSDN博客

插件:EasyX

EasyX是一个专为C++初学者和爱好者设计的图形库。该库以简洁易用、功能实用为宗旨,通过封装Windows GDI接口,极大降低了C++编程中图形界面设计的复杂度,使得用户能够快速上手并实现各类图形图像处理任务。

EasyX提供了一系列丰富的API函数,涵盖了绘制基本图形(如线段、圆形、矩形等)、填充图形、显示文本、加载与保存图片、颜色设置以及鼠标键盘事件处理等功能。通过简单的函数调用,开发者可以高效地进行2D图形绘制和交互式程序设计。

总的来说,EasyX以其友好的学习曲线和高效的图形处理能力,极大地激发了C++初学者对计算机图形学的兴趣,是广大编程入门者和教育领域广泛采用的一款图形库工具。

下载安装EasyX

1.进入EasyX官网,点击下载按钮开始下载

2.下载完成后进入下载目录,双击.exe文件开始安装

3.按如下步骤进行安装即可

完整代码

#include <graphics.h>
#include <time.h>
#include <stdio.h>
#include <conio.h>
#include <vector>
using namespace std;
#define MAXSnow 99  // 设置星球总数
struct Snow
{
    double x;    // 星球横坐标
    int y;          // 星球纵坐标
    int r;        // 星球的大小
    double  speed;  // 星球下落速度
    int   color;      // 星球的颜色
};
Snow snow[MAXSnow]; // 保存所有星球
// 初始化星球
void InitSnow(int i, int width, int height)
{
    snow[i].x = rand() % width-width;
    snow[i].y = rand() % height;
    snow[i].r = rand() % 4 + 1;
    snow[i].speed = (rand() % 1000) / 1000.0 + 0.5;
    snow[i].color = (int)(255);  // 设置星球颜色
    snow[i].color = RGB(snow[i].color, snow[i].color, snow[i].color);
}
// 星球的下落函数
void MoveSnow(int i, int width, int height)
{
    setlinecolor(RGB(0, 0, 0));
    setfillcolor(RGB(0, 0, 0));
    // 删除原来的星球
    fillcircle((int)snow[i].x, snow[i].y, snow[i].r);
    // 计算星球新位置
    snow[i].x += snow[i].speed;
    if (snow[i].x > width)  InitSnow(i, width, height);
    // 画新星球
    setfillcolor(snow[i].color);
    setlinecolor(snow[i].color);
    fillcircle((int)snow[i].x, snow[i].y, snow[i].r);
}
// 主函数
int main()
{
    srand((unsigned)time(NULL));// 设置随机种子
    int ScreenWidth = GetSystemMetrics(SM_CXSCREEN);
    int ScreenHeight = GetSystemMetrics(SM_CYSCREEN);
    initgraph(ScreenWidth, ScreenHeight);// 创建绘图窗口
    HWND hwnd = GetHWnd(); // 获取绘图窗口句柄
    int x = 0; // 窗口左上角横坐标
    int y = 0; // 窗口左上角纵坐标
    SetWindowPos(hwnd, HWND_TOP, x, y, 0, 0, SWP_NOSIZE); // 设置窗口位置
    // 初始化所有星球
    for (int i = 0; i < MAXSnow; i++)
    {
        InitSnow(i, ScreenWidth, ScreenHeight);
        snow[i].x = rand() % ScreenWidth;
    }
    // 绘制星球,按任意键退出
    while (!_kbhit())
    {
        for (int i = 0; i < MAXSnow; i++)
            MoveSnow(i, ScreenWidth, ScreenHeight);
        Sleep(0);
    }
    closegraph();// 关闭绘图窗口
}

代码分析

这段代码的功能是使用 C++ 和图形库创建一个动画效果,模拟夜空中星星从屏幕顶部向下“坠落”的动态效果。下面从代码的结构和具体函数的实现角度详细分析每个部分的作用和原理。

1. 引入库和定义常量

首先,代码导入了 graphics.h(用于图形操作),time.h(用于获取当前时间以初始化随机数种子),stdio.h 和 conio.h(用于控制台输入输出操作),以及 <vector>(用于创建动态数组)。接着,用 #define 定义了一个常量 MAXSnow,它的值为 99,表示星星的数量上限。这个常量在定义和使用时可能会影响动画的流畅性和复杂度。

2. 定义结构体 Snow

代码定义了一个 Snow 结构体,用于保存单个星星的各种属性:

  • x:星星的横坐标。

  • y:星星的纵坐标。

  • r:星星的半径。

  • speed:星星的下落速度。

  • color:星星的颜色,使用整数表示。

结构体定义的目的是将星星的属性进行组合,以便于统一管理和操作。

3. 初始化星星的函数 InitSnow

InitSnow 函数用于初始化星星的各项属性。参数 i 表示第 i 个星星,width 和 height 分别是屏幕的宽度和高度。函数中的主要操作包括:

  • x 的取值为随机值 rand() % width-width,产生一个在屏幕范围内的负值 x 坐标,使星星从屏幕左边缘外的位置开始显示。

  • y 的取值为随机高度值 rand() % height,使星星的初始纵坐标也随机。

  • r 的值为 rand() % 4 + 1,即星星的大小在 1 到 4 的范围内变化。

  • speed 的取值为 (rand() % 1000) / 1000.0 + 0.5,保证星星下落速度在 0.5 到 1.5 之间。

  • color 的初始值为 255,然后调用 RGB 函数生成灰度值,使星星呈现白色或灰色的效果。

4. 星星的下落函数 MoveSnow

MoveSnow 函数用于更新星星位置,从而产生下落效果。函数内的操作顺序为:

  • 设置填充颜色和线条颜色为黑色(即背景色),删除上次绘制的星星位置。

  • 更新星星的 x 坐标,将其增加一个 speed 值。如果 x 超过屏幕宽度,则说明星星已经超出屏幕右边缘,这时重新初始化该星星的参数,以实现循环显示效果。

  • 重新绘制星星,新星星的颜色使用 InitSnow 设置的 color 值。

这种方式通过快速更新星星的位置,再用背景色覆盖旧位置并重新绘制新的位置,达到流畅的动态下落效果。

5. 主函数 main

main 函数中包含了整个动画的初始化和循环逻辑:

  • 使用 srand 函数初始化随机数种子,使星星的初始位置、速度、大小等属性随机分布。

  • 获取屏幕宽度和高度 ScreenWidth 和 ScreenHeight

  • 调用 initgraph 函数,创建图形窗口,并设置窗口大小与屏幕一致。

  • 使用 GetHWnd() 获取窗口句柄 hwnd,然后调用 SetWindowPos 将窗口位置设置为屏幕左上角(0, 0),保证窗口全屏显示。

在 for 循环中,InitSnow 函数被依次调用,初始化所有星星。每个星星的 x 坐标在 ScreenWidth 范围内随机取值,确保初始位置不同,从而使动画效果更加自然。

6. 动画循环

while (!_kbhit()) 是一个无限循环,持续更新星星的位置,实现动画效果。_kbhit 函数来自 conio.h,在检测到按键按下时会返回 true,从而跳出循环。for 循环遍历每颗星星并调用 MoveSnow 函数更新它的位置,实现星星在屏幕上持续下落的效果。

代码中 Sleep(0) 使 CPU 空闲,让出一些时间片以降低资源消耗,但在实际效果中可能需要调整更长时间的延迟,如 Sleep(10),避免动画更新过快。

7. 关闭窗口

循环结束后,调用 closegraph 函数关闭图形窗口,释放图形资源。

总结

整个代码的功能是通过随机生成星星的参数,然后在屏幕上持续更新每颗星星的下落位置,模拟出星星在夜空中不断坠落的效果。

写在后面

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

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

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

相关文章

LVGL显示图片2——显示GIF图片,图片尺寸注意,图片太大无法显示

1进入图像转换网页中 https://lvgl.io/tools/imageconverter 2选择图片 3设置生成的格式 4点击生成 5复制文件&#xff0c;配置环境 6编写代码&#xff08;&#xff09; //显示一张动图 void demo_gif(){lv_obj_t* screenlv_scr_act();//声名对象LV_IMG_DECLARE(GIF_1);//创…

【数据集】NCEP辐射数据-用于计算漫射天窗比(diffuse skylight ration)

【数据集】NCEP辐射数据-用于计算漫射天窗比(diffuse skylight ration) 漫射天窗比(diffuse skylight ration)地表反射率计算漫射天窗比计算NCEP辐射数据数据下载参考漫射天窗比(diffuse skylight ration) 基于NCEP辐射数据利用Python代码计算漫射天窗比(diffuse skyli…

【实用知识】Spring Boot 优雅捕捉异常的几种姿势

&#x1f449;博主介绍&#xff1a; 博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家&#xff0c;WEB架构师&#xff0c;阿里云专家博主&#xff0c;华为云云享专家&#xff0c;51CTO 专家博主 ⛪️ 个人社区&#x…

ATom:加州理工学院化学电离质谱仪(CIT-CIMS)的现场数据,V2版

目录 简介 摘要 代码 引用 网址推荐 知识星球 机器学习 ATom: In Situ Data from Caltech Chemical Ionization Mass Spectrometer (CIT-CIMS), V2 ATom&#xff1a;加州理工学院化学电离质谱仪&#xff08;CIT-CIMS&#xff09;的现场数据&#xff0c;V2版 简介 该数…

Centos7.9安装MySQL(二进制)

安装包 https://downloads.mysql.com/archives/community/ mysql-8.0.39-linux-glibc2.17-x86_64.tar.xz 1.卸载MariaDB 查看 rpm -qa|grep mariadb卸载 可能名称不一样&#xff0c;记得替换 rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64rpm -qa|grep mariadb 执行…

leetcode228:汇总取件

步骤1&#xff1a;定义题目的计算问题性质 题目要求从一个无重复元素且有序的整数数组 nums 中&#xff0c;找出所有恰好覆盖数组中所有数字的最小区间范围列表。这意味着每个数字都必须被某个区间包含&#xff0c;且没有多余的数字在区间内。 输入&#xff1a;一个有序整数数…

Github 2024-10-28 开源项目周报 Top15

根据Github Trendings的统计,本周(2024-10-28统计)共有15个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目6JavaScript项目4TypeScript项目4Jupyter Notebook项目2C++项目1C#项目1Svelte: 一种新的Web应用程序构建方法 创建周期:2899 天开发…

软件分享丨ImTip输入状态

ImTip软件介绍 ImTip是一款实用的输入法状态跟踪提示工具&#xff0c;官网为https://imtip.aardio.com。 它具有诸多优势&#xff0c;体积小巧仅696KB且免费开源&#xff0c;是单文件绿色软件&#xff0c;无外部依赖&#xff0c;能在多种流行桌面操作系统上流畅运行。其核心…

软硬件开发面试问题大汇总篇——针对非常规八股问题的提问与应答(代码规范与生态管理)

软硬件开发&#xff0c;对于编码规范、生态管理等等综合问题的考察尤为重要。 阐述下环形缓冲区的用途 环形缓冲区&#xff08;Ring Buffer&#xff09;是一种固定大小的数据结构&#xff0c;常用于实现数据的流式传输或临时存储。在环形缓冲区中&#xff0c;当到达缓冲区的末尾…

react18中的合成事件与浏览器中的原生事件

React 通过将事件 normalize 以让他们在不同浏览器中拥有一致的属性。 合成事件 SyntheticEvent 实例将被传递给你的事件处理函数&#xff0c;它是浏览器的原生事件的跨浏览器包装器。除兼容所有浏览器外&#xff0c;它还拥有和浏览器原生事件相同的接口&#xff0c;包括 stopP…

Atlas800昇腾服务器(型号:3000)—SwinTransformer等NPU推理【图像分类】(九)

服务器配置如下&#xff1a; CPU/NPU&#xff1a;鲲鹏 CPU&#xff08;ARM64&#xff09;A300I pro推理卡 系统&#xff1a;Kylin V10 SP1【下载链接】【安装链接】 驱动与固件版本版本&#xff1a; Ascend-hdk-310p-npu-driver_23.0.1_linux-aarch64.run【下载链接】 Ascend-…

华为配置 之 STP

目录 简介&#xff1a; STP&#xff1a; RSTP: 如何改变根网桥&#xff1a; &#xff08;1&#xff09;改变优先级&#xff1a; &#xff08;2&#xff09;改变root: 各端口的状态&#xff1a; 总结&#xff1a; 简介&#xff1a; STP&#xff08;Spanning Tree Protoco…

【数据分析】Power BI的使用教程

目录 1 Power BI架构1.1 Power BI Desktop1.2 Power BI服务1.3 Power BI移动版 2 Power Query2.1 Power Query编辑器2.2 Power Query的优点2.3 获取数据2.4 数据清洗的常用操作2.4.1 提升标题2.4.2 更改数据类型2.4.3 删除错误/空值2.4.4 删除重复项2.4.5 填充2.4.6 合并列2.4.…

JAVA面试八股文(五)

#1024程序员节&#xff5c;征文# 在1024程序员节这个特别的日子里&#xff0c;首先&#xff0c;我想对每一位程序员表示最诚挚的祝贺&#xff01;祝愿大家在未来的日子里&#xff0c;能够继续热爱编程、追求卓越&#xff0c;携手共创更美好的科技未来&#xff01;让我们共同庆祝…

基于Django+python的酒店客房入侵检测系统设计与实现

项目运行 需要先安装Python的相关依赖&#xff1a;pymysql&#xff0c;Django3.2.8&#xff0c;pillow 使用pip install 安装 第一步&#xff1a;创建数据库 第二步&#xff1a;执行SQL语句&#xff0c;.sql文件&#xff0c;运行该文件中的SQL语句 第三步&#xff1a;修改源…

Luma API 的使用

Luma 是一个专注于高质量视频生成的平台&#xff0c;用户只需上传素材&#xff0c;即可根据不同的风格和效果自动生成高质量的视频。该 AI 视频生成器是由来自知名科技公司的团队开发&#xff0c;旨在让每个人在不使用复杂编辑工具的情况下&#xff0c;轻松制作优秀的视频。 然…

docker sameersbn/bind dns服务器

1. 安装 #下载docker 镜像 docker pull sameersbn/bind#运行 53端口若被占用会启动失败 docker run --name dns -d --restartalways \ --publish 53:53/tcp \ --publish 53:53/udp \ --publish 10000:10000/tcp \ -v /etc/localtime:/etc/localtime \ -v /data/bind/:/data \…

Semantic Kernel进阶:创建和管理聊天(ChatCompletion)历史记录对象(四)

一、引言 在构建基于Semantic Kernel的AI应用时&#xff0c;聊天历史记录对象&#xff08;Chat History&#xff09;是维护对话上下文和连续性的关键。本文将一步步指导你如何创建和管理聊天历史记录对象&#xff0c;从而为你的AI代理提供一个强大的对话管理工具。 二、聊天…

java平方根计算 C语言指针变量

1. public static void main(String[] args) { Scanner scnew Scanner(System.in);System.out.println("请输入你的数&#xff1a;"); int numsc.nextInt();for (int i 1; i < num; i) {if (i*inum){System.out.println(i"就是"num"的平方根"…

基于Python的B站视频数据分析与可视化

基于Python的B站视频数据分析与可视化 爬取视频、UP主信息、视频评论 功能列表 关键词搜索指定帖子ID爬取指定UP主的主页爬取支持评论爬取生成评论词云图支持数据存在数据库支持可视化 部分效果演示 爬取的UP主信息 关键词搜索爬取 指定UP主的主页爬取 指定为黑马的了 爬取视…