C/C++大雪纷飞代码

news2024/11/18 3:32:19

图片

目录

写在前面

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://www.coloradmin.cn/o/1955746.html

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

相关文章

Prime Land(牛客)

计算出n-1 对n-1进行质因数分解 // Problem: Prime Land // Contest: NowCoder // URL: https://ac.nowcoder.com/acm/contest/21094/D // Memory Limit: 524288 MB // Time Limit: 2000 ms // // Powered by CP Editor (https://cpeditor.org)#include<iostream> #in…

PAT1060它们是否相等

感谢松鼠爱葡萄 大佬代码太简洁了ilil #include <iostream> #include <cstring>using namespace std;string change(string a, int n) { // 找到小数点的位置&#xff0c;从0开始计数int k a.find("."); // 如果字符串中没有 "."&…

Linux 理解文件系统

查看文件信息 ls -l 每行包含7列&#xff1a; 模式硬链接数文件所有者组大小最后修改时间文件名 stat查看更多信息 硬盘抽象理解 注意&#xff1a; 一个block的大小是由格式化的时候确定的&#xff0c;并且不可以更改mke2fs的-b选项可以设定block大小为1024、2048或4096字节…

光盘文件系统 (iso9660) 格式解析

越简单的系统, 越可靠, 越不容易出问题. 光盘文件系统 (iso9660) 十分简单, 只需不到 200 行代码, 即可实现定位读取其中的文件. 参考资料: https://wiki.osdev.org/ISO_9660 相关文章: 《光盘防水嘛 ? DVDR 刻录光盘泡水实验》 https://blog.csdn.net/secext2022/article/d…

GD 32 UNIX时间戳

前言 ... UINX时间戳定义 UNIX时间戳是一种表示时间的方法&#xff0c;广泛用于计算机系统和网络协议中。它定义的时间起点是1970年1月1日午夜&#xff08;协调世界时UTC&#xff09;&#xff0c;也就是所谓的“UNIX纪元”开始的时刻。 Unix 时间戳(Unix Timestamp)定义为从U…

DjangoRF实战-2-apps-users

1、用户模块 创建一个用户模块子应用&#xff0c;用来管理用户&#xff0c;和认证和授权。 1.1根目录创建apps&#xff0c; 为了使用方便&#xff0c;还需要再pycharm中设置一下资源路径&#xff0c;就可以自动提示 1.2注册子应用 1.3添加应用根目录到环境变量path python导…

搭建cool-admin-java(前端vue)项目

为什么选择 Cool Admin&#xff1f;​ 随着技术不断地发展&#xff0c;特别是最近 Ai 相关的技术发展&#xff0c;以往的框架已经越来越不能满足现代化的开发需求。 Cool Admin 做为后来者有后发优势&#xff0c;主要特点&#xff1a; Ai 编码&#xff0c;从页面到后端代码&…

成为git砖家(5): 理解 HEAD

文章目录 1. git rev-parse 命令2. 什么是 HEAD2.1 创建分支当并未切换&#xff0c; HEAD 不变2.2 切换分支&#xff0c;HEAD 改变2.3 再次切换分支&#xff0c; HEAD 再次改变 3. detached HEAD4. HEAD 表示分支、表示 detached HEAD 有什么区别&#xff1f;区别相同点 5. HEA…

【大模型学习】1:基于通用大语言模型的构建方法

基于通用大语言模型的构建 目录 前言 一、大模型是什么&#xff1f; 二、如何构建大语言模型&#xff1f; 1.基本介绍 2.数据 3.模型构建 总结 前言 本人之前没接触过大模型&#xff0c;研究生的研究方向也不是这一块的&#xff0c;所以是以工程的心态快速上手做到工科领域的不…

数据库实验:SQL Server创建数据库及基本表

