Membuat Game Puzzle Dengan Java NetBeans IDE 8.2 - games java terbaik

Membuat Game Puzzle Dengan Java NetBeans IDE 8.2 - Pada postingan saya kali ini, saya akan berbagi bagaimana cara membuat game sederhana dengan Java Netbeans, kita belajar membuat game java, membuat game Puzzle.Bahasa pemrograman Java Merupakan bahasa pemrograman tingkat tinggi yang berorientasi objek dan terdiri dari kelas-kelas tertentu.

Game Puzzle Dengan Java NetBeans IDE 8.2 - games java terbaik

kita akan membuat sebuah game puzzle dengan menggunakan bahasa pemrograman java dan tools yang digunakan netbeans 8.2, belajar bahasa permorgraman memang susah-susah gampang tetapi pada dasarnya dari yang saya dengar dari programmer membuat sebuah program membutuhkan logika dalam proses membuat game, Membuat program sangat membutuhkan metode dan algoritma begitu pun pada saat kita membuat game java atau game puzzle. banyak sekali macam-macam algoritma, karena dalam penerapannya untuk memecahkan sebuah kasus dan penyelesaiannya pada program memang sebagian berbeda karena tidak semuanya cocok dalam proses pembuatan program.
sudah cukup basa-basinya, sekarang kita langsung ke tahap cara membuat game Puzzle dengan java netbeans 8.2.
Disini saya membuat tutorial game puzzle yang sederhana, menggunakan :
  • NetBeans 8.2
  • Windows 10 64 bit
membuat game puzzle ini hanya bisa dibuat menggunakan laptop/Pc, dan pastikan anda sudah meng-instal aplikasi Netbeans 8.2.
oke langsung saja ketahap pembuatan.
langkah pertama
anda buka aplikasi netbeans 8.2, lalu Buat project baru, Klik File>New Project
isikan nama project game puzzle
langkah kedua
Setelah Membuat project baru maka akan otomatis ada main class GamePuzzle.java
pada class tersebut copy kode berikut :
package game.puzzle;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.awt.image.CropImageFilter;
import java.awt.image.FilteredImageSource;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.AbstractAction;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
/**
 *
 * @author CH MUNGKUR
 */
class MyButton extends JButton {

    private boolean isLastButton;

