本實例繪製一個旋轉的「風車」狀線條動畫,包含同心圓、放射線、填充效果。
PAI, B(縱橫比修正)。k 控制旋轉角度偏移,內層重繪放射線產生動畫。floodfill 填充區域,settextstyle 輸出文字。// Created by www.runoob.com on 15/11/9.
// Copyright © 2015年 菜鳥教程. All rights reserved.
//
#define PAI 3.1415926
#define B 0.809
#include "graphics.h"
#include "math.h"
int main() {
int i, j, k, x0, y0, x, y, driver, mode;
float a;
driver = CGA; mode = CGAC0;
initgraph(&driver, &mode, "");
setcolor(3); setbkcolor(GREEN);
x0 = 150; y0 = 100;
circle(x0, y0, 10); circle(x0, y0, 20); circle(x0, y0, 50);
for (i = 0; i < 16; i++) {
a = (2*PAI/16)*i;
x = ceil(x0 + 48*cos(a));
y = ceil(y0 + 48*sin(a)*B);
setcolor(2); line(x0, y0, x, y);
}
setcolor(3); circle(x0, y0, 60);
settextstyle(DEFAULT_FONT, HORIZ_DIR, 0);
outtextxy(10, 170, "press a key");
getch();
setfillstyle(HATCH_FILL, YELLOW);
floodfill(202, 100, WHITE);
getch();
for (k = 0; k <= 500; k++) {
setcolor(3);
for (i = 0; i <= 16; i++) {
a = (2*PAI/16)*i + (2*PAI/180)*k;
x = ceil(x0 + 48*cos(a));
y = ceil(y0 + 48 + sin(a)*B);
setcolor(2); line(x0, y0, x, y);
}
for (j = 1; j <= 50; j++) {
a = (2*PAI/16)*i + (2*PAI/180)*k - 1;
x = ceil(x0 + 48*cos(a));
y = ceil(y0 + 48*sin(a)*B);
line(x0, y0, x, y);
}
}
restorecrtmode();
}
代碼中有部分邏輯錯誤(如第二個動畫循環中 i 作用域問題),僅作為 TC 圖形函數調用演示參考。