一、实验目的&#xff1a; 1、掌握使用SQL SERVER Management Studio工具连接数据库引擎&#xff1b; 2、掌握使用CREATE TABLE 创建基本表的用法&#xff1b; 3、掌握使用ALTER TABLE 修改基本表的用法&#xff1b; 4、掌握使用DROP TABLE删除基本表的用法&#xff1b; 二…

【C++指南】类和对象(中)

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法》 期待您的关注

Python的输入规则

Python的输入特别有意思&#xff0c;它和C的输入不一样&#xff0c;它的输入的原型是类似于C的string类型&#xff0c;但是对于一些有意思的算法题来说&#xff0c;光是读入string型的内容并不容易解题&#xff0c;于是我们可以从两个方面来将输入给转化。 1. 先使用函数input…

【Node.js基础05】包的理解与使用

一&#xff1a;包的理解与简介 1 什么是包 包是一个将模块、代码、以及其他资料聚合成的文件夹 2 包的分类 项目包&#xff1a;编写项目代码的文件夹 软件包&#xff1a;封装工具和方法供开发者使用 3 为什么要在软件包中编写package.json文件 记录包的清单信息 二&…

用 node 搭建基于 gotenberg、LibreOffice 或者 onlyoffice 文档转换服务

1. 使用 gotenberg 和 LibreOffice a. 开启 docker&#xff0c;运行以下指令 docker run --rm -p 3000:3000 gotenberg/gotenberg:8 gotenbderg 默认运行在本地 3000 端口 b. 项目中添加如下依赖 npm install chromiumly dotenv -D chromiumly 是用来连接 gotenberg 服务的包…

深入理解计算机系统 CSAPP 练习题12.4

我们每次都用read_set初始化ready_set是因为我们每次都处理read_set里的描述符,这是我们希望服务器做的事情.每次一有描述符3或描述符0,select函数会更新ready_set ,我们判断更新后ready_set的情况.然后干对应的事. 由此可以看到select函数的神奇之处,它把一个复杂的事情简单化…

烯牛数据JS逆向:MD5数据加密?不存在的!

&#x1f50d; 步骤与思路详解 &#x1f575;️ 抓包数据接口 使用抓包工具捕获烯牛数据的接口请求&#xff0c;仔细观察请求体和响应体&#xff0c;发现数据均进行了加密处理。 &#x1f510; 定位到加密位置 分析抓取到的JS文件&#xff0c;找到负责加密的代码块。 &am…

研发管理革命:探索顶尖的工时系统选择

国内外主流的10款研发工时管理系统对比&#xff1a;PingCode、Worktile、无鱼项目工时系统、Toggl Track、泽众ALM、Asana、Jira、GitHub、Trello、TrackingTime。 在研发团队中&#xff0c;工时管理常常成为效率瓶颈&#xff0c;尤其是在资源分配和项目进度跟踪方面。选择合适…

面试 SQL整理 常见的SQL面试题:大厂经典60题(一)

目录 SQL基础知识整理: 数据库基础知识 为什么要使用数据库 数据保存在内存 数据保存在文件 数据保存在数据库 什么是SQL&#xff1f; 什么是MySQL? 数据库三大范式是什么 mysql有关权限的表都有哪几个 MySQL的binlog有有几种录入格式&#xff1f;分别有什么区别&…

【数学建模】——matplotlib简单应用

目录 1.绘制带有中文标签和图例的正弦和余弦曲线 2. 绘制散点图 1.修改散点符号与大小 2.修改颜色 3.绘制饼状图 4.在图例中显示公式 5.多个图形单独显示 6.绘制有描边和填充效果的柱状图 7.使用雷达图展示学生成绩 8.绘制三维曲面 9.绘制三维曲线 10.设置…

在 Postman 中设置全局 token

目录 问题描述解决方案 问题描述 在使用 Postman 进行接口测试时&#xff0c;经常会遇到在 Header 中添加 token 的情况。当接口数量较多时&#xff0c;需要为每个接口进行设置&#xff0c;而且当 token 失效时需要重新获取并设置&#xff0c;这样一来效率较低。 解决方案 下…