系列文章
序号 | 直达链接 |
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++简易爱心 |
23 | C/C++流星雨 |
24 | C/C++2048小游戏 |
25 | C/C++爱心圣诞树 |
26 | C/C++文字跑马灯 |
27 | C/C++教师工作量管理系统 |
目录
系列文章
写在前面
程序设计
代码分析
写在后面
写在前面
C/C++语言绘制一棵精美的圣诞树。
程序设计
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>
#define PI 3.14159265359
#define T px+scale*r*cosf(theta),py+scale*r*sin(theta)
char love[20][43] = {
" ",
" 1111 1111 111 ",
" 11111111111111111 111 111 ",
" 1111 11 111 111 111 ",
" 111 1111 1111 111 1111111111 ",
" 1111 111 111 1111 111 111 ",
" 1111111111111111111 1111 111 111 ",
" 111111111111111111 11111111 111 111 ",
" 111 111 111 1111111111 111 ",
" 1 111 11 111 111 ",
" 111111111111111 111 111111111 ",
" 111 111 1111111111 ",
" 111 111 111 111 111 ",
" 11111111111111 1111111 111 111 ",
" 1111111 1111 111111 111 1111 ",
" 111 1111111 11111 111 1 ",
" 111 1111 111 111 ",
" 11111111111111 111 11111 ",
" 111111 11111 111 1111 ",
" "
};
void gotoxy(int x, int y) {
HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos = { x,y };
SetConsoleCursorPosition(hout, pos);
}
void SetColor(int color) {
if (color == 0)color = 0x04;
HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hCon, color);
}
……
代码分析
这段代码是用C语言编写的控制台程序,它使用了Windows API来创建一个带有心形图案和飘雪效果的动画。以下是对代码各个部分的详细分析:
1. 包含头文件
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>
-
stdio.h
:用于输入输出函数。 -
math.h
:提供数学函数如sqrtf
、cosf
等。 -
stdlib.h
:提供如rand
等标准库函数。 -
windows.h
:包含Windows API函数。 -
time.h
:提供时间相关的函数。
2. 定义常量和宏
#define PI 3.14159265359
#define T px+scale*r*cosf(theta),py+scale*r*sin(theta)
-
PI
:圆周率。 -
T
:这是一个宏,用来简化后续代码中坐标变换的表达式。
3. 心形图案数组
char love[20][43] = { /* ... */ };
这是一个2D字符数组,定义了一个心形图案,其中'1'表示需要打印的部分,空格表示不需要打印的地方。
4. 函数定义
gotoxy(int x, int y)
这个函数使用Windows API将光标移动到指定位置。
SetColor(int color)
设置控制台文本的颜色。
showsnow()
在随机位置显示雪花('*')。
sdCircle(float px, float py, float r)
计算点(px, py)到圆心(sx, sy)的距离,并减去半径r得到距离差值。
opUnion(float d1, float d2)
返回两个距离中的最小值,用于构建几何形状。
ribbon()
判断是否处于绘制带状区域的位置。
f(float px, float py, float theta, float scale, int n)
递归地生成复杂的图形,可能是基于极坐标的心形或其他形状。
5. 主函数main
主函数执行了以下操作:
-
设置控制台窗口大小为120列42行。
-
获取屏幕分辨率并居中控制台窗口。
-
初始化随机数种子。
-
设置控制台的代码页以确保正确显示字符。
-
根据参数解析n和zoom变量,默认值分别为3和1.0。
-
使用循环和递归调用
f
函数绘制心形图案。 -
使用
love
数组在特定位置绘制静态的心形图案。 -
调用
showsnow
模拟下雪效果。 -
等待用户按键后退出。
总的来说,这段代码是一个有趣的例子,展示了如何结合控制台编程和图形学概念来创建视觉上吸引人的效果。
写在后面
我是一只有趣的兔子,感谢你的喜欢!