Thursday 27 October 2011

Kategori: , , ,

Memebuat Kapal Layar Dengan Visual Studio 2008 (C++)

Kalau sebelumnya saya pernah memposting membuat Titik Potong sederhana dan pada postingan kali ini kita coba membuat yang lebih sedikit berbeda walaupun sebenarnya masih sangat-sangat simple, okay tidak perlu berlama-lama silahkan dicoba coding dibawah ini untuk tahu jelanya jalannya coding, goodluck. :)

#include    //Header buat fungsi random 
#include    //Header buat bikin Windows 

#include    
#include

int letak=0; 
int warnaKapal=0;    //variable bwt cek warna kapal dan pena yang dipake

void initial(void) //inisialisasi nilai awal 
{        
    glClearColor(1.0, 1.0, 1.0, 1.0);    //warna background pertama kali
 glMatrixMode(GL_PROJECTION);        //mode bentuk koordinat
 glPointSize(4.0);            //setting besarnya dari point sekali buat
 glLoadIdentity();            // 
    gluOrtho2D(-400.0,400.0,-200.0,400.0);  //meletakkan koordinat awal yang tampil di layar
} 

void gantibackground(int background) //fungsi bwt ganti warna background
{    
     if(background%7==0)
  {         
  glClearColor(1.0,0.0,0.0,0.0);
     }     
  else if(background%7==1)
  {  
  glClearColor(0.0,1.0,0.0,0.0);
     }    
  else if(background%7==2)
  {     
  glClearColor(0.0,0.0,1.0,0.0);  
  }     
  else if(background%7==3)
  {       
  glClearColor(0.5,1.0,0.5,0.0); 
  }     
  else if(background%7==4)
  {  
  glClearColor(0.5,0.5,0.5,0.0);  
  }    
  else if(background%7==5)
  {      
  glClearColor(0.2,0.5,0.8,0.0);  
  }
  else{       
  glClearColor(1.0,1.0,1.0,0.0); 
  } 
}

void gantiWarnaKapal(int warnanya) //fungsi bwt ganti warna kapal
{     
    if(warnanya%7==0)
 {        
 glColor3f(1.0,0.0,0.0);   
 }    
 else if(warnanya%7==1)
 {        
 glColor3f(0.0,1.0,0.0);    
 }   
 else if(warnanya%7==2)
 {        
 glColor3f(0.0,0.0,1.0); 
 }    
 else if(warnanya%7==3)
 {        
 glColor3f(0.5,1.0,0.5);   
 }    
 else if(warnanya%7==4)
 {        
 glColor3f(0.5,0.5,0.5);    
 }  
 else if(warnanya%7==5)
 {     
 glColor3f(0.2,0.5,0.8);  
 }    
 else{  
 glColor3f(1.0,1.0,1.0); 
 } 
} 

void kapal(void) //fungsi buat gambar kapal
{
    glClear(GL_COLOR_BUFFER_BIT);
 glColor3f(0.0,0.0,0.0);         //BODY KAPAL
 glBegin(GL_LINE_LOOP);
 glVertex2i(-200,100);
 glVertex2i(200,100);
 glVertex2i(150,0);
 glVertex2i(-150,0);

 glEnd(); //TIANG BENDERA
 glBegin(GL_LINE_STRIP); 
 glVertex2i(-20,280);  
 glVertex2i(-20,50); 

    glEnd();     //BENDERA 
    //glColor3f(0.9,0.7,0.0);
 glBegin(GL_LINE_LOOP);
 glVertex2i(-19,280);
 glVertex2i(-19,150);   
 glVertex2i(50,230); 
    glEnd();     //AIR  
 glColor3f(0.3,0.3,0.7);   
 glBegin(GL_LINES); 
 glVertex2i(-100,-10);
 glVertex2i(100,-10);
 glVertex2i(-130,-20);   
 glVertex2i(-50,-20); 
 glVertex2i(150,-20);  
 glVertex2i(60,-20);  
 glVertex2i(80,-35);   
 glVertex2i(-70,-35);  
 glEnd(); 

 gantiWarnaKapal(warnaKapal); //mengeload warna yang dipakai.   
 //WARNA KAPAL
 glBegin(GL_QUADS);  
 glVertex2i(-199,100); 
 glVertex2i(199,100); 
 glVertex2i(149,1);  
 glVertex2i(-149,1);

 glEnd();     //WARNA BENDERA  
 //glColor3f(0.9,0.7,0.0);   
 glBegin(GL_TRIANGLES);    
 glVertex2i(-19,280);
 glVertex2i(-19,150); 
 glVertex2i(50,230); 
    glEnd(); 
    //glutSwapBuffers();         
 glFlush();     //mengirim gambar dari swap ke layar
} 

