Membuat Game Puzzle Dengan Java NetBeans IDE 8.2 - games java terbaik
Saturday, April 1, 2023
Edit
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.
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.
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 :
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.
#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.
#3 coding dibawah digunakan untuk mengatur skala gambar pada game.
#4 Coding dibawah digunakan untuk membuat daftar array yang menyimpan pecahan-pecahan gambar dalam array tersebut.
#5 untuk membuat tata letak/ table yaitu 4 baris dan 3 kolom pada frame game puzzle.
#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.
#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.
#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.
#9 Coding dibawah digunakan untuk memecah gambar secara acara dan menaruh tombol kosong pada sudut terakhir.
#10 membuat komponen dari daftar tombol ditempatkan di panel dan membuat beberapa batas abu-abu di sekitar tombol serta menambahkan tindakan ketika di klik.
#11 Metode getNewHeight () menghitung ketinggian gambar berdasarkan lebar yang diinginkan. Rasio gambar disimpan.
#12 Gambar JPG diambil dari disk. Metode ImageIO read () mengembalikan BufferedImage, yang merupakan kelas penting Swing untuk memanipulasi gambar.
#13 Gambar asli diubah ukurannya dengan membuat BufferedImage baru dengan dimensi baru.
#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.
#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.
#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.

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
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)); } });
public boolean isLastButton() { return isLastButton; }
private final int DESIRED_WIDTH = 600;
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));
panel.setLayout(new GridLayout(4, 3, 0, 0));
image = createImage(new FilteredImageSource(resized.getSource(), new CropImageFilter(j * width / 3, i * height / 4, (width / 3), height / 4)));
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()); }
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 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); } }
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
Baca juga