Prodi Sistem Informasi | Belajar HTML dan PHP | Skripsi SI
Pesantren Katabah
1000 Penghafal Quran
Pengobatan Ruqyah Mandiri
Sistem Informasi (S1)
Manajemen Informatika
Blog | Kontak | Siap Kerja | Sertifikat | PrivacyPolicy | Inggris Arab | Daftar Isi

Sunday, March 23, 2014

Cara Membuat Game Sederhana Puzzle Dengan Java dan NetBeans (Disertai Langkah dan Gambar)



Saat ini, saya sedang belajar membuat game menggunakan bahasa pemrograman Java. Kata pembuatnya disebut Puzzle. Berdasarkan hasilnya, saya memahami bahwa game Puzzle ini menjadikan sebuah foto acak-acakan, kemudian saya harus menyusunnya sehingga menjadi foto/gambar utuh.

Ini ilustrasinya:

Gambar di atas memiliki gambar utuh dalam bentuk lingkaran yang berwarna merah, dan garis sisi berwarna hitam. Berikut ini langkah-langkahnya:


1.      Buka NetBeans IDE 6.8
2.      File – New Project
3.      Klik Java
4.      Klik Java Application
5.      Klik tombol Next
6.      Ketik di kotak Project Name: MembuatPuzzle
7.      Tentukan lokasi dan nama folder di Project Location, misal D:\100java
8.      Hilangkan tanda centang pada kotak Create Main Class
9.      Klik Tombol Finish
10.  Klik kanan project MembuatPuzzle
11.  Klik New
12.  Klik Java Package
13.  Lihat gambar berikut:


14.  Ketik di kotak Package Name: MembuatPuzzlePackage
15.  Klik Tombol Finish
16.  Klik kanan pada MembuatPuzzlePackage
17.  Lihat gambar berikut:


18.  Ketik di kotak Class Name: MembuatPuzzleJFrame
19.  Klik tombol Finish
20.  Klik tombol Source
21.  Lihat gambar berikut ini:



22.  Di bawah teks package MembuatPuzzlePackage;
Ketik script berikut:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.CropImageFilter;
import java.awt.image.FilteredImageSource;
import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

23.  Di bawah teks public class MembuatPuzzleJFrame extends javax.swing.JFrame {
Ketik script berikut:
    private JPanel centerPanel;
    private JButton button;
    private JLabel label;
    private Image source;
    private Image image;
    int[][] pos;
    int width, height;

24.  Ubah teks public class MembuatPuzzleJFrame extends javax.swing.JFrame {
Menjadi:
public class MembuatPuzzleJFrame extends JFrame implements ActionListener{

25.  Hapus teks initComponents();
26.  Di bawah teks public MembuatPuzzleJFrame() {
Ketik script berikut:
pos = new int[][] {
                            {0, 1, 2},
                            {3, 4, 5},
                            {6, 7, 8},
                            {9, 10, 11}
                        };

        centerPanel = new JPanel();
        centerPanel.setLayout(new GridLayout(4, 4, 0, 0));

//        ImageIcon sid = new ImageIcon(Puzzle.class.getResource("bulat.jpg"));
        ImageIcon sid = new ImageIcon(MembuatPuzzleJFrame.class.getResource("bulat.jpg"));
        source = sid.getImage();

        width = sid.getIconWidth();
        height = sid.getIconHeight();

        add(Box.createRigidArea(new Dimension(0, 5)), BorderLayout.NORTH);
        add(centerPanel, BorderLayout.CENTER);

        for ( int i = 0; i < 4; i++) {
            for ( int j = 0; j < 3; j++) {
                if ( j == 2 && i == 3) {
                    label = new JLabel("");
                    centerPanel.add(label);
                } else {
                    button = new JButton();
                    button.addActionListener(this);
                    centerPanel.add(button);
                    image = createImage(new FilteredImageSource(source.getSource(),
                        new CropImageFilter(j*width/3, i*height/4,
                            (width/3)+1, height/4)));
                    button.setIcon(new ImageIcon(image));
                }
            }
        }

        setSize(220, 280);
        setTitle("Membuat Puzzle");
        setResizable(false);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        setVisible(true);
    }

    public static void main(String[] args) {

        new MembuatPuzzleJFrame();

    }

    public void actionPerformed(ActionEvent e) {
        JButton button = (JButton) e.getSource();
        Dimension size = button.getSize();

        int labelX = label.getX();
        int labelY = label.getY();
        int buttonX = button.getX();
        int buttonY = button.getY();
        int buttonPosX = buttonX / size.width;
        int buttonPosY = buttonY / size.height;
        int buttonIndex = pos[buttonPosY][buttonPosX];

        if (labelX == buttonX && (labelY - buttonY) == size.height ) {

             int labelIndex = buttonIndex + 3;

             centerPanel.remove(buttonIndex);
             centerPanel.add(label, buttonIndex);
             centerPanel.add(button,labelIndex);
             centerPanel.validate();
        }

        if (labelX == buttonX && (labelY - buttonY) == -size.height ) {

             int labelIndex = buttonIndex - 3;
             centerPanel.remove(labelIndex);
             centerPanel.add(button,labelIndex);
             centerPanel.add(label, buttonIndex);
             centerPanel.validate();
        }

        if (labelY == buttonY && (labelX - buttonX) == size.width ) {

             int labelIndex = buttonIndex + 1;

             centerPanel.remove(buttonIndex);
             centerPanel.add(label, buttonIndex);
             centerPanel.add(button,labelIndex);
             centerPanel.validate();
        }

        if (labelY == buttonY && (labelX - buttonX) == -size.width ) {

             int labelIndex = buttonIndex - 1;

             centerPanel.remove(buttonIndex);
             centerPanel.add(label, labelIndex);
             centerPanel.add(button,labelIndex);
             centerPanel.validate();
        }
}  

27.  Kemudian, hapus semua tulisan berikut ini:
public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new MembuatPuzzleJFrame().setVisible(true);
            }
        });
}

