Membuat Jam Analog Dengan Dev C++ Bag 2


Kali ini, dalam menampilkan jam analog ada beberapa editing yang saya tambahkan dalam membuat jam ini dengan jam sebelumnya yang saya posting. Banyak yang saya tambahkan dalam posting yang lalu. Mungkin ini versi rumit yang saya buat. Hehehehe... Seperti yang postingan yang kemarin, awalnya jangan lupa membuat satu project untuk memulai nya. Berikut prosesnya.
 
1. Transform.h
2. Transform.cpp

3. Graph.h

4. Graph.h

5. Jam.cpp




Langkah 1 : Buat 1 Project untuk menyimpan semua file yang ingin kita buat kemudian buka lembar kerja baru (Ctrl + N)


Langkah 2 : Pada Menu Project, pilih Project Option (Alt + P), pilih tab Parameters. Pada kolom Linker, copy kan linkerdi bawah ini dan klik Ok.
-lbgi
-lgdi32
-lcomdlg32
-luuid
-loleaut32
-lole32


Langkah 3 : Simpan file dengan nama Transform.h yang berisi struktur data dan prototype fungsi sebagai berikut :

struct TPoint {int x,y;};
struct TMatrix {float M[4][4];};
TPoint newPoint(int x, int y);
TMatrix loadIdentity(int x=1, int dimensi=2);
TMatrix pointToMatrix(TPoint p);
TPoint matrixToPoint(TMatrix m);
TMatrix trans(int dx, int dy, int dimensi=2);
TMatrix scale(float sx, float sy, int dimensi=2);
TMatrix rotate(float theta, int dimensi=2);
TMatrix operator*(TMatrix a, TMatrix b);
TPoint operator*(TPoint a, TMatrix b);
void translation(int dx, int dy, int n, TPoint asal[],TPoint buff[], int dimensi=2);
void scaling(float sx, float sy, int n, TPoint asal[],TPoint buff[], int dimensi=2);
void rotating(float theta, int n, TPoint asal[],TPoint buff[], int dimensi=2);
void concat(char str[],int x,int flg=1,char deli[]=":");


Langkah 4 : Simpan file dengan nama Transform.cpp yang berisi implementasi header file Transform seperti berikut :

#include <cmath>
#include <cstdlib>
#include <cstring>
#include "Transform.h"
TPoint newPoint(int x, int y)
{
TPoint np={x,y};
return np;
}
struct TMatrix loadIdentity(int x, int dimensi)
{
TMatrix m;
for(int i=0;i<=dimensi;i++)
{
 for(int j=0;j<=dimensi;j++)
 m.M[i][j]=0;
 m.M[i][i]=x;
 }
 return m;
}
TMatrix pointToMatrix(TPoint p)
{
 TMatrix m=loadIdentity(0);
 m.M[0][0]=p.x;
 m.M[0][1]=p.y;
 m.M[0][2]=1;
 return m;
}
TPoint matrixToPoint(TMatrix m)
{
 return newPoint((int)round(m.M[0][0]),(int)round(m.M[0][1]));
}
 TMatrix trans(int dx, int dy, int dimensi)
{
 TMatrix m_tr=loadIdentity();
 m_tr.M[dimensi][0]=dx;
 m_tr.M[dimensi][1]=dy;
 return m_tr;
}
TMatrix scale(float sx, float sy, int dimensi)
{
 TMatrix m_sc=loadIdentity();
 m_sc.M[0][0]=sx;
 m_sc.M[1][1]=sy;
 return m_sc;
}
TMatrix rotate(float theta,int dimensi)
{
 TMatrix m_rt=loadIdentity();
 float cos_t=cos(theta*M_PI/180);
 float sin_t=sin(theta*M_PI/180);
 m_rt.M[0][0]=cos_t;
 m_rt.M[0][1]=sin_t;
 m_rt.M[1][0]=-sin_t;
 m_rt.M[1][1]=cos_t;
 return m_rt;
}
TMatrix operator*(TMatrix a, TMatrix b)
{
 TMatrix c=loadIdentity(0);
 for(int i=0;i<3;i++)
 for(int j=0;j<3;j++)
 for(int k=0;k<3;k++)
 c.M[i][j] += a.M[i][k]*b.M[k][j];
 return c;
}
TPoint operator*(TPoint a, TMatrix b)
{
 TMatrix c,A = pointToMatrix(a);
 return matrixToPoint(A*b);
}

void translation(int dx, int dy, int n, TPoint asal[], TPoint buff[], int dimensi)
{
 for(int i=0;i<n;i++)
 buff[i]=asal[i]*trans(dx,dy);
}

void scaling(float sx, float sy, int n,TPoint asal[], TPoint buff[],int dimensi)
{
 for(int i=0;i<n;i++)
 buff[i]=asal[i]*scale(sx,sy);
}

void rotating(float theta, int n, TPoint asal[], TPoint buff[], int dimensi)
{
 for(int i=0;i<n;i++)
 buff[i]=asal[i]*rotate(theta);
}

void concat(char str[],int x, int flg, char deli[])
{
 char tmpstr[100];
 if(x<10)strcat(str,"0");
 itoa(x,tmpstr, 10);
 strcat(str, tmpstr);
 if(flg) strcat(str,deli);
}


Langkah 5 : Simpan file dengan nama Graph.h seperti berikut :

