表示例
|
|
#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