C/C++大雪纷飞代码

图片

目录

写在前面

C语言简介

EasyX简介

大雪纷飞

运行结果

写在后面


写在前面

本期博主给大家带来了C/C++实现的大雪纷飞代码,一起来看看吧!

系列推荐

序号目录直达链接
1爱心代码https://want595.blog.csdn.net/article/details/136360684
2李峋同款跳动的爱心https://want595.blog.csdn.net/article/details/139722249
3满屏飘字代码https://want595.blog.csdn.net/article/details/136342476
4大雪纷飞代码https://want595.blog.csdn.net/article/details/140735166
5新春烟花代码
6黑客帝国字母雨https://want595.blog.csdn.net/article/details/139923742
7樱花树https://want595.blog.csdn.net/article/details/140690893

C语言简介

C语言是一种通用的高级编程语言,由美国贝尔实验室的Dennis Ritchie在20世纪70年代开发的。它是一种面向过程的结构化编程语言,被广泛应用于各种领域,尤其在操作系统、嵌入式系统、网络编程等方面具有重要地位。

C语言的设计目标是提供一种简单、高效、可移植的编程语言,使程序员可以通过简洁的语法和丰富的库函数来实现复杂的计算任务。C语言的语法规则相对简单,仅有几十个关键字和一些基本的语法结构,如循环、条件判断等。这使得初学者可以迅速上手,同时也方便了程序的阅读和维护。

C语言具有高性能和低级别的特点,可以方便地访问计算机的底层硬件资源。它提供了丰富的数据类型,如整型、浮点型、字符型等,以及数组、结构体、指针等高级数据结构,这使得程序员可以灵活地处理各种数据类型和数据结构。

C语言还提供了强大的库函数支持,如输入输出函数、字符串处理函数、数学函数等,这些函数可以帮助程序员更方便地进行输入输出、字符串操作、数学计算等操作。

C语言的可移植性也是其重要的特点之一,它的语法规则和标准库函数在各种计算机平台上都得到了广泛的支持,这使得使用C语言开发的程序可以很容易地在不同的操作系统和平台上移植和运行。

总之,C语言是一种功能强大、灵活、高效的编程语言,被广泛应用于各类软件开发和系统编程中,是学习编程的重要基础。

EasyX简介

EasyX是一个基于Windows GDI(图形设备接口)的C++图形库。它为C++程序员提供了一个易于使用且功能强大的图形编程接口,可以在Windows操作系统下创建各种图形界面应用程序。EasyX提供了丰富的绘图函数,可以实现图形绘制、文本输出、图像处理等功能,开发者可以使用它来实现各种有趣的图形应用程序,比如游戏、画图等。

EasyX的最大特点是其易用性,它基于简单易懂的GDI接口封装了一套易于学习和使用的C++接口。EasyX支持众多的图形绘制函数,比如直线、矩形、椭圆、圆弧等,再加上丰富的颜色、字体、图片等参数设置,可以轻松实现各种复杂的图形绘制。

除此之外,EasyX还提供了一些实用的辅助功能,比如键盘输入、鼠标操作等。开发者可以使用这些辅助功能来实现用户交互、游戏逻辑等功能,使得开发过程更加简单快捷。

EasyX适用于Windows操作系统,并且可以兼容多个版本的VC++编译器。EasyX不仅支持多种语言的编程,比如C++、C#、Python等,而且还提供了详细的开发文档和示例代码,方便开发者使用和学习。

总之,EasyX是一款易学易用且功能强大的图形编程库,它可以帮助开发者快速创建各种有趣的图形应用程序,在Windows操作系统上实现卓越的用户体验。

大雪纷飞

完整程序

#include <graphics.h>
#include <time.h>
#include <stdio.h>
#include <conio.h>
#include <vector>
using namespace std;
#define MAXSnow 1314  // 设置雪花总数
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;snow[i].y = rand() % height - height;snow[i].r = rand() % 4 + 1;snow[i].speed = (rand() % 3333) / 1000.0 + 1;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].y += snow[i].speed;if (snow[i].y > height)  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();// 关闭绘图窗口
}

程序分析

雪花结构体

  • 结构体定义:定义了一个名为 Snow 的结构体,用于描述每一片雪花的属性。属性包括雪花的横坐标 (x),纵坐标 (y),半径 (r),下落速度 (speed),以及颜色 (color)。
  • 数组:声明了一个 Snow 类型的数组 snow[MAXSnow],用于存储所有的雪花。

