Senin, 17 Juni 2013

Tugas Membuat Game dengan Processing

INITIAL STATE
            Game ini terdiri dari sebuah bola oranye dan ring untuk memasukkan bola sehingga tampak seperti olahraga basket. Permainan ini dimainkan oleh satu orang. Pemain harus menekan tombol kiri mouse kemudian arahkan lemparan sehingga bola masuk ke dalam ring, jika bola tepat melewati ring dari atas ring ke bawah ring maka score akan bertambah 1.

Tampilan Permainan
ATURAN PERMAINAN
  1. Pemain melempar bola dengan menekan tombol kiri mouse serta menggeser cursor.
  2. Jika bola melewati ring, yaitu jatuh dari atas ring menuju bawah ring pada garis horizontal merah maka score akan bertambah satu.

LISTING PROGRAM
// untuk deklarasi variabel
float Vx = 5;
float Vy = 1;
float xPosition = 50;
float yPosition = 50;

float Pbola = 40;
float Tbola = 40;

int nilai = 0;

PImage bola;

void setup()
{
  size(610, 400);
  background(255);
  smooth();
  bola = loadImage ("bola.png"); 
}

void draw()
{
 
// untuk membuat tulisan di sisi kiri 
  fill(0,0,255);
  text("Kecepatan arah X  ", 20,30);
  text(Vx, 130,30);
  text("Kecepatan arah Y  ", 20,50);
  text(Vy, 130,50);
  text("Tinggi Pantulan  ", 20,70);
  text(-(yPosition-380), 130,70);
  text("Score: "+nilai, 20, 90);

// untuk membuat ring
  fill(255,0,0);
  rect(500,100,100,10);
  rect(600,40,500,80);
 
  fill(0,0,0);
  rect(605,120,610,400); 

// untuk membuat jaring-jaring ring
  line(500,110,520,200);
  line(510,110,530,200);
  line(520,110,540,200);
  line(530,110,550,200);
  line(540,110,560,200);
  line(550,110,570,200);
  line(560,110,580,200);
  line(570,110,585,180);
  line(580,110,590,160);
 
  line(600,110,580,200);
  line(590,110,570,200);
  line(580,110,560,200);
  line(570,110,550,200);
  line(560,110,540,200);
  line(550,110,530,200);
  line(540,110,520,200);
  line(530,110,515,180);
  line(520,110,510,160);
 
// untuk membuat layar tidak menyisakan bayangan 
  fill(255,150);
  rect(0, 0,width, height);

// untuk membuat bola
  image(bola,xPosition-25, yPosition-35,60,68);

//deklarasi kecepatan dari posisi bola awal saat aplikasi dijalankan dan saat bola bergerak
  Vy +=.5;
  Vx *=1;
  xPosition += Vx;
  yPosition += Vy;

// Arah mantul ke kiri
  if (xPosition > width-Pbola/2)
  {
    xPosition = width-Pbola/2;
    Vx = -Vx;
  }

// Arah mantul ke kanan
  if (xPosition < Pbola/2)
  {
    xPosition = Pbola/2;  
    Vx = -Vx;
  }
 
// Arah mantul dari atas
  if (yPosition < Tbola/2)
  {
    yPosition = Tbola/2;  
    Vy = -Vy*.5;
  }

// Pantulan gravitasi
  if (yPosition > height-Tbola/2)
  {
    yPosition = height-Tbola/2;
    Vy = -Vy*.9;
  }

// Perlambatan bola
  if (yPosition > height-Tbola/2-1)
  {
    Vx *=.9;
  }
//penambahan nilai 
if (xPosition >= 520 && yPosition < 110 && yPosition > 105)
    {
         yPosition=111;
         if ( Vy <= 0)
         {
          Vy = -Vy;
         }        
         else
         {
           nilai+=1;
         }
     }
    
//membuat bola tidak masuk dari bawah ring    
if (((xPosition>=480 && xPosition < 520) || (xPosition>=580 && xPosition < 600)) && yPosition > 100 && yPosition < 200)
     {
      Vx = -Vx;
      if (xPosition > 480 && yPosition < 110 && yPosition > 105)
      {
      Nilai +=1;
      }
     }     
    }


