系列文章?
序號 | 直達鏈接 |
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
模擬下雪效果。 -
等待用戶按鍵后退出。
總的來說,這段代碼是一個有趣的例子,展示了如何結合控制臺編程和圖形學概念來創建視覺上吸引人的效果。
寫在后面
我是一只有趣的兔子,感謝你的喜歡!