    public MyButton() {
        super();
        initUI();
    }
    public MyButton(Image image) {
        super(new ImageIcon(image));
        initUI();
    }
    private void initUI() {
        isLastButton = false;
        BorderFactory.createLineBorder(Color.gray);
        addMouseListener(new MouseAdapter() {
            @Override
            public void mouseEntered(MouseEvent e) {
                setBorder(BorderFactory.createLineBorder(Color.red));
            }
            @Override
            public void mouseExited(MouseEvent e) {
                setBorder(BorderFactory.createLineBorder(Color.black));
            }
        });
    }
    public void setLastButton() {        
        isLastButton = true;
    }
    public boolean isLastButton() {
        return isLastButton;
    }
}
public class GamePuzzle extends JFrame {
    private JPanel panel;
    private BufferedImage source;
    private BufferedImage resized;    
    private Image image;
    private MyButton lastButton;
    private int width, height;        
    private List<MyButton> buttons;
    private List<Point> solution;
    private final int NUMBER_OF_BUTTONS = 12;
    private final int DESIRED_WIDTH = 600;
    public GamePuzzle() {
        initUI();
    }
    private void initUI() {
        solution = new ArrayList<>();        
        solution.add(new Point(0, 0));
        solution.add(new Point(0, 1));
        solution.add(new Point(0, 2));
        solution.add(new Point(1, 0));
        solution.add(new Point(1, 1));
        solution.add(new Point(1, 2));
        solution.add(new Point(2, 0));
        solution.add(new Point(2, 1));
        solution.add(new Point(2, 2));
        solution.add(new Point(3, 0));
        solution.add(new Point(3, 1));
        solution.add(new Point(3, 2));
        buttons = new ArrayList<>();
        panel = new JPanel();
        panel.setBorder(BorderFactory.createLineBorder(Color.gray));
        panel.setLayout(new GridLayout(4, 3, 0, 0));
        try {
            source = loadImage();
            int h = getNewHeight(source.getWidth(), source.getHeight());
            resized = resizeImage(source, DESIRED_WIDTH, h,
                    BufferedImage.TYPE_INT_ARGB);
        } catch (IOException ex) {
            Logger.getLogger(GamePuzzle.class.getName()).log(
                    Level.SEVERE, null, ex);
        }
        width = resized.getWidth(null);
        height = resized.getHeight(null);
        add(panel, BorderLayout.CENTER);
        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 3; j++) {
                image = createImage(new FilteredImageSource(resized.getSource(),
                        new CropImageFilter(j * width / 3, i * height / 4,
                                (width / 3), height / 4)));                
                MyButton button = new MyButton(image);
                button.putClientProperty("position", new Point(i, j));
                if (i == 3 && j == 2) {
                    lastButton = new MyButton();
                    lastButton.setBorderPainted(false);
                    lastButton.setContentAreaFilled(false);
                    lastButton.setLastButton();
                    lastButton.putClientProperty("position", new Point(i, j));
                } else {
                    buttons.add(button);
                }
            }
        }
        Collections.shuffle(buttons);
        buttons.add(lastButton);
        for (int i = 0; i < NUMBER_OF_BUTTONS; i++) {
            MyButton btn = buttons.get(i);
            panel.add(btn);
            btn.setBorder(BorderFactory.createLineBorder(Color.gray));
            btn.addActionListener(new ClickAction());
        }
        pack();
        setTitle("Puzzle");
        setResizable(false);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    private int getNewHeight(int w, int h) {
        double ratio = DESIRED_WIDTH / (double) w;
        int newHeight = (int) (h * ratio);
        return newHeight;
    }
    private BufferedImage loadImage() throws IOException {
        BufferedImage bimg = ImageIO.read(new File("src/gambar/emot.jpg"));
        return bimg;
    }
    private BufferedImage resizeImage(BufferedImage originalImage, int width,
            int height, int type) throws IOException {
        BufferedImage resizedImage = new BufferedImage(width, height, type);
        Graphics2D g = resizedImage.createGraphics();
        g.drawImage(originalImage, 0, 0, width, height, null);
        g.dispose();
        return resizedImage;
    }
    private class ClickAction extends AbstractAction {
        @Override
        public void actionPerformed(ActionEvent e) {
            checkButton(e);
            checkSolution();
        }
        private void checkButton(ActionEvent e) {
            int lidx = 0;            
            for (MyButton button : buttons) {
                if (button.isLastButton()) {
                    lidx = buttons.indexOf(button);
                }
            }
            JButton button = (JButton) e.getSource();
            int bidx = buttons.indexOf(button);

            if ((bidx - 1 == lidx) || (bidx + 1 == lidx)
                    || (bidx - 3 == lidx) || (bidx + 3 == lidx)) {
                Collections.swap(buttons, bidx, lidx);
                updateButtons();
            }
        }
        private void updateButtons() {
            panel.removeAll();
            for (JComponent btn : buttons) {
                panel.add(btn);
            }
            panel.validate();
        }
    }
    private void checkSolution() {
        List<Point> current = new ArrayList<>();
        for (JComponent btn : buttons) {
            current.add((Point) btn.getClientProperty("position"));
        }
        if (compareList(solution, current)) {
            JOptionPane.showMessageDialog(panel, "Finished",
                    "Congratulation", JOptionPane.INFORMATION_MESSAGE);
        }
    }
    public static boolean compareList(List ls1, List ls2) {
        
        return ls1.toString().contentEquals(ls2.toString());
    }
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                GamePuzzle puzzle = new GamePuzzle();
                puzzle.setVisible(true);
            }
        });
    }
}

