Fighting....!!!!!

Fighting....!!!!!

Sabtu, 24 November 2012

Animasi gerak pantul (jawaban soal PT)

#include <iostream.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>

//prototype
void fungsiTombol_gerakBenda (int X1, int Y1, int X2, int Y2);
void gambar_kotak(int x1,int y1,int x2,int y2);
void baca_keyboard(int &ascii, int &scan);
void benda1(int X1,int Y1);
void benda3(int X1,int Y1);
void benda2(int X2,int Y2);
void benda4(int X2,int Y2);                                      
void tunda(double detik);
void benda_keluar();

void main()
{
  gotoxy(1, 25); cout << "Mulai";getch();
  gambar_kotak(2,2,79,23);
}

void gambar_kotak(int x1,int y1,int x2,int y2)
{
   int x, y;
   for(x = x1+1; x<=x2-1; x++)
   {
        gotoxy(x,y1); cout << (char)196;
      gotoxy(x,y2); cout << (char)196;
   }

   for(y = y1+1; y<=y2-1; y++)
   {
        gotoxy(x1,y); cout << (char)179;
      gotoxy(x2,y); cout << (char)179;
   }
   gotoxy(x1,y1);cout << (char)218;
   gotoxy(x2,y1);cout << (char)191;
   gotoxy(x1,y2);cout << (char)192;
   gotoxy(x2,y2);cout << (char)217;

   benda_keluar();
}

void benda_keluar()
{
   int X1, Y1, X2, Y2;
   randomize();
   X1 = 3 + random(76);
   Y1 = 3 + random(20);
   gotoxy(X1,Y1);cout << '0';

   X2 = 3 + random(76);
   Y2 = 3 + random(20);
   gotoxy(X2,Y2);cout << 'Q';
   fungsiTombol_gerakBenda(X1, Y1, X2, Y2);
}

void benda1(int X1,int Y1)
{
  gotoxy(X1,Y1);cout << '0';
}

void benda2(int X2,int Y2)
{
  gotoxy(X2,Y2);cout << 'Q';
}

void benda3(int X1,int Y1)
{
  gotoxy(X1,Y1);cout << ' ';
}

void benda4(int X2,int Y2)
{
  gotoxy(X2,Y2);cout << ' ';
}

