Monday, November 30, 2009

Hari pengganti ?

Selasa (1 des)dan kamis (3 des), tatap muka dan praktikum di tiadakan. Gantinya akan dicarikan harinya jika diperlukan. Silahkan kirim pesan (terkait dengan hari) di blog ini, jika penggantinya diperlukan. Jika tidak ada tanggapan, penggantinya dianggap tidak diperlukan. Sebagai catatan, semua materi sudah diberikan dalam tatap muka dan praktikum yang lalu.

Wednesday, November 25, 2009

Kuis 6 untuk 26 November 2009

Buat program secara nonvisual untuk menampilkan koordinat dari ujung-ujung segi .... (akan diberitahu pada saat kuis). Nilai sampai disini adalah 80. Buat pula program secara visual untuk menampilkan gambar tersebut, ditengah jScrollPane. Nilai sampai disini adalah 100. Jika tidak selesai sesuai permintaan soal, nilainya adalah 40. Pembuatan program boleh digabung sehingga cukup dibuat sebuah program visual untuk menampilkan kedua permintaan tersebut:
  1. Tampilkan koordinat sesuai dengan segi yang diminta dalam soal
  2. Tampilkan gambar dengan koordinat seperti nomor 1, namun digeser ketengah jScrollPane sehingga gambar berada tepat di tengah
Tapi, untuk UAS, pastikan anda paham betul pembuatan program non-visual (berikut memasukkan input paling sederhana dengan menggunakan Scanner).

Saturday, November 21, 2009

xUjungMeriam dan yUjungMeriam

Wah gimana nih kok ngga ada tanda-tanda kehidupan (=pertanyaan) terkait dengan jawaban kuis 5 ? Kalau tak ada, saya tanya deh ........... (siapa takut ?): darimana datangnya ruas kanan pada xUjungMeriam dan yUjungMeriam ???? Masak sih supaya ada tanda-tanda kehidupan perlu ada kuis dahulu (=masak sih pertanyaan semacam ini perlu di kuis kan dahulu) ? Apa perlu ada kuis tatap muka terkait dengan pertanyaan semacam ini ?

Thursday, November 19, 2009

Jawaban Kuis 5

Pembahasan hari ini merupakan jawaban kuis 5 nomor 1 dan 2. Kedua nomor tersebut sengaja digabung, bahkan diperluas sehingga posisi meriam dapat dengan leluasa dipindahkan sesuai dengan slider yang ada di bawah jScrollPane. Pada saat menjalankan program yang sudah jadi, coba geser slidernya dengan menggunakan mouse yang di tekan (tombol kirinya). Setelah itu coba mouse masuk kembali ke jScrollPane. Amati apa yang terjadi.

Supaya user tidak bingung menentukan bagian depan atau belakang dari meriam, maka sengaja pada bagian depan diletakkan peluru yang diam relatif terhadap bagian depan meriam tersebut.

Program lengkap dapat di download melalui link ini. Namun demikian, bagian terpenting dari program tersebut juga disajikan di sini.

Berikut ini adalah class Meriam:

package noFrame;
import javax.swing.*;
import java.awt.*;

public class Meriam extends JPanel{
   private int xPorosMeriam, yPorosMeriam, xMouse, yMouse;
   private int[] xUjungMeriam, yUjungMeriam;
   public Meriam(int xPorosMeriam, int yPorosMeriam,
      int xMouse, int yMouse){
       this.xPorosMeriam = xPorosMeriam;
       this.yPorosMeriam = yPorosMeriam;
       this.xMouse = xMouse;
       this.yMouse = yMouse;
   }
   public void paintComponent(Graphics g){
       xUjungMeriam = new int[4];
       yUjungMeriam = new int[4];
       double rusuk = Math.min(getWidth(), getHeight()) * 0.1;
       double theta = Math.atan2(yMouse-yPorosMeriam,
xMouse-xPorosMeriam);


       //Meriam
       Polygon p = new Polygon();
       for(int index=0; index<4;>
          xUjungMeriam[index] = (int)(xPorosMeriam +
          rusuk * Math.cos(Math.PI*(1+2*index)/4 + theta));
          yUjungMeriam[index] = (int)(yPorosMeriam +
          rusuk * Math.sin(Math.PI*(1+2*index)/4 + theta));
          p.addPoint(xUjungMeriam[index], yUjungMeriam[index]);

       }
       g.setColor(Color.yellow);
       g.fillPolygon(p);
       g.setColor(Color.magenta);
       g.drawPolygon(p);

       //Peluru Diam Di UjungMeriam (ikut berputar bersama meriam)
       int xPeluruDiUjungMeriam = (int)(xPorosMeriam +rusuk*Math.cos(theta));
       int yPeluruDiUjungMeriam = (int)(yPorosMeriam +rusuk*Math.sin(theta));
       g.setColor(Color.pink);
       g.fillOval((int)(xPeluruDiUjungMeriam-rusuk/2),
           (int)(yPeluruDiUjungMeriam-rusuk/2),
           (int)rusuk, (int)rusuk);
    }
}


Class Meriam tersebut perlu dipanggil dari

private void jScrollPane1MouseMoved(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
    int xMeriam = jSlider1.getValue()*jScrollPane1.getWidth()/100;
    int yMeriam = jScrollPane1.getHeight()*3/4;
    Meriam belina = new Meriam(xMeriam, yMeriam, evt.getX(), evt.getY());
    jScrollPane1.add(belina);
    jScrollPane1.setViewportView(belina);
    repaint();
}

Ada komentar / pertanyaan ? Mantab to ????????? Apakah anda jadi penasaran ingin melanjutkan melepas peluru yang diam itu dengan meng-klik mouse ?? Kalau ya, bisakah anda melanjutkan pemrogramannya ??

Wednesday, November 18, 2009

Kuis 5 untuk 19 November 2009

Kerjakan satu diantara dua soal berikut (sesuai dengan instruksi yang akan diberikan di ruang laboratorium komputer). Jika tidak selesai (sesuai soal berikut) dalam 60 menit, maka nilainya adalah 40.
  1. Buat program visual sederhana untuk menampilkan sebuah meriam berupa persegi panjang yang dapat berputar pada poros putaran di ujung kanan meriam. Meriam tersebut berada di kanan bawah jScrollPane (nilai sampai sini 70). Arah meriam disesuaikan dengan posisi mouse sehingga meriam selalu mengarah ke mouse. Gunakan mouseMoved yang dibuat melalui properties, untuk mengambil posisi dari mouse tersebut (nilai sampai sini 100).
  2. Serupa dengan soal 1, namun meriam berada di kiri bawah.

Sunday, November 15, 2009

Tumbuk Hilang

Terkait dengan kuis kamis 19 November 2009 mendatang, silahkan buat program sederhana seperti kuis 4, namun dengan ketentuan tambahan berikut (ketentuan tambahan ini menghilangkan ketentuan yang disebut pada kuis 4):
  1. Moncong meriam terletak agak dibawah (sementara target terletak agak di atas)
  2. Meriam punya poros yang tak dapat digerakkan, sehingga meriam tersebut tidak bergerak atas bawah mengikuti mouse dalam jScrollPane. Meriam hanya terputar dengan poros sebagai pusat putaran. Arah putaran tersebut adalah sesuai dengan posisi ketinggian mouse dalam jScrollPane.
  3. Ketika target ditumbuk peluru, target tersebut hilang.
  4. Ketentuan selebihnya adalah sama dengan ketentuan pada kuis 4.
Usahakan anda sudah bisa mengerjakan soal ini sebelum tatap muka hari selasa 17 November 2009, sehingga pembahasan untuk kuis 19 November lancar. Ada pertanyaan / komentar ? Silahkan jika ada.

Thursday, November 5, 2009

Jawaban Kuis 4 nomor 2

Silahkan pelajari jawaban kuis 4 nomor 2 agar anda bisa menjawab kuis 4 nomor 1. Silahkan di download , di unzip lalu di buka projeknya dan di run. Kalau tidak bisa menjalankan projeknya melalui netbeans, paling tidak pelajari listing programnya. Prosedur pembuatannya memang panjang. Tapi intinya adalah beberapa gambar perlu di implementasikan lebih dari sekali. Misalnya untuk menggambar target: target perlu ada sebelum ada moncong meriam yang timbul karena gerakan mouse di dalam jSrollPane. Ada pertanyaan ? Siapa yang sudah berhasil mengerjakan kuis 4 soal 1 ?

