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 ??
Showing posts with label meriam. Show all posts
Showing posts with label meriam. Show all posts
Thursday, November 19, 2009
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.
- 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).
- Serupa dengan soal 1, namun meriam berada di kiri bawah.
Labels:
jscrollpane,
meriam,
mouse,
move
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):
- Moncong meriam terletak agak dibawah (sementara target terletak agak di atas)
- 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.
- Ketika target ditumbuk peluru, target tersebut hilang.
- Ketentuan selebihnya adalah sama dengan ketentuan pada kuis 4.
Subscribe to:
Posts (Atom)