// lempar bola
void mouseDragged()
{
  xPosition = mouseX;
  yPosition = mouseY;
  Vx = mouseX - pmouseX;
  Vy = mouseY - pmouseY;
}
LOGIKA PROGRAM
Pertama adalah pendeklarasian dari variabel-variabel yang digunakan, yaitu
1.      Vx dan Vy sebagai nilai untuk menggerakan bola.
2.      xPosition dan yPosition merupakan letak bola yang nantinya akan dipengaruhi oleh variabel Vx dan Vy untuk memindahkan posisi bola.
3.      Pbola dan Tbola merupakan ukuran bagian bola yang akan memantul atau dapat disebut dengan ukuran jari-jari dari bola yang dibuat.
4.      Variabel nilai digunakan untuk score yang ditampilkan saat bola melewati ring.
Kemudian dibuat method – method untuk setiap fungsi.
-          Void setup, merupakan method untuk pengaturan – pengaturan yang diproses pada layar tampilan aplikasi, yaitu ukuran window adalah 610x400, warna background putih dan menggunakan fungsi smoth().


Gambar Kondisi Window

-          Void draw, merupakan method untuk membuat fungsi fungsi yang ada di dalam layar yaitu membuat tulisan sebagai keterangan, membuat garis untuk dijadikan ring dan lingkaran untuk dijadikan bola. Didalam void draw disisipkan statement kondisi untuk mengondisikan agar bola terlihat bergerak dan memantul.
o   Membuat ring
Untuk membuat ring digunakan sintaks line(titikX1, titikY1, titikX2, titikY2); yaitu untuk membuat garis di mana nilai X dan Y dilihat seperti pada gambar di bawah ini, untuk membuat persegi gunakan metode yang sama seperti membuat garis namun dengan mengubah line dengan rect.

o   Membuat bola
Untuk membuat bola di gunakan  sintaks image di mana sebelumnya dideklarasikan variable image dengan tipe data PImage dan pada setup dideklarasikan bahwa variable gambar tersebut memuat gambar apa dengan sintaks loadImage. Untuk memanggil gambar yang sudah dideklarasikan gunakan sintaks image(variabel gambar, X1, Y1, panjang, tinggi);
Setelah bentuk dari latar dan bolanya sudah dibentuk maka selanjutnya adalah membuat kondisi – kondisi untuk memindahkan bola dan memantulkannya saat berbenturan dengan sisi window. Batasan batasan yang dibuat adalah batasan ke bagian atas, kanan, kiri, dan bawah window yang memantulkan bola dengan mengubah arah kecepatan bola ke arah sebaliknya, misal kecepatan horizontal bola adalah 100 kemudian saat dipantulkan kecepatannya diubah menjadi -100 yaitu dengan mengalikan nilai kecepatan dengan negatif satu (-1). Untuk menanggulangi terjadinya pantulan yang terus berulang – ulang maka posisi bola harus diatur ulang saat memantul.
Lemparan bola pada aplikasi ini adalah bergerak parabola karena dipengaruhi dengan algoritma berikut:
  1. Posisi bola akan berada pada xPosition dan yPosition. Anggap jika letak layar berupa diagram cartesius (x,y), misal nilai posisi awal adalah (100,100) dan pergerakan posisi pada x adalah berubahnya lokasi x dengan penambahan 0.5 secara konstan.
  2. Jika posisi bola (xPosition,yPosition) berada pada ujung sisi window maka nilai Vx atau Vy akan dikalikan negatif satu jadi bola akan berbalik ke arah sebelumnya.
  3. Jika posisi bola memantul di sisi height maka nilai Vy akan dikalikan dengan 0.5 setiap kali bola berada di posisi height. 

Download filenya disini