langkah ketiga
Setelah anda copy kode diatas di main class, perhatikan kode ada error atau tidak, kalau ada error biasanya , error terjadi pada nama class nya, solusi nya adalah sesuaikan kode yang error dengan nama class pada project anda.

Setelah semua baik tidak ada error silahkan anda jalankan program dengan klik kanan pada file>run file atau dengan mengklik F6 kalau pada netbeans 8.2.
maka hasil dari program anda bisa lihat pada video  yang dibawah.

Deskripsi Coding

#1 Coding dibawah digunakan pada saat kita mengarahkan kursor mause/touchpad ke tombol dalam game puzzle, pembatas pada masing-masing frame berubah warna menjadi merah. 
addMouseListener(new MouseAdapter() {
            @Override
            public void mouseEntered(MouseEvent e) {
                setBorder(BorderFactory.createLineBorder(Color.red));
            }
            @Override
            public void mouseExited(MouseEvent e) {
              setBorder(BorderFactory.createLineBorder(Color.black));
            }
        });
#2 ini merupakan sebuah coding yang digunakan pada game adalah membuat ruang kosong pada game, yaitu ada 1 frame kosong dalam game puzzle ini dan digunakan untuk menukar posisi gambar.
public boolean isLastButton() { 
        return isLastButton;    
 } 
#3 coding dibawah  digunakan untuk mengatur skala gambar pada game.
private final int DESIRED_WIDTH = 600; 
#4 Coding dibawah digunakan untuk membuat daftar array yang menyimpan pecahan-pecahan gambar dalam array tersebut.
        solution.add(new Point(0, 0));
        solution.add(new Point(0, 1));
        solution.add(new Point(0, 2));
        solution.add(new Point(1, 0));
        solution.add(new Point(1, 1));
        solution.add(new Point(1, 2));
        solution.add(new Point(2, 0));
        solution.add(new Point(2, 1));
        solution.add(new Point(2, 2));
        solution.add(new Point(3, 0));
        solution.add(new Point(3, 1));
        solution.add(new Point(3, 2));
#5 untuk membuat tata letak/ table yaitu 4 baris dan 3 kolom pada frame game puzzle.
panel.setLayout(new GridLayout(4, 3, 0, 0));
#6 CropImageFilter digunakan untuk memotong bentuk persegi panjang dari sumber gambar yang sudah diubah ukurannya. Ini dimaksudkan untuk digunakan bersama dengan objek FilteredImageSource untuk menghasilkan versi terpotong dari gambar yang ada.
image = createImage(new FilteredImageSource(resized.getSource(),
        new CropImageFilter(j * width / 3, i * height / 4,
                               (width / 3), height / 4)));
#7 Tombol diidentifikasi oleh properti klien posisi mereka. Ini adalah titik yang berisi posisi baris dan kolom yang benar pada gambar. Properti ini digunakan untuk mencari tahu apakah kita memiliki urutan tombol yang benar di jendela.
button.putClientProperty("position", new Point(i, j));
#8  Tombol tanpa gambar disebut tombol terakhir; itu ditempatkan di ujung grid di sudut kanan bawah. Ini adalah tombol yang menukar posisinya dengan tombol yang berdekatan yang sedang diklik.
if (i == 3 && j == 2) {
      lastButton = new MyButton();
      lastButton.setBorderPainted(false);
      lastButton.setContentAreaFilled(false);
      lastButton.setLastButton();
      lastButton.putClientProperty("position", new Point(i, j));
      } else {
      buttons.add(button);
     }
#9 Coding dibawah digunakan untuk memecah gambar secara acara dan menaruh tombol kosong pada sudut terakhir.
Collections.shuffle(buttons);  
buttons.add(lastButton); 
#10 membuat komponen dari daftar tombol ditempatkan di panel dan membuat beberapa batas abu-abu di sekitar tombol serta menambahkan  tindakan ketika di klik.
for (int i = 0; i < NUMBER_OF_BUTTONS; i++) {

            MyButton btn = buttons.get(i);
            panel.add(btn);
            btn.setBorder(BorderFactory.createLineBorder(Color.gray));
            btn.addActionListener(new ClickAction());
        }
#11 Metode getNewHeight () menghitung ketinggian gambar berdasarkan lebar yang diinginkan. Rasio gambar disimpan.
private int getNewHeight(int w, int h) {

        double ratio = DESIRED_WIDTH / (double) w;
        int newHeight = (int) (h * ratio);
        return newHeight;
    }
#12  Gambar JPG diambil dari disk. Metode ImageIO read () mengembalikan BufferedImage, yang merupakan kelas penting Swing untuk memanipulasi gambar.
private BufferedImage loadImage() throws IOException {
   BufferedImage bimg = ImageIO.read(new File("src/gambar/emot.jpg"));
   return bimg;
}
#13 Gambar asli diubah ukurannya dengan membuat BufferedImage baru dengan dimensi baru.
 private BufferedImage resizeImage(BufferedImage originalImage,
  int width,int height, int type) throws IOException {
  BufferedImage resizedImage = new BufferedImage(width, height, type);
  Graphics2D g = resizedImage.createGraphics();
  g.drawImage(originalImage, 0, 0, width, height, null);
  g.dispose();
  return resizedImage;
 }
#14 Tombol disimpan dalam daftar array. Daftar ini kemudian dipetakan ke kisi-kisi panel. Kami mendapatkan indeks dari tombol terakhir dan tombol yang diklik. Mereka bertukar menggunakan Collections.swap () jika mereka berdekatan.
   private void checkButton(ActionEvent e) {
            int lidx = 0;            
            for (MyButton button : buttons) {
                if (button.isLastButton()) {
                    lidx = buttons.indexOf(button);
                }
            }
            JButton button = (JButton) e.getSource();
            int bidx = buttons.indexOf(button);
            if ((bidx - 1 == lidx) || (bidx + 1 == lidx)
                    || (bidx - 3 == lidx) || (bidx + 3 == lidx)) {
                Collections.swap(buttons, bidx, lidx);
                updateButtons();
            }
        }
#15 Metode updateButtons () memetakan daftar ke kisi panel. Pertama, semua komponen dihapus dengan metode removeAll (). A for loop digunakan untuk menelusuri daftar tombol untuk menambahkan tombol yang disusun ulang kembali ke manajer tata letak panel. Akhirnya, metode validate () mengimplementasikan tata letak baru.
private void updateButtons() {
            panel.removeAll();
            for (JComponent btn : buttons) {
                panel.add(btn);
            }
            panel.validate();
        }
    }
#16 Pengecekan solusi dilakukan dengan membandingkan daftar titik tombol yang dipesan dengan benar dengan daftar saat ini yang terdiri dari urutan tombol dari jendela. Dialog pesan ditampilkan jika solusi tercapai.
private void checkSolution() {
        List<Point> current = new ArrayList<>();
        for (JComponent btn : buttons) {
            current.add((Point) btn.getClientProperty("position"));
        }
        if (compareList(solution, current)) {
            JOptionPane.showMessageDialog(panel, "Finished",
                "Congratulation", JOptionPane.INFORMATION_MESSAGE);
        }
    }

Baca Juga : Membuat Game Snake Dengan Java NetBeans IDE 8.2


Demikian lah tutorial yang bisa saya bagi buat teman-teman semua, anda bisa kembangkan game puzzle menjadi games java terbaik dari hasil usaha anda menggunakan bahasa pemrograman java netbeans 8.2, semoga informasi membuat games java menggunakan netbeans 8.2 ini bermanfaat untuk anda yang belajar pemrograman, terlebih yang kuliah jurusan teknik informatika, semangat kawan. Buat teman-teman yang mau download atau mengembangkan project game puzzle ini bisa Lihat Disini

Baca juga

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel