C語言實現實時鐘表

本文實例為大傢分享瞭C語言實現實時鐘表的具體代碼,供大傢參考,具體內容如下

一、最終效果展示

效果圖如下:

二、繪制靜態秒針

代碼如下:

#include<graphics.h>
#include<conio.h>
#include<math.h>

#define High 480 //遊戲畫面尺寸
#define Width 640

int main(void)
{
    initgraph(Width,High);//初始化繪圖窗口
    int center_x,center_y;//中心點的坐標,也是鐘表的坐標
    center_x=Width/2;
    center_y=High/2;
    int secondLength;//秒針的長度
    secondLength=Width/5;
    int secondEnd_x,secondEnd_y;//秒針的終點
    secondEnd_x=center_x+secondLength;
    secondEnd_y=center_y;

    //畫秒針
    setlinestyle(PS_SOLID,2);//畫實線,寬度為兩個像素
    setcolor(WHITE);
    line(center_x,center_y,secondEnd_x,secondEnd_y);
    getch();
    closegraph();//關閉繪圖窗口
    return 0;
}

效果圖如下:

三、繪制動態秒針

代碼如下:

#include<graphics.h>
#include<conio.h>
#include<math.h>

#define High 480 //遊戲畫面尺寸
#define Width 640
#define PI 3.14159

int main(void)
{
    initgraph(Width,High);//初始化繪圖窗口
    int center_x,center_y;//中心點的坐標,也是鐘表的坐標
    center_x=Width/2;
    center_y=High/2;
    int secondLength;//秒針的長度
    secondLength=Width/5;
    int secondEnd_x,secondEnd_y;//秒針的終點
    float secondAngle=0;//秒針對應的角度

    while(1)
    {
        //由角度決定的秒針終點坐標
        secondEnd_x=center_x+secondLength*sin(secondAngle);
        secondEnd_y=center_y-secondLength*cos(secondAngle);
        //畫秒針
        setlinestyle(PS_SOLID,2);//畫實線,寬度為兩個像素
        setcolor(WHITE);
        line(center_x,center_y,secondEnd_x,secondEnd_y);
        Sleep(1000);//1秒

        setcolor(BLACK);
        line(center_x,center_y,secondEnd_x,secondEnd_y);//隱藏前一幀的秒針

        //秒針角度的變化
        secondAngle=secondAngle+2*PI/60;
        //一圈一共2*PI,一圈60秒,一秒鐘秒針走過的角度為2*PI/60
    }
    getch();
    closegraph();//關閉繪圖窗口
    return 0;
}

效果圖如下:

四、根據實際時間轉動秒針

代碼如下:

#include<graphics.h>
#include<conio.h>
#include<math.h>

#define High 480 //遊戲畫面尺寸
#define Width 640
#define PI 3.14159

int main(void)
{
    initgraph(Width,High);//初始化繪圖窗口
    int center_x,center_y;//中心點的坐標,也是鐘表的坐標
    center_x=Width/2;
    center_y=High/2;
    int secondLength;//秒針的長度
    secondLength=Width/5;
    int secondEnd_x,secondEnd_y;//秒針的終點
    float secondAngle=0;//秒針對應的角度
    SYSTEMTIME ti;//定義保存當前時間的變量

    while(1)
    {
        GetLocalTime(&ti);//獲取當前時間
        //秒針角度的變化
        secondAngle=ti.wSecond*2*PI/60;
        //一圈一共2*PI,一圈60秒,一秒鐘秒針走過的角度為2*PI/60
        //由角度決定的秒針終點坐標

        secondEnd_x=center_x+secondLength*sin(secondAngle);
        secondEnd_y=center_y-secondLength*cos(secondAngle);
        //畫秒針
        setlinestyle(PS_SOLID,2);//畫實線,寬度為兩個像素
        setcolor(WHITE);
        line(center_x,center_y,secondEnd_x,secondEnd_y);
        Sleep(1000);//1秒

        setcolor(BLACK);
        line(center_x,center_y,secondEnd_x,secondEnd_y);//隱藏前一幀的秒針

    }
    getch();
    closegraph();//關閉繪圖窗口
    return 0;
}