#include "Transform.h"
void sumbu();
TPoint convert(TPoint p);
void drawPoly(int n, TPoint p[], int fill=0);


Langkah 6 : Simpan file dengan nama Graph.cpp seperti berikut :

#include "Graph.h"
#include <graphics.h>
void sumbu()
{
line(getmaxx()/2,0,getmaxx()/2,getmaxy());
line(0,getmaxy()/2,getmaxx(),getmaxy()/2);
}
TPoint convert(TPoint p)
{
p.x=p.x+getmaxx()/2;
p.y=getmaxy()/2 -p.y;
return p;
}
void drawPoly(int n,TPoint p[], int fill)
{
int data[2*n];
for(int i=0;i<n;i++)
{
data[2*i]=convert(p[i]).x;
data[2*i+1]=convert(p[i]).y;
}
if(fill)fillpoly(n,data);
else drawpoly(n,data);
} 
 

Langkah 7 : Simpan file dengan nama File Source.cpp (nama file ini bebas) untuk menjalan kan semuafile diatas  seperti berikut :

#include<graphics.h>
#include"Graph.h"

int main()
{
 int w=initwindow(1000,600,"Jam");
 TPoint tmp[5], tmp2[5];

 TPoint grsJam[]={{0,0},{-5,20},{0,45},{5,20},{0,0}}; //Jam
 TPoint grsMenit[]={{0,0},{-5,20},{0,65},{5,20},{0,0}}; //Menit
 TPoint grsDetik[]={{0,0},{0,0},{0,75},{0,0},{0,0}}; //Detik
 TPoint cp=convert(newPoint(0,0));

 int scrx = getmaxx()/2;
 int scry = getmaxy()/2;

 TPoint tanda[]={{-6,95},{-6,80},{-2,80},{-2,95},{-6,95}};

 do
 { 
     cleardevice();
   
     sector(cp.x,cp.y,0,360,5,5);
     circle(cp.x,cp.y,103);
     circle(cp.x,cp.y,125);
   
   
     outtextxy(scrx-10,scry-120,"12");
     outtextxy(scrx+55,scry-105,"1");
     outtextxy(scrx+95,scry-60,"2");
     outtextxy(scrx+110,scry-5,"3");
     outtextxy(scrx+90,scry+50,"4");
     outtextxy(scrx+50,scry+90,"5");
     outtextxy(scrx-5,scry+105,"6");
     outtextxy(scrx-60,scry+90,"7");
     outtextxy(scrx-105,scry+45,"8");
     outtextxy(scrx-115,scry-10,"9");
     outtextxy(scrx-105,scry-65,"10");
     outtextxy(scrx-60,scry-108,"11");
   
     //setcolor(RED);
     drawPoly(5,tanda,1);  
     translation(6,0,5,tanda,tmp);
     translation(6,0,5,tanda,tmp);
   
     for(int i=0; i<=360; i+=30)
     {
      //setcolor(RED);
      rotating(i,5,tmp,tmp2);
      drawPoly(5,tmp2,1);
     }
     for(int i=0; i<=360; i+=6)
     {
      rotating(i,5,tmp,tmp2);
      drawPoly(2,tmp2,0);
     }

     time_t now;
     char tmpstr[10], str[100]="Jam Dieksekusi : ";
     time(&now);
     struct tm * infoNow=localtime(&now);
     int jam=(*infoNow).tm_hour;
     concat(str,jam);
     int mnt=(*infoNow).tm_min;
     concat(str,mnt);
     int dtk=(*infoNow).tm_sec;
     concat(str,dtk,0);
     outtextxy(410,450,str);
    
     rotating(-jam*30-mnt/2,5,grsJam,tmp); //JAM
     drawPoly(5,tmp,1);
   
     rotating(-mnt*6,5,grsMenit,tmp); //Menit
     drawPoly(5,tmp,1);
   
     //Detik Normal
     rotating(-dtk*6,5,grsDetik,tmp); //Detik
     drawPoly(5,tmp,1);
   
     //Detiknya Berganti Warna
     //Comment out dulu Detik Normal
     /*
     if(dtk%2==0){
     setcolor(CYAN);
     rotating(-dtk*6,5,grsDetik,tmp); //Detik
     drawPoly(5,tmp,1);
     setcolor(WHITE);
     }
     else if(dtk%2==1){
     setcolor(YELLOW);
     rotating(-dtk*6,5,grsDetik,tmp); //Detik
     drawPoly(5,tmp,1);
     setcolor(WHITE);
     }
     */
   
     delay(1000);
 }

 while(!kbhit());
 getch();
 closegraph();
 return 0;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Semua file di atas berfungsi untuk menampilkan jam analog...
Untuk file selengkapnya, silahkan download dibawah ini:

Semoga bermanfaat...
=)

3 comments:

mas koq q di langkah 6 salah tepatnya di sini #include

can you show me the video how to make it ?

Membuat Jam Analog Dengan Dev C++ Bag 2 ~ Keymaker >>>>> Download Now

>>>>> Download Full

Membuat Jam Analog Dengan Dev C++ Bag 2 ~ Keymaker >>>>> Download LINK

>>>>> Download Now

Membuat Jam Analog Dengan Dev C++ Bag 2 ~ Keymaker >>>>> Download Full

>>>>> Download LINK

Post a Comment