Kuis 4 untuk 5 November 2009

Wah maaf ketiduran (sehingga postingnya telat). Berikut ini adalah soal kuis hari kamis 5 November 2009. Kerjakan satu diantara dua soal berikut (sesuai dengan instruksi yang akan diberikan di ruang laboratorium komputer). Jika tidak selesai (sesuai soal berikut) dalam 60 menit, maka nilainya adalah 40.
  1. Buat program visual sederhana untuk menampilkan sebuah persegi panjang yang bergerak atas-bawah sesuai dengan posisi kursor ketika berada di jScrollPane. Gunakan mouseEntered (bukan mouseClicked) yang dibuat melalui properties, untuk gerakan persegi panjang tersebut. Gunakan variabel global untuk menyimpan posisi vertikal mouse sehingga bisa dipakai oleh fungsi/method lain (nilai sampai sini 60). Ketika mouse di klik (berarti gunakan mouseClicked untuk ini, bukan mouseEntered), sebuah lingkaran (sebut A) akan keluar dari persegi panjang tersebut dan bergerak ke kiri. Gunakan variabel global tadi untuk mengambil posisi vertikal dari persegi panjang untuk digunakan sebagai posisi vertikal dari lingkaran tersebut (nilai sampai sini 80). Buatlah sasaran berupa lingkaran ditengah (sebut B). Ketika A menumbuk B, B bergerak meneruskan gerakan A, sedangkan A berhenti (nilai sampai sini 100).
  2. Buat program visual sederhana untuk menampilkan sebuah persegi panjang yang bergerak atas-bawah sesuai dengan posisi kursor ketika berada di jScrollPane. Gunakan mouseEntered (bukan mouseClicked) yang dibuat melalui properties, untuk gerakan persegi panjang tersebut. Gunakan variabel global untuk menyimpan posisi vertikal mouse sehingga bisa dipakai oleh fungsi/method lain (nilai sampai sini 60). Ketika mouse di klik (berarti gunakan mouseClicked untuk ini, bukan mouseEntered), sebuah lingkaran (sebut A) akan keluar dari persegi panjang tersebut dan bergerak ke kiri. Gunakan variabel global tadi untuk mengambil posisi vertikal dari persegi panjang untuk digunakan sebagai posisi vertikal dari lingkaran tersebut (nilai sampai sini 80). Buatlah sasaran berupa kotak besar ditengah (sebut B). Ketika A menumbuk B, B tetap diam, sedangkan A terpantul ke arah sebaliknya dengan kelajuan sama dengan kelajuan awalnya (nilai sampai sini 100).

Tuesday, November 3, 2009

Jawaban Ping Pong

Ternyata, tidak sulit-sulit amat. Berikut ini adalah bagian yang mengandung logika terpenting (didalam method paint atau paintComponent)

    public void paint(Graphics g){
        super.paint(g);
        g.setColor(Color.PINK);
        if(x==width){
            arah="ke kiri";
        }else if(x==0){
            arah="ke kanan";
        }
        if(arah.equals("ke kiri")){
            x--;
            g.fillOval(x, 70, 20, 20);
        }else if(arah.endsWith("ke kanan")){
            x++;
            g.fillOval(x, 70, 20, 20);
        }
    }

Ada pertanyaan ? Hayoo coba bagian lainnya bagaimana ? Dimana mendeklarasikan x dan arah ? Apa tipe dari variable arah ? Apakah perlu memberi nilai arah="" pada konstruktor ? Siapa berani jawab ?

Sunday, November 1, 2009

Ping Pong

Kamis kemarin ada yang tanya bagaimana membuat bola yang bergerak dari kanan kekiri, lalu menumbuk dinding bagian kiri, kemudian terpental ke kanan, lalu menumbuk dinding kanan, kemudian terpental. Singkat kata: bagaimana membuat bola selalu terpental ke kiri dan ke kanan lalu ke kiri dst, seperti bola ping pong ideal yang selalu terpental tanpa henti. Ada yang punya usul bagaimana membuatnya ? Bagaimana kalau soal semacam ini keluar di kuis 4 ?