山东省住房和城乡建设厅服务网站,有什么好的网站做推广的,二级网站建设要求,网站开发的报告书系列文章
序号直达链接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简单…
系列文章
序号直达链接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简易爱心23C/C流星雨24C/C2048小游戏25C/C爱心圣诞树26C/C文字跑马灯27C/C教师工作量管理系统28C/C满天繁星29C/C漂浮爱心30C/C五子棋小游戏31C/C球球大作战小游戏32C/C走迷宫小游戏33C/C粉色爱心34C/C跨年烟花35C/C棕色小熊36C/C粉色动态爱心37C/C新春烟花敬请期待……
写在前面
C/C语言实现李峋同款跳动的爱心完整代码。
首先我们需要知道C作为一种高级编程语言拥有强大的功能和灵活的语法非常适合用来制作各种有趣的动画效果。而跳动的爱心正是一种既简单又富有创意的动画效果非常适合用来作为编程初学者的练习项目。要实现这个效果我们需要用到C的图形库和定时器功能。图形库可以帮助我们在控制台或窗口中绘制出爱心的形状而定时器则可以让爱心以一定的频率跳动起来。
技术需求 图形库Graphics Library使用 graphics.h 提供的图形功能来绘制点、圆形、文字等图形元素。通过 setfillcolor、solidcircle、outtextxy 等函数来控制图形的颜色、形状和位置。 数学运算与公式代码使用了数学公式生成心形曲线的点坐标。特别是通过 sin 和 cos 函数结合参数方程绘制心形曲线。同时使用了距离计算公式 sqrt(pow(x, 2) pow(y, 2)) 来处理点之间的关系。 随机数生成通过 rand() 函数生成随机数用于随机化图形的颜色、大小、位置等使得动画效果更具动感和变化性。随机数还被用来控制每个点是否生成。 动画生成通过逐帧生成图像利用 saveimage 和 loadimage 函数保存并加载每一帧图像实现动画效果。每帧的点位置随着时间变化形成动态效果。 图像处理利用 setorigin、setaspectratio 等函数调整图形坐标系使得图形能适应不同的屏幕分辨率和显示效果。 文本绘制使用 outtextxy 函数将文本绘制到图形上这里用来显示我爱你等信息增强图形的表现力。 内存与性能管理通过存储每一帧的图像使用 images[frame] 数组来管理图像数据确保每一帧能够被独立处理和保存。
环境搭建
环境C/C
软件Visual Studio 2022
安装教程C语言环境搭建教程Visual Studio
1. EasyX是什么
EasyX是一个专为C初学者和爱好者设计的图形库。该库以简洁易用、功能实用为宗旨通过封装Windows GDI接口极大降低了C编程中图形界面设计的复杂度使得用户能够快速上手并实现各类图形图像处理任务。
EasyX提供了一系列丰富的API函数涵盖了绘制基本图形如线段、圆形、矩形等、填充图形、显示文本、加载与保存图片、颜色设置以及鼠标键盘事件处理等功能。通过简单的函数调用开发者可以高效地进行2D图形绘制和交互式程序设计。
总的来说EasyX以其友好的学习曲线和高效的图形处理能力极大地激发了C初学者对计算机图形学的兴趣是广大编程入门者和教育领域广泛采用的一款图形库工具。
2. 下载安装EasyX
1.进入EasyX官网点击下载按钮开始下载
2.下载完成后进入下载目录双击.exe文件无脑安装即可
接下来让我们一步步来实现这个跳动的爱心。首先我们需要通过一系列的数学公式来定义爱心的形状比如使用参数方程来描述爱心的轮廓。然后我们可以使用C的图形库来绘制出这个形状。当绘制好爱心后就要想办法让它跳动起来了这里我们可以使用C的定时器功能设置一个合适的时间间隔让爱心在每个时间间隔内改变位置或大小从而产生跳动的效果。
完整代码 #include graphics.h
#include conio.h
#include ctime
#include cmath
#include cstdlibstruct Point {double x, y;COLORREF color;
};const int MAX_POINTS 256;
const COLORREF colors[MAX_POINTS] {RGB(255, 192, 203), // 浅粉色 (Light Pink)RGB(255, 182, 193), // 淡粉红 (LightPink)RGB(255, 105, 180), // 热粉红 (HotPink)RGB(255, 20, 147), // 深粉色 (DeepPink)RGB(219, 112, 147), // 浓粉红 (PaleVioletRed)RGB(255, 174, 185), // 浅玫瑰红 (LightPink)RGB(255, 0, 144) // 紫红色 (Crimson)
};
const int xScreen GetSystemMetrics(SM_CXSCREEN);
const int yScreen GetSystemMetrics(SM_CYSCREEN) - 100;
const double PI 3.14159265359;
const double E 2.71828;
const double AVG_DISTANCE 0.162;
const int NUM_ORIGIN_POINTS 506;
const int NUM_CIRCLES 210;
const int NUM_FRAMES 20;
const int COLOR_RANGE 6;Point origin_points[NUM_ORIGIN_POINTS];
Point points[NUM_CIRCLES * NUM_ORIGIN_POINTS];
IMAGE images[NUM_FRAMES];int create_random(int min, int max) {return rand() % (max - min 1) min;
}void create_data() {int index 0;double x1 0, y1 0, x2 0, y2 0;// Generate origin pointsfor (double radian 0.1; radian 2 * PI; radian 0.005) {x2 16 * pow(sin(radian), 3);y2 13 * cos(radian) - 5 * cos(2 * radian) - 2 * cos(3 * radian) - cos(4 * radian);double distance sqrt(pow(x2 - x1, 2) pow(y2 - y1, 2));if (distance AVG_DISTANCE) {x1 x2, y1 y2;origin_points[index].x x2;origin_points[index].y y2;}}// Generate pointsindex 0;for (double size 0.1, lightness 1.5; size 20; size 0.1) {double success_p 1 / (1 pow(E, 8 - size / 2));if (lightness 1) lightness - 0.0025;for (int i 0; i NUM_ORIGIN_POINTS; i) {if (success_p create_random(0, 100) / 100.0) {COLORREF color colors[create_random(0, COLOR_RANGE)];points[index].color RGB(GetRValue(color) / lightness, GetGValue(color) / lightness, GetBValue(color) / lightness);points[index].x size * origin_points[i].x create_random(-4, 4);points[index].y size * origin_points[i].y create_random(-4, 4);}}}int points_size index;// Generate imagesfor (int frame 0; frame NUM_FRAMES; frame) {images[frame] IMAGE(xScreen, yScreen);SetWorkingImage(images[frame]);setorigin(xScreen / 2, yScreen / 2);setaspectratio(1, -1);for (index 0; index points_size; index) {double x points[index].x, y points[index].y;double distance sqrt(pow(x, 2) pow(y, 2));double distance_increase -0.0009 * distance * distance 0.35714 * distance 5;double x_increase distance_increase * x / distance / NUM_FRAMES;double y_increase distance_increase * y / distance / NUM_FRAMES;points[index].x x_increase;points[index].y y_increase;setfillcolor(points[index].color);solidcircle(points[index].x, points[index].y, 1);}…… 代码分析
这段代码使用了 C 中的图形库来生成一系列动画图像并展示一个基于爱心形状的图案。下面将详细分析该代码的各个部分包括结构体定义、常量声明、函数实现和程序的执行流程。
1. 引用的头文件 #include graphics.h
#include conio.h
#include ctime
#include cmath
#include cstdlibgraphics.h是 C 中的图形处理库提供了用于绘制图形和图像的函数。conio.h用于控制台输入输出包括 _kbhit()检测是否有按键输入等功能。ctime用于获取系统时间主要用于生成随机数。cmath提供数学运算函数如 pow、sqrt 等。cstdlib用于生成随机数等操作。
2. 数据结构 struct Point {double x, y;COLORREF color;
};定义了一个 Point 结构体用来存储二维坐标点的 x 和 y 值以及一个 color 属性代表该点的颜色。COLORREF 是一个颜色的结构通常包含 RGB 颜色值。
3. 常量声明 const int MAX_POINTS 256;
const COLORREF colors[MAX_POINTS] {RGB(255, 192, 203), RGB(255, 182, 193), RGB(255, 105, 180),RGB(255, 20, 147), RGB(219, 112, 147), RGB(255, 174, 185), RGB(255, 0, 144)
};
const int xScreen GetSystemMetrics(SM_CXSCREEN);
const int yScreen GetSystemMetrics(SM_CYSCREEN) - 100;
const double PI 3.14159265359;
const double E 2.71828;
const double AVG_DISTANCE 0.162;
const int NUM_ORIGIN_POINTS 506;
const int NUM_CIRCLES 210;
const int NUM_FRAMES 20;
const int COLOR_RANGE 6;MAX_POINTS最大点数表示图像中最多可以包含 256 个点。colors存储了 7 种颜色的 RGB 值表示动画中使用的颜色范围。xScreen, yScreen获取屏幕的宽度和高度并为绘制图像留出一些空间。PI 和 E圆周率和自然常数。AVG_DISTANCE用于计算点之间的平均距离。NUM_ORIGIN_POINTS原始数据点的数量。NUM_CIRCLES生成的圆形点的数量。NUM_FRAMES动画帧的数量。COLOR_RANGE颜色范围用于选择颜色的随机数范围。
4. 全局变量 Point origin_points[NUM_ORIGIN_POINTS];
Point points[NUM_CIRCLES * NUM_ORIGIN_POINTS];
IMAGE images[NUM_FRAMES];origin_points存储原始的点数据用于计算图案。points存储图形中每个点的数据包括坐标和颜色。images存储每一帧生成的图像。
5. 创建随机数的辅助函数 int create_random(int min, int max) {return rand() % (max - min 1) min;
}这个函数用来生成一个指定范围内的随机整数。通过 rand() 函数生成一个随机数然后通过模运算限制其在给定的区间内。
6. create_data() 函数
该函数是整个程序的核心负责生成原始点数据、计算点的位置并生成动画的帧。
6.1 生成原始数据点 for (double radian 0.1; radian 2 * PI; radian 0.005) {x2 16 * pow(sin(radian), 3);y2 13 * cos(radian) - 5 * cos(2 * radian) - 2 * cos(3 * radian) - cos(4 * radian);double distance sqrt(pow(x2 - x1, 2) pow(y2 - y1, 2));if (distance AVG_DISTANCE) {x1 x2, y1 y2;origin_points[index].x x2;origin_points[index].y y2;}
}这段代码生成了一个心形曲线的原始数据点使用了 parametric equations 来绘制心形。通过遍历角度 radian计算 x2 和 y2 的坐标并根据距离过滤掉过于接近的点。
6.2 生成圆形点数据 这一部分通过变化 size 和 lightness生成了不同大小、不同亮度的点。通过 success_p 来决定点是否应当被生成最终生成的点被随机设置颜色并加入到 points 数组中。
6.3 生成动画帧 这一段代码是核心部分负责绘制和动画生成。
通过计算每个点的位置绘制心形的各个点并生成动态的效果。
7. 总结
这段代码实现了一个基于心形图案的动态生成动画涉及到数学公式、图形绘制、随机数生成等多个方面的知识。它通过逐帧绘制来创建动画效果并通过修改颜色、位置、大小等参数来实现动态展示。
写在后面
我是一只有趣的兔子感谢你的喜欢