Membuat Game Puzzle dengan Java

Membuat Game Puzzle dengan Java

Puzzle

Kita punya sebuah gambar image perempuan. Gambar tersebut kita potong menjadi 12 buah. Goal-nya adalah membentuk gambar itu kembali.

Puzzle

Puzzle.java

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;

public class Puzzle extends JFrame implements ActionListener {

private JPanel centerPanel;

private JButton button;

private JLabel label;

private Image source;

private Image image;

int[][] pos;

int width, height;

public Puzzle() {

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("icesid.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(325, 275);

setTitle("Puzzle");

setResizable(false);

setLocationRelativeTo(null);

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

setVisible(true);

}

public static void main(String[] args) {

new Puzzle();

}

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();

}

}

}

Goal (tujuan) dari game sederhana nan mungi ini adalah membentuk atau menyusun kembali gambar tersebut menjadi seperti aslinya lagi. Kita pindahkan atau geser tombol-tombol dengan cara mengklik pada gambar-gambar tersebut. Hanya tombol  yang berdekatan atau berbatasan dengan label saja yang dapat digeser.

pos = new int[][] {

{0, 1, 2},

{3, 4, 5},

{6, 7, 8},

{9, 10, 11}

};

Ini adalah posisi – posisi dari bagian-bagian gambar tersebut.

ImageIcon sid = new ImageIcon(Puzzle.class.getResource(“icesid.jpg”));

source = sid.getImage();

Kita menggunakan class ImageIcon untuk me-load gambar.

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));

}

}

}

Code tersebut menciptakan 11 tombol dan 1 label. Kita crop gamabarnya menjadi beberapa bagian dan tempatkan pada tombol-tombol tersebut.

int labelX = label.getX();

int labelY = label.getY();

int buttonX = button.getX();

int buttonY = button.getY();

Kita dapatkan koordinat x, y dari tombol yang kita klik dan sebuah label kosong. Koordinat x, y sangatlah penting dalam sebuah logic program.

int buttonPosX = buttonX / size.width;

int buttonPosY = buttonY / size.height;

int buttonIndex = pos[buttonPosY][buttonPosX];

Di sini kita telah dapatkan index dari tombol-tombol yang terbentuk dalam array 2 dimensi dari posisi tombol-tombol tersebut.


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

int labelIndex = buttonIndex + 3;

centerPanel.remove(buttonIndex);

centerPanel.add(label, buttonIndex);

centerPanel.add(button,labelIndex);

centerPanel.validate();

}

Pada kasus ini, kita cek apakah kita mengklik pada tombol,  yang tepat di atas label kosong tersebut. Jika emang telah berada di atas label tersebut, maka akan diambil koordinat x. Jika button tersebut tepat berada di atas label, amaka persamaan (equation) (labelY – buttonY) == size.height  berstatus true.

Avilla

Avilla 3

SID Puzzle
Gambar : Puzzle
Download Source code
Ini adalah game Puzzle.

Semoga bermanfaat.

Sampai bertemu lagi di artikel yang lain.

Wassalam …..

Iklan

2 thoughts on “Membuat Game Puzzle dengan Java

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s