首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言圖形程式設計:基於 BGI 的模擬類比時鐘完整實作

     編輯:關於C語言

程式功能

使用 Borland BGI 圖形庫(graphics.h)繪製可互動的類比時鐘:

  • 圓形錶面、時/分/秒刻度、紅藍配色介面。
  • 即時讀取系統時間(gettime/settime),三針動態轉動。
  • 鍵盤控制:↑/↓ 調整時/分/秒,Tab 切換調整欄位,Esc 離開。
  • 底部顯示數位時間同步更新。

核心數學:極座標轉直角座標

錶盤中心 (Cx, Cy),半徑 R,角度 θ(弧度,12 點鐘方向為 0,順時針增加):

x = Cx + R * sin(θ)
y = Cy - R * cos(θ)  // 螢幕座標 Y 軸向下
  • 秒針/分針:θ = value / 30 * PI(60 格對應 2π)。
  • 時針:θ = (hour*60 + min) / 360 * PI(12 小時對應 2π,含分針微調)。

動畫技巧:XOR 繪圖模式實現無閃爍擦除

setwritemode(XOR_PUT);  // 1: XOR 模式
// 繪製秒針
line(Cx, Cy, sec_x, sec_y);
// 等待下一秒...
// 再次繪製同一條線 → 因 XOR 特性自動擦除
line(Cx, Cy, sec_x, sec_y);

無需重繪整個錶面,極大降低閃爍與 CPU 佔用。

鍵盤處理:bioskey 非阻塞輪詢

while (hour==cur_h && min==cur_m && sec==cur_s) {
    gettime(&t);
    if (bioskey(1)) {  // 檢查鍵盤緩衝區
        int key = bioskey(0);  // 讀取鍵值
        count = KeyHandle(key, count);  // 處理調整邏輯
    }
}

鍵值定義:Up=0x4800、Down=0x5000、Tab=0x0F09、Esc=0x011B(掃描碼 << 8 | ASCII)。

代碼結構速覽

函數功能
main()初始化圖形模式、繪製靜態介面、啟動時鐘主循環
ClockHandle()核心動畫循環:繪製/擦除秒針、檢測分時變更、鍵盤輪詢
DigitalHour/Minute/Second()將數值轉為整數(單純返回參數,可簡化)
DigitalClock(x,y,val)在指定位置以數位字體顯示時間分量
KeyHandle/Up_Key/Down_Key鍵盤事件分發與時間調整(呼叫 settime 寫入硬體)
DrawCursor/ClearCursor調整模式下的游標繪製/清除

編譯與執行環境

  • 目標平台:DOS / DOSBox / Windows 9x/NT 虛擬機。
  • 編譯器:Turbo C 2.0/3.0、Borland C++ 3.1/5.02。
  • 需連結 graphics.lib,且 initgraph 路徑指向 BGI 驅動檔目錄。

現代化移植建議

若在現代 OS 開發,建議改用 SDL2、SFML、Raylib 或 Windows GDI/Direct2D:

  • 以高解析度計時器(QueryPerformanceCounter/clock_gettime)驅動每幀重繪。
  • 雙緩衝繪圖替代 XOR 模式。
  • 鍵盤事件改用事件迴圈(SDL_PollEvent/WM_KEYDOWN)。

本程式作為「C 語言圖形程式設計入門」與「即時動畫基礎技巧」的經典教學範例,仍具參考價值。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved