表示例 |
|
#include <math.h> #include <time.h> #include "glibw32.h" #define WXsize 240 /* ウインドウ横サイズ */ #define WYsize 240 /* ウインドウ縦サイズ */ #define HHAND 60 /* 時針の長さ*/ #define MHAND 90 /* 分針の長さ*/ #define SHAND 90 /* 秒針の長さ*/ #define MPI 3.14159 /* 円周率 */ struct point { /* 座標x,y */ int x, y; }; struct aclock { /* 針の座標 中心・時・分・秒*/ struct point c, h, m, s; }; void get_clock(struct tm *t, struct aclock *clk); int main(void) { time_t timer, svtm = 0; struct tm *t; struct aclock clk; ginit(WXsize, WYsize, WHITE); /* グラフィックスの初期化 */ clk.c.x = WXsize / 2; /* 中心座標の設定 */ clk.c.y = WYsize / 2; while(vkey() != VK_SPACE) { /* スペースキーが押されるまで */ time(&timer); /* 現在時刻を得る */ if (timer != svtm) { /* 時間が更新したら */ svtm = timer; t = localtime(&timer); get_clock(t, &clk); /* 針の描画情報を得る */ loadbmp("clock.bmp"); /* 背景画像の読み込み */ setlinestyle(PS_SOLID, 5); /* 線の種類と幅を設定 */ line(clk.c.x, clk.c.y, clk.h.x, clk.h.y, BLUE); /* 時針の描画 */ setlinestyle(PS_SOLID, 3); /* 線の種類と幅を設定 */ line(clk.c.x, clk.c.y, clk.m.x, clk.m.y, BLUE); /* 分針の描画 */ setlinestyle(PS_SOLID, 1); /* 線の種類と幅を設定 */ line(clk.c.x, clk.c.y, clk.s.x, clk.s.y, BLUE); /* 秒針の描画 */ fcircle(clk.c.x, clk.c.y, 5, YELLOW); /* 中心の円の描画 */ circle(clk.c.x, clk.c.y, 5, BLACK); } } gend(); /* グラフィックス終了 */ return 0; } /** 時計の描画情報を得る **/ /* *t:時刻構造体 *clk:時計座標構造体 */ void get_clock(struct tm *t, struct aclock *clk) { int h_angle, m_angle, s_angle; /* 針の角度 */ int hour; if (t->tm_hour >= 12) hour = t->tm_hour - 12; else hour = t->tm_hour; /* 針の角度を求める */ if (hour <= 3) h_angle = 90 - hour*30 - t->tm_min/2; else h_angle = 450 - hour*30 - t->tm_min/2; if (t->tm_min <= 15) m_angle = 90 - t->tm_min*6; else m_angle = 450 - t->tm_min*6; if (t->tm_sec <= 15) s_angle = 90 - t->tm_sec*6; else s_angle = 450 - t->tm_sec*6; /* 針の先の座標を算出 */ clk->h.x = clk->c.x + HHAND * cos(h_angle * MPI / 180); clk->h.y = clk->c.y - HHAND * sin(h_angle * MPI / 180); clk->m.x = clk->c.x + MHAND * cos(m_angle * MPI / 180); clk->m.y = clk->c.y - MHAND * sin(m_angle * MPI / 180); clk->s.x = clk->c.x + SHAND * cos(s_angle * MPI / 180); clk->s.y = clk->c.y - SHAND * sin(s_angle * MPI / 180); }
無いよりはましかな、程度の時計の背景をビットマップファイルで作りました。必要な方は、ダウンロード又は右クリックして「名前を付けて画像を保存」してお使いください。clock.bmp(169Kbyte,240ピクセル×240ピクセル)
▲▲戻る▲▲
「ドリル&ゼミナールC言語」 毎日コミュニケーションズ発行 ISBN 4-8399-1077-4