五、添加時針分針

代碼如下:

#include<graphics.h>
#include<conio.h>
#include<math.h>

#define High 480 //遊戲畫面尺寸
#define Width 640
#define PI 3.14159

int main(void)
{
    initgraph(Width,High);//初始化繪圖窗口
    int center_x,center_y;//中心點的坐標,也是鐘表的坐標
    center_x=Width/2;
    center_y=High/2;
    int secondLength=Width/7;//秒針的長度
    int minuteLength=Width/6;//分針的長度
    int hourLength=Width/5;//時針的長度

    int secondEnd_x,secondEnd_y;//秒針的終點
    int minuteEnd_x,minuteEnd_y;//分針的終點
    int hourEnd_x,hourEnd_y;//時針的終點
    float secondAngle=0;//秒針對應的角度
    float minuteAngle=0;//分針對應的角度
    float hourAngle=0;//時針對應的角度

    SYSTEMTIME ti;//定義保存當前時間的變量

    while(1)
    {
        GetLocalTime(&ti);//獲取當前時間
        
        //秒針角度的變化
        secondAngle=ti.wSecond*2*PI/60;
        //一圈一共2*PI,一圈60秒,一秒鐘秒針走過的角度為2*PI/60
        //由角度決定的秒針終點坐標

        //分針角度的變化
        minuteAngle=ti.wMinute*2*PI/60;
        //一圈一共2*PI,一圈60分,一分鐘秒針走過的角度為2*PI/60
        
        //時針角度的變化
        hourAngle=ti.wHour*2*PI/12;
        //一圈一共2*PI,一圈12時,一小時時針走過的角度為2*PI/12

        //由角度決定的秒針終點坐標
        secondEnd_x=center_x+secondLength*sin(secondAngle);
        secondEnd_y=center_y-secondLength*cos(secondAngle);
        //由角度決定的分針終點坐標
        minuteEnd_x=center_x+minuteLength*sin(minuteAngle);
        minuteEnd_y=center_y-minuteLength*cos(minuteAngle);
        //由角度決定的時針終點坐標
        hourEnd_x=center_x+hourLength*sin(hourAngle);
        hourEnd_y=center_y-hourLength*cos(hourAngle);

        //畫秒針
        setlinestyle(PS_SOLID,2);//畫實線,寬度為兩個像素
        setcolor(WHITE);
        line(center_x,center_y,secondEnd_x,secondEnd_y);
        //畫分針
        setlinestyle(PS_SOLID,4);//畫實線,寬度為4個像素
        setcolor(BLUE);
        line(center_x,center_y,minuteEnd_x,minuteEnd_y);
        //畫時針
        setlinestyle(PS_SOLID,6);//畫實線,寬度為6個像素
        setcolor(RED);
        line(center_x,center_y,hourEnd_x,hourEnd_y);
        Sleep(1000);//1秒

        setcolor(BLACK);
        setlinestyle(PS_SOLID,2);
        line(center_x,center_y,secondEnd_x,secondEnd_y);//隱藏前一幀的秒針
        setlinestyle(PS_SOLID,4);
        line(center_x,center_y,minuteEnd_x,minuteEnd_y);//隱藏前一幀的分針
        setlinestyle(PS_SOLID,6);
        line(center_x,center_y,hourEnd_x,hourEnd_y);//隱藏前一幀的時針
    }
    getch();
    closegraph();//關閉繪圖窗口
    return 0;
}

效果圖如下:

六、添加表盤 刻度

代碼如下:

#include<graphics.h>
#include<conio.h>
#include<math.h>
#define High 480 //遊戲畫面尺寸
#define Width 640
#define PI 3.14159

int main(void)
{
    initgraph(Width,High);//初始化繪圖窗口
    int center_x,center_y;//中心點的坐標,也是鐘表的坐標
    center_x=Width/2;
    center_y=High/2;
    int secondLength=Width/7;//秒針的長度
    int minuteLength=Width/6;//分針的長度
    int hourLength=Width/5;//時針的長度

    int secondEnd_x,secondEnd_y;//秒針的終點
    int minuteEnd_x,minuteEnd_y;//分針的終點
    int hourEnd_x,hourEnd_y;//時針的終點
    float secondAngle=0;//秒針對應的角度
    float minuteAngle=0;//分針對應的角度
    float hourAngle=0;//時針對應的角度

    SYSTEMTIME ti;//定義保存當前時間的變量
    BeginBatchDraw();
    while(1)
    {
        //繪制一個簡單的表盤
        setlinestyle(PS_SOLID,1);//設置表盤邊的粗細
        setcolor(WHITE);//設置表盤邊的顏色
        circle(center_x,center_y,Width/4);//畫表盤

        //畫刻度
        int x,y,i;
        for(i=0;i<60;i++)
        {
            x=center_x+int(Width/4.3*sin(PI*2*i/60));
            y=center_y+int(Width/4.3*cos(PI*2*i/60));
            if(i%15==0)
                bar(x-5,y-5,x+5,y+5);
            else if(i%5==0)
                circle(x,y,3);
            else
                putpixel(x,y,WHITE);
        }
        outtextxy(center_x-25,center_y+Width/6,"我的時鐘");
        outtextxy(center_x-120,High-60,"[時針: 紅色]  [分針: 藍色]  [秒針: 白色]");
        GetLocalTime(&ti);//獲取當前時間
        
        //秒針角度的變化
        secondAngle=ti.wSecond*2*PI/60;
        //一圈一共2*PI,一圈60秒,一秒鐘秒針走過的角度為2*PI/60
        //由角度決定的秒針終點坐標

        //分針角度的變化
        minuteAngle=ti.wMinute*2*PI/60;
        //一圈一共2*PI,一圈60分,一分鐘秒針走過的角度為2*PI/60
        
        //時針角度的變化
        hourAngle=ti.wHour*2*PI/12;
        //一圈一共2*PI,一圈12時,一小時時針走過的角度為2*PI/12

        //由角度決定的秒針終點坐標
        secondEnd_x=center_x+secondLength*sin(secondAngle);
        secondEnd_y=center_y-secondLength*cos(secondAngle);
        //由角度決定的分針終點坐標
        minuteEnd_x=center_x+minuteLength*sin(minuteAngle);
        minuteEnd_y=center_y-minuteLength*cos(minuteAngle);
        //由角度決定的時針終點坐標
        hourEnd_x=center_x+hourLength*sin(hourAngle);
        hourEnd_y=center_y-hourLength*cos(hourAngle);

        //畫秒針
        setlinestyle(PS_SOLID,2);//畫實線,寬度為兩個像素
        setcolor(WHITE);
        line(center_x,center_y,secondEnd_x,secondEnd_y);
        //畫分針
        setlinestyle(PS_SOLID,4);//畫實線,寬度為4個像素
        setcolor(BLUE);
        line(center_x,center_y,minuteEnd_x,minuteEnd_y);
        //畫時針
        setlinestyle(PS_SOLID,6);//畫實線,寬度為6個像素
        setcolor(RED);
        line(center_x,center_y,hourEnd_x,hourEnd_y);

        FlushBatchDraw();
        Sleep(1000);//1秒

        setcolor(BLACK);
        setlinestyle(PS_SOLID,2);
        line(center_x,center_y,secondEnd_x,secondEnd_y);//隱藏前一幀的秒針
        setlinestyle(PS_SOLID,4);
        line(center_x,center_y,minuteEnd_x,minuteEnd_y);//隱藏前一幀的分針
        setlinestyle(PS_SOLID,6);
        line(center_x,center_y,hourEnd_x,hourEnd_y);//隱藏前一幀的時針
    }
    EndBatchDraw();
    getch();
    closegraph();//關閉繪圖窗口
    return 0;
}

效果圖如下:

以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持LevelAH。

推薦閱讀: