Showing posts with label meriam. Show all posts
Showing posts with label meriam. Show all posts

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.