Grafik i en text värld. (10 / 17 steg)
Steg 10: ASCII-analog klocka.
Kompilera med gcc aclock-unix-curses.c - o aclock - lcurses -lm
[code]
/*
* aclock - ASCII-klocka för UNIX konsolen
*
* Copyright (c) 2002 Antoni Sawicki < tenox
* Version 1.8 (unix-curses); Dublin, juni 2002
*
* Sammanställning: cc aclock-unix-curses.c - o aclock - lcurses -lm
* Debians sammanställning: gcc clock.c -o klocka - lcurses -lm
*
*/
#include < unistd.h >
#include < curses.h >
#include < math.h >
#include < time.h >
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
void draw_circle (int hand_max, int sYcen, int sXcen, int FontHW) {
int x, y, r;
char c;
för (r = 0; r < 60; r ++) {
x = cos (r * M_PI/180 * 6) * hand_max * FontHW + sXcen;
y = sin (r * M_PI/180 * 6) * hand_max + sYcen;
Växla (r) {
fall 0:
fall 5:
mål 10:
mål 15:
mål 20:
fall 25:
fall 30:
fall 35:
fall 40:
mål 45:
fall 50:
fall 55:
c = "o";
bryta;
standard:
c='.';
bryta;
}
mvaddch(y,x,c);
}
}
void draw_hand (int minut, int hlenght, char c, int sXcen, int sYcen, int FontHW) {
int x, y, n;
flyta r =(minute-15) * (M_PI/180) * 6.
för (n = 1, n < hlenght; n ++) {
x = cos (r) * n * FontHW + sXcen;
y = sin (r) * n + sYcen;
mvaddch(y,x,c);
}
}
int main(void) {
char information [] = "Copyright (c) 2002 av Antek Sawicki < tenox
"Version 1.8; Dublin, juni 2002\n";
char digital_time [15].
int FontHW = 2;
int sXmax, sYmax, smax, hand_max, sXcen, sYcen;
tid t;
struct tm * ltime;
initscr();
While(1) {
tid (& t);
ltime = localtime (& t);
sXmax = kolumner;
sYmax = linjer;
om (sXmax/2 < = sYmax)
smax = sXmax/2;
annat
smax = sYmax;
hand_max = (smax/2) -1;
sXcen = sXmax/2;
sYcen = sYmax/2;
Erase();
draw_circle (hand_max, sYcen, sXcen, FontHW);
draw_hand ((ltime->tm_hour*5) + (ltime -> tm_min/10), 2 * hand_max/3, "h", sXcen, sYcen, FontHW);
draw_hand (ltime -> tm_min, hand_max-2, är ", sXcen, sYcen, FontHW);
draw_hand (ltime -> tm_sec, hand_max-1, '.', sXcen, sYcen, FontHW);
mvaddstr (sYmax/4, sXcen-5, ".: ACLOCK:.");
mvprintw (4 * sYmax/5, sXcen-5, "[% 02d: % 02d: % 02d]", ltime -> tm_hour, ltime -> tm_min, ltime -> tm_sec);
Refresh();
Sleep(1);
}
endwin();
Return 0;
}
[/clock]
--------------------------------
En annan klocka: http://webonastick.com/vtclock/