Thứ Bảy, 2 tháng 1, 2016

Chương trình sử dụng đồ họa vẽ đồng hộ kim chạy đúng giờ hệ thống

 Chỉ chạy được trên BC, sử dụng Dosbox để có thể chạy được nền độ họa !

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

int x0,y0,rgio,rphut,rgiay,mgio,mphut,mgiay;
unsigned phutgioht,gioht,phutht,giayht;

void ke(int ddo, unsigned dai, unsigned day, unsigned mau)
{
    unsigned x,y;
   float goc;
   while(ddo>=360)
       ddo=ddo-360;
      goc=(M_PI/180)*ddo;
      x=x0+(int)(dai*cos(goc)+0.5);
      y=y0-(int)(dai*sin(goc)+0.5);
      setcolor(mau);
      setlinestyle(0,0,day);
      line(x0,y0,x,y);
}

void ke_giay(unsigned giay)
{
    int ddo;
   ddo=(90-6*giay);
   ke(ddo,rgiay,1,mgiay);
}

void ke_phut(unsigned phut)
{
    int ddo;
   ddo=(90-6*phut);
   ke(ddo,rphut,3,mphut);
}

void ke_gio(unsigned gio, unsigned phut)
{
    int ddo;
   ddo=360+90-30*(gio%12)-(phut+1)/2;
   ke(ddo,rgio,3,mgio);
}

void chay_kim_giay(void)
{
    unsigned giay;
   struct time t;
   gettime(&t);
   giay=t.ti_sec;
   if(giay!=giayht)
   {
       ke_giay(giayht);
      giayht=giay;
      ke_giay(giayht);
   }
}

void chay_kim_phut(void)
{
    unsigned phut;
   struct time t;
   gettime(&t);
   phut=t.ti_min;
   if(phut!=phutht)
   {
       ke_phut(phutht);
      phutht=phut;
      ke_phut(phutht);
   }
}

void chay_kim_gio(void)
{
    unsigned h,gio,phut,sophut,sophutht;
   struct time t;
   gettime(&t);
   gio=t.ti_hour;
   phut=t.ti_min;
   sophut=gio*60+phut;
   sophutht=gioht*60+phutgioht;
    if(sophut<sophutht)
       sophut=sophut+12*60;
      h=sophut-sophutht;
   if(h>=12)
   {
       ke_gio(gioht,phutgioht);
      phutgioht=phut;
      gioht=gio;
      ke_gio(gioht,phutgioht);
   }
}

void main()
{
    struct time t;
   char *dso[]={"","12","1","2","3","4","5","6","7","8","9","10","11"};
   int i, mh=0, mode, r,x,y;
   float goc;
   initgraph(&mh,&mode,"E:\\BC\\BGI");
   x0=(getmaxx()/2)-1;
   y0=(getmaxy()/2)-1;
   r=y0-2;
   rgiay=r-10;
   rphut=r-50;
   rgio=r-90;
   mgiay=BROWN;
   mphut=RED;
   mgio=YELLOW;
   setcolor(BLUE);
   setlinestyle(0,0,3);
   circle(x0,y0,r);
   setfillstyle(1,YELLOW);
   floodfill(0,0,BLUE);
   setfillstyle(1,WHITE);
   floodfill(x0,y0,BLUE);
   setlinestyle(0,0,1);
   circle(x0,y0,10);
   setfillstyle(1,GREEN);
   floodfill(x0,y0,BLUE);
   settextjustify(1,1);
   setcolor(MAGENTA);
   outtextxy(x0,y0+120,"TAH-JR");
   settextstyle(3,0,3);
   settextjustify(1,1);
   setcolor(BLUE);
   for(i=1;i<=12;i++)
   {
       goc=(2*M_PI+M_PI/2)-(i-1)*(M_PI/6);
      x=x0+(int)(rphut*cos(goc)+0.5);
      y=y0-(int)(rphut*sin(goc)+0.5);
      outtextxy(x,y,dso[i]);
   }
   gettime(&t);
   gioht=t.ti_hour;
   phutht=t.ti_min;
   giayht=t.ti_sec;
   phutgioht=phutht;
   setwritemode(XOR_PUT);
   ke_gio(gioht,phutgioht);
   ke_phut(phutht);
   ke_giay(giayht);
   do
   {
       chay_kim_giay();
      chay_kim_phut();
      chay_kim_gio();
   }while(!kbhit());
   closegraph();
}

Không có nhận xét nào:

Đăng nhận xét