void keyboard(unsigned char key, int x, int y) //fungsi penanganan keyboard 
{  
 if(letak<-210 data-blogger-escaped-agar="" data-blogger-escaped-arah="" data-blogger-escaped-balik="" data-blogger-escaped-belakang="" data-blogger-escaped-bisa="" data-blogger-escaped-dari="" data-blogger-escaped-else="" data-blogger-escaped-fungsi="" data-blogger-escaped-ga="" data-blogger-escaped-gltranslatef="" data-blogger-escaped-if="" data-blogger-escaped-jalan="" data-blogger-escaped-kalau="" data-blogger-escaped-kapal="" data-blogger-escaped-keliatan="" data-blogger-escaped-letak="" data-blogger-escaped-udah="" data-blogger-escaped-yang="">210)
  {     
 glTranslatef((3*-letak)*2,0.0,0.0); 
 letak=-210; 
 kapal();
  }

int warna;  //variabel warna background
    switch(key)
 {            //switch variabel key 
    case 'r':        //r untuk Random Background 
    case 'R': 
  warna=rand();    //random nilai integer  
  gantibackground(warna);        //memanggil fungsi gantibackground dengan passin parameter dari hasil random         
  kapal();        //menampilkan kapal lagi dengan background baru
  break;            //keluar    
 case 'b':        //b untuk Random warna kapal   
 case 'B':         
  warnaKapal=rand();    //random nilai integer  
  kapal();        //menampilkan kapal lagi dengan warna kapal baru   
  break;   
 case 'a':        //pindah posisi kapal kekiri     
 case 'A':        
  letak--;    //mengetahui letak kapal (minus jika kekiri)  
  warna=5;    //memberi warna background bila digeser ke kanan    
  gantibackground(warna);    //mengganti warna background    
  glTranslatef(-3.0,0.0,0.0);    //menggeser letak kapal  
  kapal();    //gambar ulang    
  break;     
 case 'd':        //pindah posisi kapal kekanan     
 case 'D':      
  letak++;    //mengetahui letak kapal (plus jika kekanan     
  warna=4;    //memberi warna background bila digeser ke kanan    
  gantibackground(warna);    //mengganti warna background   
  glTranslatef(3.0,0.0,0.0);    //menggeser letak kapal   
  kapal();    //gambar ulang    
  break; 
 }
} 

void main(int argc, char** argv)
 {
  glutInit(&argc,argv);
  glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
  glutInitWindowSize(500,500);
  glutInitWindowPosition(100,100);   
  glutCreateWindow("Coba | Kapal Layar - 672010179"); 
  glutKeyboardFunc(keyboard); 
  glutDisplayFunc(kapal); 
  initial();
  glutMainLoop(); 
 }

Berikut adalah output dari coding diatas:
Output

2 comments:

  1. Gan,, ada project yang membuat transformasi ga ??
    dari sebuah bentuk menjadi bentuk lain??
    tolong di share ya ke email q..
    Blog : trik-os.blogspot.com
    Jonathan_rere_kudus@yahoo.com


    GBU

    ReplyDelete
  2. Oh..! maksutnya Tweening.?? kalau itu saya juga belum masuk ke materi tweening BroOO..! munkin 1/2 minggu depan..! :)

    ReplyDelete