初始化雪花函数 InitSnow

  • 初始化位置:随机生成雪花的初始横坐标 x 和纵坐标 y,其中 x 是屏幕宽度范围内的随机数,y 是屏幕高度范围内的随机数减去屏幕高度,确保雪花从屏幕顶部开始下落。
  • 随机大小和速度:雪花的半径 r 是 1 到 4 的随机数,下落速度 speed 是 1 到 4.333 之间的随机数。
  • 颜色设定:雪花的颜色被设置为白色(RGB 值为 255, 255, 255)。

雪花移动函数 MoveSnow

  • 擦除旧雪花:使用黑色填充圆形来擦除当前雪花的位置。
  • 更新位置:更新雪花的 y 坐标,使其按照设定的速度下落。如果雪花的 y 坐标超过屏幕高度,则重新初始化雪花的位置。
  • 绘制新雪花:在新的位置绘制雪花。

主函数 main

  • 随机数种子:使用 srand((unsigned)time(NULL)) 设置随机数种子,以确保每次运行程序时,雪花的位置、大小和速度都是随机的。
  • 获取屏幕尺寸:使用 GetSystemMetrics(SM_CXSCREEN)GetSystemMetrics(SM_CYSCREEN) 获取屏幕的宽度和高度。
  • 初始化图形窗口:调用 initgraph 函数创建全屏图形窗口,并使用 SetWindowPos 设置窗口位置。
  • 初始化所有雪花:通过循环调用 InitSnow 函数来初始化每一片雪花。
  • 绘制和移动雪花:在一个无限循环中,通过调用 MoveSnow 函数来不断更新每片雪花的位置,并重绘屏幕上的雪花。_kbhit() 函数用于检测是否有键盘输入,如果有键盘输入则退出循环。
  • 关闭图形窗口:循环结束后调用 closegraph 函数关闭图形窗口。

总结

这段代码实现了一个简单的雪花飘落动画。它利用随机数生成雪花的初始位置、大小和下落速度,并在屏幕上模拟雪花下落的过程。每次重绘屏幕时,通过擦除旧的雪花并绘制新的雪花,实现了雪花的动态效果。程序通过检测键盘输入来结束动画并关闭窗口。

运行结果

图片

写在后面

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

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

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

相关文章

Linux笔记 --- 程序入门

‘\n’换行符 通常来讲我们都是使用这个符号来进行换行的操作&#xff0c;但是这个符号不仅仅是用于换行 当标准输出文件中默认使用缓冲 &#xff0c;也就是当遇到 \n 的时候会进行刷新缓冲区&#xff08;把数据输 出&#xff09; 当打印语句后面没有换行符时 &#xff0c; 需要…

强烈推荐这 3 款让你用一次就爱上,永不想删除的软件

IcecreamPDFEditor IcecreamPDFEditor是一款功能强大的PDF编辑工具&#xff0c;具备多种编辑和查看PDF文件的功能。这款软件不仅可以方便地阅读和查看各种PDF文件&#xff0c;还可以进行编辑操作。它拥有编辑文本、注释添加、页面管理以及PDF文件保护等功能。 用户可以通过下载…

JS逆向高级爬虫

JS逆向高级爬虫 JS逆向的目的是通过运行本地JS的文件或者代码,以实现脱离他的网站和浏览器,并且还能拿到和浏览器加密一样的效果。 10.1、编码算法 【1】摘要算法&#xff1a;一切从MD5开始 MD5是一个非常常见的摘要(hash)逻辑. 其特点就是小巧. 速度快. 极难被破解. 所以,…

ELK安装(Elasticsearch+Logstash+Kibana+Filebeat)

一、简介 1.1、软件简介 ELK其实是Elasticsearch&#xff0c;Logstash 和 Kibana三个产品的首字母缩写&#xff0c;这三款都是开源产品。 1.1.1、Elasticsearch简介 Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析…

研究生选择学习Android开发的利与弊?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「Android的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;产品经理可以学学Axure快…

简单的CSS样式

样式分为三种 内部样式&#xff1a;写在html文件里的样式叫内部样式 内联样式&#xff1a;写在需要的标签中 外部样式&#xff1a;写在外部css文件里 可以通过不同的选择器来选择设置指定组件的样式&#xff1a; <style>/* 写在html文件里的样式叫内部样式 *//* 选择器 *…

6.3 面向对象技术-设计模式

设计模式 创建型模式 结构型模式

C++ unordered_map

1. unordered系列关联式容器 在C98 中&#xff0c; STL 提供了底层为红黑树结构的一系列关联式容器&#xff0c;在查询时效率可达到 &#xff0c;即最差情况下需要比较红黑树的高度次&#xff0c;当树中的节点非常多时&#xff0c;查询效率也不理想。最好的查询是&#xff0c…

我在百科荣创企业实践——简易函数信号发生器(6)

对于高职教师来说,必不可少的一个任务就是参加企业实践。这个暑假,本人也没闲着,报名参加了上海市电子信息类教师企业实践。7月8日到13日,有幸来到美丽的泉城济南,远离了上海的酷暑,走进了百科荣创科技发展有限公司。在这短短的一周时间里,我结合自己的教学经验和企业的…

Leetcode 剑指 Offer II 088.使用最小花费爬楼梯

题目难度: 简单 原题链接 今天继续更新 Leetcode 的剑指 Offer&#xff08;专项突击版&#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 数组的每个下标作为一个阶梯&#xff0c;第 i 个阶梯对应着一个非…

5 Java的基本程序设计结构(基本语法4)- 集合之ArryList 和什么是包装类?

文章目录 前言一、集合二、基本数据类型的包装类三、ArryList1 ArryList对象的创建2 ArryList常见成员方法(1)boolean add(E e) : 添加元素,返回值表示是否添加成功(2)void add(int index, E e) :在指定索引位置插入元素。(3)boolean remove(E e) : 删除第一个指定元素…

从json到protobuf,接口效率的提升

在express开发的前后端调用中&#xff0c;express作为接收方是不二之选&#xff0c;它有一些很好用的body解析器来解析传入数据&#xff1b;而作为请求发起方&#xff0c;axios是非常方便的&#xff0c;这是一个很好的选择&#xff0c;它可以传输多种类型的数据给接收方。 通常…

Tekion 选择 ClickHouse Cloud 提升应用性能和指标监控

本文字数&#xff1a;4187&#xff1b;估计阅读时间&#xff1a;11 分钟 作者&#xff1a;ClickHouse team 本文在公众号【ClickHouseInc】首发 Tekion 由前 Tesla CIO Jay Vijayan 于 2016 年创立&#xff0c;利用大数据、人工智能和物联网等技术&#xff0c;为其汽车客户解决…

Week 3 DAY 6

Product C - Product (atcoder.jp) 一共N层&#xff0c;对于每一层的每个数&#xff0c;都遍历上一层更新过后的结果&#xff0c;更新为新的结果&#xff0c; 比如样例&#xff1a; 2 40 3 1 8 4 2 10 5动态数组a表示储存上一层除后留下来的数&#xff0c; 第一次a数组中只…

关于开源项目分享的通知

后续会逐步分享更多好用的开源项目&#xff0c;加入圈子&#xff1a; 圈子加入https://pc.fenchuan8.com/#/index?forum86631&yqm5EV39扫码加入&#xff1a;

初识git工具~~上传代码到gitee仓库的方法

目录 1.背景~~其安装 2.gitee介绍 2.1新建仓库 2.2进行相关配置 3.拉取仓库 4.服务器操作 4.1克隆操作 4.2查看本地仓库 4.3代码拖到本地仓库 4.4关于git三板斧介绍 4.4.1add操作 4.4.2commit操作 4.4.3push操作 5.一些其他说明 5.1.ignore说明 5.2git log命令 …

日拱一卒 | JVM

文章目录 什么是JVM&#xff1f;JVM的组成JVM的大致工作流程JVM的内存模型 什么是JVM&#xff1f; 我们知道Java面试&#xff0c;只要你的简历上写了了解JVM&#xff0c;那么你就必然会被问到以下问题&#xff1a; 什么是JVM&#xff1f;简单说一下JVM的内存模型&#xff1f;…

电脑系统安装软件,让系统安装变得更简单。

电脑原版操作系统下载&#xff1a;MSDN系统库 电脑U盘装机pe系统&#xff1a;优启通或微PE工具 驱动安装&#xff1a;360 驱动大师 电脑装机常用软件下载&#xff1a;https://www.bgrdh.com/favorites/7875.html

do while打印1~10

#include<stdio.h> int main() {int i 1;do{printf("%d", i);i;} while (i < 10);return 0; }

【JUC】LockSupport线程等待唤醒

文章目录 LockSupport线程等待唤醒机制三种让线程等待和唤醒的方法Object类中的wait和notify方法实现线程等待和唤醒Condition接口中的await和signal方法实现线程的等待和唤醒上述两种方法使用限制条件LockSupport类中的park等待和unpark唤醒LockSupport 是什么主要方法代码测试…