28.  Simpan gambar dengan nama bulat.jpg di D:\100java\MembuatPuzzle\src\MembuatPuzzlePackage

Atau pada folder src\MembuatPuzzlePackage sesuai lokasi folder anda

Catatan:
Saya sendiri membuat gambar bulat.jpg mengunakan Paint (Start – All Programs – Accessories – Paint)

Atau copy saja gambar ini:


29.  Jalankan program di Netbeans (Run – Run File)
30.  Hasilnya seperti ini:

Keterangan:
Yang tanda bitang merah itu sebenarnya kotak kosong. Apabila salah satu pecahan gambar yang paling dekat dengan kotak kosong tersebut diklik, maka potongan gambar tersebut akan menempati kotak kosong tersebut.

Apabila kita acak-acak, kemudian disusun kembali, maka permainannya cukup memusingkan juga. he…he..

31.  Selesai.

Sebagai latihan, saya juga meletakkan beberapa gambar dan foto di D:\100java\MembuatPuzzle\src\MembuatPuzzlePackage

Kemudian mengganti nama gambar/foto pada script ini:
ImageIcon sid = new ImageIcon(MembuatPuzzleJFrame.class.getResource("bulat.jpg"));

Salah satunya foto saya sendiri:
Awalnya seperti ini:


Setelah program dijalankan, fotoku jadi hancur begini:


***
Ungkapan Terimakasih sebesar-besarnya saya sampaikan kepada Mas Hendi Santika yang telah berbagi script program  game di atas pada blognya.



Sumber:
hendisantika.wordpress.com/2013/12/05/membuat-game-puzzle-dengan-java
"Boleh Konsultasi Masuk Jurusan Sistem Informasi via IG atau Tiktok."
Tips Skripsi Program Studi Sistem Informasi

7 comments:

  1. bagaimana cara mengubah ukuran dalam petak2 tersebut, klo di gambar bulat kan per petak nya ada gambar, tp gak full , cuma di tengahnya aja, sedangkan di latihan foto anda kan per petaknya gambarnya full.. script mana yg harus di ubah, maklum masi awam.. thanks

    ReplyDelete
  2. K, sorry mcau tanya, pas aku run, ga bs, doesnt main class set,berarti yg kurang apanya ya kk...?

    ReplyDelete
    Replies
    1. Coding d classnya ada yg kurang. Kurang lebhnya seperti itu

      Delete
  3. terima kasih gan,, share nya bagus,, semoga makin lebih baik

    ReplyDelete
  4. kk kenapa gak jalan , trus di imageiconnya ada yang error class nya

    ReplyDelete
  5. iya sama... tapi terimakasih atas sharenya ... cuman ada beberapa di bawah eror

    ReplyDelete