void fungsiTombol_gerakBenda(int X1, int Y1, int X2, int Y2)
{

      int pilihan_f;
        int arah_benda1;int arah_benda2;
      int kiriatas;int atas;int kananatas;int kiri;int kanan;
      int kiribawah;int bawah;int kananbawah;
      int scan ;int ascii;
      int F1;int F2;int F3;int F4;

      F1 = 1;F2 = 2;F3 = 3;F4 = 4;
      kiriatas =5;atas =6;kananatas =7;kiri =8;kanan =9;
      kiribawah =10;bawah =11;kananbawah =12;

    do
    {
    baca_keyboard(ascii, scan);
        switch(scan)
      {
          case 59:pilihan_f = F1;break;   // benda 1 aktif
         case 60:pilihan_f = F2;break;   // benda 2 aktif
         case 61:pilihan_f = F3;break;  // benda1_2 aktif
         case 62:pilihan_f = F4;break;  // benda1_2 nonaktif
      }

      if(pilihan_f == F1 || pilihan_f == F3)
      {
         switch(scan)
         {
            case 71: arah_benda1 = kiriatas ; break;  //home
            case 72: arah_benda1 = atas; break;       //up
            case 73: arah_benda1 = kananatas ; break; //pageUp
            case 75: arah_benda1 = kiri ; break;      //left
            case 77: arah_benda1 = kanan ; break;     //right
            case 79: arah_benda1 = kiribawah ; break; //end
            case 80: arah_benda1 = bawah ; break;     //down
            case 81: arah_benda1 = kananbawah ; break;  //pageDown


         }
      }

          tunda (0.1);
         if ( arah_benda1 == kiri  &&  X1 > 3 )
         {
            benda3(X1,Y1);
             X1--;
            benda1(X1,Y1);
                if(X1==3)
                {
                arah_benda1=kanan;
            }
         }
         else if ( arah_benda1 == kanan && X1 < 78 )
         {
            benda3(X1,Y1);
                X1++;
            benda1(X1,Y1);
            if(X1==78)
            {
                arah_benda1=kiri;
            }
         }
         else if (arah_benda1 == atas && Y1 > 3 )
         {
             benda3(X1,Y1);
               Y1--;
            benda1(X1,Y1);
               if(Y1==3)
            {
                arah_benda1=bawah;
            }
         }
         else if ( arah_benda1 == bawah && Y1 < 22 )
         {
             benda3(X1,Y1);
             Y1++;
            benda1(X1,Y1);
            if(Y1==22)
            {
                arah_benda1=atas;
            }
         }
         else if (arah_benda1 == kananatas && Y1 > 3  && X1<78 )
         {

            benda3(X1,Y1);
              Y1--; X1++;
            benda1(X1,Y1);
               if(X1 == 78 && Y1 == 3)
            {
                arah_benda1=kiribawah;
            }
            else if(Y1==3)
            {
                arah_benda1=kananbawah;
            }
            else if(X1==78)
            {
                arah_benda1=kiriatas;
            }
         }
         else if (arah_benda1 == kananbawah && Y1 < 22  && X1<78)
         {
            benda3(X1,Y1);
             Y1++; X1++;
            benda1(X1,Y1);
            if(X1==78 && Y1==22)
            {
                arah_benda1==kiriatas;
            }
            else if(X1==78)
            {
                arah_benda1=kiribawah;
            }
            else if(Y1==22)
            {
                arah_benda1=kananatas;
            }
         }
         else if (arah_benda1 == kiriatas && Y1 > 3 && X1>3)
         {
            benda3(X1,Y1);
             Y1--; X1--;
            benda1(X1,Y1);
            if(X1==3 && Y1 == 3)
            {
                arah_benda1=kananbawah;
            }
            else if(X1==4)
            {
                arah_benda1=kananatas;
            }
            else if(Y1==3)
            {
                arah_benda1=kiribawah;
            }
         }
         else if (arah_benda1 == kiribawah && Y1 < 22  && X1>3)
         {
            benda3(X1,Y1);
            Y1++; X1--;
            benda1(X1,Y1);
            if(X1==3 && Y1 == 22)
            {
                arah_benda1=kananatas;
            }
            else if(X1==3)
            {
                arah_benda1=kananbawah;
            }
            else if(Y1==22)
            {
                arah_benda1=kiriatas;
            }
         }
      if(pilihan_f == F2 || pilihan_f == F3)
      {
          switch(scan)
         {
            case 71: arah_benda2 = kiriatas ; break;      //home
            case 72: arah_benda2 = atas; break;           //up
            case 73: arah_benda2 = kananatas ; break;     //pageUp
            case 75: arah_benda2 = kiri ; break;          //left
            case 77: arah_benda2 = kanan ; break;         //right
            case 79: arah_benda2 = kiribawah ; break;     //end
            case 80: arah_benda2 = bawah ; break;          //down
            case 81: arah_benda2 = kananbawah ; break;     //pageDown
         }
      }

          if (arah_benda2 == kiri  &&  X2 > 3)
         {
            benda4(X2, Y2);
             X2--;
            benda2(X2, Y2);
                if(X2==3)
            {
                arah_benda2=kanan;
            }
         }
         else if (arah_benda2 == kanan && X2 < 78 )
         {

            benda4(X2, Y2);
                X2++;
            benda2(X2, Y2);
            if(X2==78)
            {
                arah_benda2=kiri;
            }
         }
         else if (arah_benda2 == atas && Y2 > 3 )
         {
             benda4(X2, Y2);
               Y2--;
            benda2(X2, Y2);
               if(Y2==3)
            {
                arah_benda2=bawah;
            }
         }
         else if (arah_benda2 == bawah && Y2 < 22 )
         {
            benda4(X2, Y2);
             Y2++;
            benda2(X2, Y2);
            if(Y2==22)
            {
                arah_benda2=atas;
            }
         }
         else if (arah_benda2 == kananatas && Y2 > 3  && X2<78 )
         {

            benda4(X2, Y2);
              Y2--; X2++;
            benda2(X2, Y2);
               if(X2 == 78 && Y2 == 3)
            {
                arah_benda2 = kiribawah;
            }
            else if(Y2==3)
            {
                arah_benda2=kananbawah;
            }
            else if(X2==78)
            {
                arah_benda2=kiriatas;
            }
         }
         else if (arah_benda2 == kananbawah && Y2 < 22  && X2<78)
         {
            benda4(X2, Y2);
             Y2++; X2++;
            benda2(X2, Y2);
            if(X2==78 && Y2==22)
            {
                arah_benda2=kiriatas;
            }
            else if(X2==78)
            {
                arah_benda2=kiribawah;
            }
            else if(Y2==22)
            {
                arah_benda2=kananatas;
            }
         }
         else if (arah_benda2 == kiriatas && Y2 > 3 && X2 > 3)
         {
            benda4(X2, Y2);
             Y2--; X2--;
            benda2(X2, Y2);
            if(X2==3 && Y2 == 3)
            {
                arah_benda2=kananbawah;
            }
            else if(X2==3)
            {
                arah_benda2=kananatas;
            }
            else if(Y2==3)
            {
                arah_benda2=kiribawah;
            }
         }
         else if (arah_benda2 == kiribawah && Y2 < 22 && X2>3)
         {
            benda4(X2, Y2);
             Y2++; X2--;
            benda2(X2, Y2);
            if(X2==3 && Y2 == 22)
            {
                arah_benda2=kananatas;
            }
            else if(X2==3)
            {
                arah_benda2=kananbawah;
            }
            else if(Y2==22)
            {
                arah_benda2=kiriatas;
            }
         }

      if(pilihan_f == F4)
         {
            arah_benda1 = 0;
            arah_benda2 = 0;
            gotoxy(1,25);
            cout << "Silahkan dilanjutkan atau tekan Esc untuk keluar...";
         }
    }
      while(ascii!=27);

}

void tunda(double detik)
{
    clock_t target;
   target = clock() + detik * CLK_TCK;
   while(clock() < target);
}

void baca_keyboard(int &ascii, int &scan)
{
   ascii=0;
   scan=0;
    if(kbhit() != 0)
   {
       ascii = getch();
      if(ascii == 0) scan = getch();
      else scan = 0;
   }
}



Penjelasan dari bagian – bagian penting yang terdapat pada animasi 

   - Include : Berfungsi menyisipkan file header include yang digunakan ke progam yang bersangkutan. Sehingga seluruh komponen dan anggota include tersebut dapat digunakan oleh progam yang bersangkutan. 

    - Prototype : Berguna untuk memanggil void yang berada di bawah Void main, prototype berhubungan dengan peritah – perintah pada program yang di kerjakan sesuai urutan barisnya. 
Void main : Merupakan perintah utama, atau algoritma utama yang bertugas memangil sub – sub program yang akan dijalankan. Untuk program yang di buat, main bertugas untuk menampilkan kata “Mulai” pada koordinat x=1 dan y=25. Kemudian memanggil sub algo gambar_kotak atau Void gambar_kotak. 

- Viod gambar_kotak : Merupakan bagian yang bertugas untuk membuat kotak. Void gambar_kotak nantinya akan di panggil oleh main. Di dalam Void gambar_kotak akan di panggil Void benda_keluar atau pengerjaan benda secara random. 

- Void benda_keluar : Digunakan untuk menampilkan karakter secara Acak / Random.  

- Void benda1(int X1,int Y1) : Digunakan untuk memanggil karakter 0 = ‘0‘ . dengan deklarasi X1 dan Y1.

- Void benda2(int X2,int Y2) : Digunakan untuk memanggil karakter Q = ‘Q‘ . dengan deklarasi X2 dan Y2. 

- Void benda3(int X1,int Y1) : Digunakan untuk memanggil karakter sepasi = ‘ ‘ . dengan deklarasi X1 dan  

 -Void benda4(int X2,int Y2) : Digunakan untuk memanggil karakter sepasi = ‘ ‘ . dengan deklarasi X2 dan Y2.

- Void tunda : Digunakan untuk waktu tunda benda, yang digunakan sebagai efek karekter bergerak secara alami / wajar.

   - Void baca_keyboard : Digunakan untuk mendateksi tombol keyboard yang di tekan, ini berhubungan dengan fungsi – fungsi tombol yang akan digunakan nantinya.

      - Void fungsiTombol_gerakBenda(int X1, int Y1, int X2, int Y2): Di dalam Void ini terdapat fungsi tombol F1, F2, F3, dan F4 untuk pemilihan karakter sekaliagus dapat menghasilkan efek gerak dari karakter dengan menggunakan fungsi tombol Up, PgDn, Left, PgUp, Down, End, Right, Home. Berikut uraian fungsi tombol tersebut :

       Perintah fungsi tombol F1, F2, F3, dan F4 :
-          Jika F1 ditekan karakter 1 yang aktif
-          Jika F2 ditekan karakter 2 yang aktif
-          Jika F3 ditekan kedua karakter aktif
-          Jika F4 ditekan kedua karakter berhenti bergerak di posisi akhir karakter
  
   Perintah fungsi tombol Up, PgDn, Left, PgUp, Down, End, Right, Home  :
-          Jika Up maka menuju ke atas
-          Jika Page Down maka menuju ke kanan bawah
-          Jika Left maka menuju ke kiri
-          Jika Page Up maka menuju ke kanan atas
-          Jika Down maka menuju ke bawah
-          Jika End maka menuju ke kiri bawah
-          Jika Right maka menuju ke kanan
-          Jika Home maka menuju ke kiri atas



Tidak ada komentar:

Posting Komentar