Rabu, 21 Desember 2011

Memahami Tentang EDGE DETECTION

KELOMPOK:
Kelas : 4IA11
Dina Amalia (50408283)
Risti Mustika Brilianti (50408732)


Tugas Pengolahan Citra kita membahas dan mencoba membuat EDGE DETECTION, pertama saya akan memperkenalkan EDGE DETECTION pendeteksian sisi itu apa? EDGE DETECTION adalah Sisi yang didefinisikan sebagai batas antara dua daerah yang memiliki perbedaan tingkat keabuan yang signifikan, sehingga dapat ditentukan berdasarkan nilai turunan pertama. Hal ini dilakukan dengan menghitung nilai gradien suatu piksel relatif terhadap piksel disekitarnya. Contoh:
aproksimasi turunan per-tama yang baik adalah operator Sobel dengan keuntungan efek smoothing.Karena dampak derivasi adalah meningkatkan noise, efek smoothing meru-pakan sautu fitur operator Sobel yang menguntungkan untuk mengurangi noise tersebut.

bentuk operasi sobel sebagai berikut:

horizontal:
sobel = {{-1,-2,-1},
{0 , 0, 0},
{1 , 2, 1}};

vertikal:
sobel = {{-1,0,1},
{-2,0,2},
{-1,0,1}};

Contoh EDGE DETECTION dengan menggunakan aplikasi program JAVA dan sudah berbasis GUI dalam pembahasan presentasi klompok saya seperti dibawah ini:

  • menggunakan bentuk sobel horizontal:

kurang jelas? coba saya lampirkan source code dari sobel yang digunakan:
int c = 1;
double Gx=0, Gy=0, G;
boolean[][] b = new boolean[width][height];
int[][] array = new int[3][3];
int[][] sobel = {{-1,-2,-1},{0,0,0},{1,2,1}};

keseluruhan dari source code program ini :


/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

/*
* EdgeDetections.java
*
* Created on Nov 22, 2011, 5:02:27 AM
*/
//membuat folder edgedection//
package edgedetection;

import java.awt.Image;
import java.io.File;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.Timer;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
/**
*
*
*
*
* @author mondemonci
*/
public class EdgeDetections extends javax.swing.JFrame {
JFileChooser fc;
File file;
/** Creates new form EdgeDetections */
public EdgeDetections() {
initComponents();
fc = new JFileChooser();
fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
DateFormat wk = new SimpleDateFormat("E, dd MMM yyyy");
DateFormat wk2 = new SimpleDateFormat("HH:mm:ss");
String si = wk.format(Calendar.getInstance().getTime());
jLabel5.setText(si);
Timer time = new Timer(1000, new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{

String jam, menit, detik;
Calendar now = Calendar.getInstance();
int h = now.get(Calendar.HOUR_OF_DAY);
int m = now.get(Calendar.MINUTE);
int s = now.get(Calendar.SECOND); if(h<10) jam = "0"+h;
else jam = String.valueOf(h);
if(m<10) menit = "0"+m;
else menit = String.valueOf(m);
if(s<10) detik = "0"+s;
else detik = String.valueOf(s);
jLabel6.setText(jam + ":" + menit + ":" + detik);

}
});
time.start();
}

/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
//

private void initComponents() {

jPanel1 = new javax.swing.JPanel();
jLayeredPane1 = new javax.swing.JLayeredPane();
jLayeredPane2 = new javax.swing.JLayeredPane();
jLabel2 = new javax.swing.JLabel();
jLayeredPane3 = new javax.swing.JLayeredPane();
jLabel3 = new javax.swing.JLabel();
jLabel1 = new javax.swing.JLabel();
jTextField1 = new javax.swing.JTextField();
jButton1 = new javax.swing.JButton();
jButton3 = new javax.swing.JButton();
jLabel5 = new javax.swing.JLabel();
jLabel6 = new javax.swing.JLabel();
jButton2 = new javax.swing.JButton();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("Edge Detection - Sobel");

jLayeredPane1.setBorder(javax.swing.BorderFactory.createEtchedBorder());

jLayeredPane2.setBorder(javax.swing.BorderFactory.createEtchedBorder());

jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel2.setText("No Picture Selected");
jLabel2.setBounds(10, 10, 320, 380);
jLayeredPane2.add(jLabel2, javax.swing.JLayeredPane.DEFAULT_LAYER);

jLayeredPane2.setBounds(20, 50, 340, 400);
jLayeredPane1.add(jLayeredPane2, javax.swing.JLayeredPane.DEFAULT_LAYER);

jLayeredPane3.setBorder(javax.swing.BorderFactory.createEtchedBorder());

jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel3.setText("No Picture Selected");
jLabel3.setBounds(10, 10, 330, 380);
jLayeredPane3.add(jLabel3, javax.swing.JLayeredPane.DEFAULT_LAYER);

jLayeredPane3.setBounds(370, 50, 350, 400);
jLayeredPane1.add(jLayeredPane3, javax.swing.JLayeredPane.DEFAULT_LAYER);

jLabel1.setText("Select a picture");
jLabel1.setBounds(10, 14, 120, 20);
jLayeredPane1.add(jLabel1, javax.swing.JLayeredPane.DEFAULT_LAYER);
jTextField1.setBounds(100, 10, 230, 30);
jLayeredPane1.add(jTextField1, javax.swing.JLayeredPane.DEFAULT_LAYER);

jButton1.setText("Browse");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jButton1.setBounds(340, 10, 90, 30);
jLayeredPane1.add(jButton1, javax.swing.JLayeredPane.DEFAULT_LAYER);

jButton3.setText("Clear");
jButton3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton3ActionPerformed(evt);
}
});
jButton3.setBounds(440, 10, 80, 30);
jLayeredPane1.add(jButton3, javax.swing.JLayeredPane.DEFAULT_LAYER);

jLabel5.setText("Load..");
jLabel5.setBounds(10, 480, 120, 14);
jLayeredPane1.add(jLabel5, javax.swing.JLayeredPane.DEFAULT_LAYER);

jLabel6.setText("Wait..");
jLabel6.setBounds(120, 480, 110, 14);
jLayeredPane1.add(jLabel6, javax.swing.JLayeredPane.DEFAULT_LAYER);

jButton2.setText("Edge Detection");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
jButton2.setBounds(550, 460, 170, 23);
jLayeredPane1.add(jButton2, javax.swing.JLayeredPane.DEFAULT_LAYER);

javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLayeredPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 756, Short.MAX_VALUE)
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLayeredPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 511, Short.MAX_VALUE)
);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);

pack();
}//


private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:

int nilai = fc.showOpenDialog(this);
if(nilai==JFileChooser.APPROVE_OPTION){
file = fc.getSelectedFile();
jTextField1.setText(file.getName().toUpperCase());
if (jTextField1.getText().endsWith(".JPG")||jTextField1.getText().endsWith(".JPEG") || jTextField1.getText().endsWith(".PNG") || jTextField1.getText().endsWith(".GIF") || jTextField1.getText().endsWith(".BMP")) {

jTextField1.setText(file.getName());
ImageIcon icon = new ImageIcon(file.getPath());
Image img = icon.getImage();
Image newImg = img.getScaledInstance(300, 300, java.awt.Image.SCALE_SMOOTH);
ImageIcon icon2 = new ImageIcon(newImg);


jLabel2.setText("");
jLabel2.setIcon(icon2);

}
else{
jTextField1.setText("anda tidak memilih file Image");
}
}else{
jTextField1.setText("anda tidak memilih file");
}
jButton1.setEnabled(false);
}


private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
jTextField1.setText("");
jLabel2.setIcon(null);
jLabel2.setText("No Picture Selected");
jLabel3.setIcon(null);
jLabel3.setText("No Picture Selected");
jButton1.setEnabled(true);
}


private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
try {
// TODO add your handling code here:
String nama = file.getName();
int threshold = 70;
String path = file.getPath();
BufferedImage bi = ImageIO.read(new File(path));

int width = bi.getWidth();
int height = bi.getHeight();

BufferedImage finalThresholdImage = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB) ;

int red = 0;
int green = 0;
int blue = 0;

int c = 1;
double Gx=0, Gy=0, G;
boolean[][] b = new boolean[width][height];
int[][] array = new int[3][3];
int[][] sobel = {{-1,-2,-1},{0,0,0},{1,2,1}};

for (int x = 0; x < width; x++) {
try {

for (int y = 0; y < height; y++) {
int color = bi.getRGB(x, y);

red = EdgeDetections.getRed(color);
green = EdgeDetections.getGreen(color);
blue = EdgeDetections.getBlue(color);

if((red+green+green)/3 < threshold) {
finalThresholdImage.setRGB(x,y,EdgeDetections.mixColor(0, 0,0));
}
else {
finalThresholdImage.setRGB(x,y,EdgeDetections.mixColor(255, 255,255));
}

}
} catch (Exception e) {
e.getMessage();
}
}
ImageIcon icon = new ImageIcon(finalThresholdImage);
Image newImg = icon.getImage().getScaledInstance(300, 300, java.awt.Image.SCALE_SMOOTH);
ImageIcon icon2 = new ImageIcon(newImg);
jLabel3.setText("");
jLabel3.setIcon(icon2);

} catch (IOException ex) {
Logger.getLogger(EdgeDetections.class.getName()).log(Level.SEVERE, null, ex);
}
}


private static int mixColor(int red, int green, int blue) {
return red<<16|green<<8|blue;
}
public static int getRed(int color) {
return (color & 0x00ff0000) >> 16;
}

public static int getGreen(int color) {
return (color & 0x0000ff00) >> 8;
}

public static int getBlue(int color) {
return (color & 0x000000ff) >> 0;

}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(EdgeDetections.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(EdgeDetections.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(EdgeDetections.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(EdgeDetections.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//


/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {
new EdgeDetections().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLayeredPane jLayeredPane1;
private javax.swing.JLayeredPane jLayeredPane2;
private javax.swing.JLayeredPane jLayeredPane3;
private javax.swing.JPanel jPanel1;
private javax.swing.JTextField jTextField1;
// End of variables declaration
}

  • tampilan EDGE DETECTION pada saat tampilan picture belum dimasukkan layar 1 digunakan untuk pengambilan picture asli dan layar 2 digunakan untuk setelah perubahan menjadi EDGE DETECTION.

· pada saat browse picture, kemudian pilih open


  • setelah dibrowse maka akan tampil seperti contoh picture dibawah ini pada layar 1.

  • kemudian pada tahap ini, dilakukan proses perubahan dari picture asli ke dalam EDGE DETECTION-nya.


catatan:

-kelemahan dari sobel itu sendiri adalah tidak bisa terlalu detail/rumit dalam suatu picture.

-kelebihannya dari sobel itu sendiri adalah sangat praktis dan mudah digunakan.

Senin, 10 Oktober 2011

TANGGUNG JAWAB SOSIAL PT. FRISIAN FLAG

Setelah menjelaskan profil dan SDM PT. Frisian Flag, maka kita lanjukan pada Tanggung Jawab Sosial dari PT. Frisian Flag sebagai berikut:

· Meningkatkan Pendidikan Melaluli Berbagi untuk Maju, menggalang dana untuk membiayai lebih dari 12 ribu murid sekolah dasar (SD) dan sekolah menengah pertama (SMP), yang tersebar di 17 kota besar, di 16 provinsi di Indonesia.

· Program Pengembangan Masyarakat Mandiri Kelurahan Gedong, dengan mengadakan pengobatan geratis posyandu lansia

· Untuk merayakan upaya mereka dalam menciptakan hari esok yang lebih bersih dan hijau melalui Gerakan Aksi Peduli Energo Kids, hari ini 1,000 siswa dari 40 sekolah dasar di Jakarta menanam 1.000 pohon di Bumi Perkemahan Cibubur, Jakarta.dengan menanam 1000 pohon.

· Meningkatkan Kesejahteraan Peternak Sapi

http://www.frisianflag.com/id/ruang-media/foto-berita/5331-aksi-peduli-hijau-energo

http://www.frisianflag.com/id/ruang-media/foto-berita

SUMBER DAYA MANUSIA PT. FRISIAN FLAG

Tahukah Anda... Bahwa susu adalah sumber nutrisi alami yang paling kaya, lengkap dengan beragam jenis gizi yang membantu pertumbuhan, perkembangan, pemeliharaan, dan perlindingan tubuh kita? Bahwa susu mengandung nutrisi dalam jumlah besar.

Sejarah PT. Frisian Flag

Dikenal dengan nama Susu Bendera oleh masyarakat Indonesia, Frisian Flag telah memimpin industri susu nasional selama lebih dari 88 tahun. Tak heran jika Frisian Flag kini identik dengan susu dan pertumbuhan dari generasi ke generasi.

Semua berawal di tahun 1922 ketika susu dengan merek Friesche Vlag mulai diimpor dari Cooperatve Condensfabriek Friesland yang kini telah menjadi Royal FrieslandCampina. Koperasi ini adalah koperasi terbesar di dunia yang berpusat di Belanda dan beranggotakan 16 ribu peternak yang tersebar di tiga negara, serta memiliki karyawan tak kurang dari 22 ribu orang yang bekerja di 100 perusahaan di seluruh dunia.

Sebagai bagian dari keluarga multinasional ini, PT Frisian Flag Indonesia mengedepankan pengalaman global dan kerja sama jangka panjang dengan para peternak Indonesia untuk tetap menjadi leader dalam menghasilkan produk-produk bergizi berbasis susu. Hal ini dilakukan dengan memproduksi dan memasarkan aneka produk termasuk susu bubuk, susu cair siap minum, dan susu kental manis dengan merek-merek Frisian Flag, Yes!, dan Omela. Perusahaan ini memiliki dua buah pabrik berteknologi canggih yaitu di Pasar Rebo dan Ciracas, Jakarta. PT Frisian Flag Indonesia juga menaungi 1700 karyawan yang bekerja di seluruh penjuru Indonesia.

PT Frisian Flag Indonesia berkomitmen untuk senantiasa menghasilkan produk-produk susu bergizi yang dapat terjangkau oleh semua kalangan masyarakat. Selain itu, PT Frisian Flag Indonesia juga terus berupaya untuk meningkatkan kesadaran gizi masyarakat melalui beragam program. Semua ini dilakukan sebagai wujud visi perusahaan untuk turut berkontribusi terhadap perkembangan bangsa.

Dalam memproduksi dan mendistribusikan produk-produk berbasis susu, PT Frisian Flag Indonesia tidak hanya mengikuti standar nasional dan internasional, namun juga mengadvokasi kepada para pemangku kepentingannya untuk senantiasa mendukung perkembangan holistik anak dan mempromosikan ASI eksklusif sesuai dengan petunjuk WHO.

Dalam merekrut pegawai PT. Frisian Flag menggunakan cara Online dengan memberi tahukan syarat-syarat yang harus dipenuhi oleh calon pegawai setelah itu deseleksi secara ketat dengan melalui test pisikotes, interview dan setelah di terima calon pegawai diberi waktu seminggu untuk masa percobaan.

Pada bidang SDM PT. Frisian Flag wujud komitmen dalam pembangunan kualitas sumber daya manusia melalui pemerataan kesempatan memperoleh pendidikan, PT Frisian Flag Indonesia dan Matahari Food Business (Hypermart & Foodmart) mengajak masyarakat membantu mencerdaskan bangsa dengan membantu anak Indonesia untuk tetap bersekolah melalui program Berbagi Untuk Maju.

Sebelumnya menyalurkan bantuan tahap pertama Rp 501.253.965 untuk 2.531 siswa SD yang terancam putus sekolah di Sumut, 30 Agustus lalu. Frisian Flag Indonesia dan Matahari Food Business (Hypermart & Foodmart) menyalurkan dana bantuan program Berbagi Untuk Maju tahap kedua Rp 435.196.956 6 Oktober 2010, dialokasikan kepada 1.917 anak-anak SD dan SMP yang terancam putus sekolah di Jawa Tengah.

Penyerahan bantuan tahap kedua secara simbolik kepada siswa SDN Mangunharjo, Kota Semarang. Hadir dalam acara ini President Director Frisian Flag Indonesia Cees Rugrok, Director Marchendising & Marketing Matahari Food Business PT Matahari Putra Prima, Tbk, Mashvara Kanjaya dan Ketua Yayasan Lembaga GNOTA Jeansetie Sudjusadi, disaksikan perwakilan Dinas Pendidikan Kota Semarang


Link: http://www.frisianflag.com/id/beranda/inilah-kami

Kamis, 19 Mei 2011

MANUAL BOOK GAME LABIRIN BERBASIS JAVA NETBEANS 6.8

3IA11
DINA AMALIA (50408283)
NUR HANDAYANI (50408625)
RISTI MUSTIKA BRILIANTI (50408732)




Membuat Kode Program
Midlet
Labirin:
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class labirin extends MIDlet implements CommandListener {
private canvas_labirin layar_kanvas;
private pilih layar_pilih;
private Command comm_keluar = new Command("Keluar", Command.EXIT, 99);
private Command comm_new = new Command("Level baru", Command.SCREEN, 1);
private Command comm_alert = new Command("Selesai", Command.EXIT, 1);
private Command comm_opsi = new Command("Pengaturan ukuran", Command.SCREEN, 1);
public labirin() {
try {
layar_kanvas = new canvas_labirin(Display.getDisplay(this));
layar_kanvas.addCommand(comm_keluar);
layar_kanvas.addCommand(comm_new);
layar_kanvas.addCommand(comm_opsi);
layar_kanvas.setCommandListener(this);
} catch(Exception e) {
Alert errorAlert = new Alert("error",
e.getMessage(), null, AlertType.ERROR);
errorAlert.setCommandListener(this);
errorAlert.setTimeout(Alert.FOREVER);
errorAlert.addCommand(comm_alert);
Display.getDisplay(this).setCurrent(errorAlert);
}
}
public void startApp() throws MIDletStateChangeException {
if(layar_kanvas != null) {
layar_kanvas.start();
}
}
public void destroyApp(boolean unconditional)
throws MIDletStateChangeException {
layar_kanvas = null;
System.gc();
}
public void pauseApp() {
}
public void commandAction(Command c, Displayable s) {
if(c == comm_new) {
layar_kanvas.newMaze();
} else if(c == comm_alert) {
try {
destroyApp(false);
notifyDestroyed();
} catch (MIDletStateChangeException ex) {
}
} else if(c == comm_opsi) {
if(layar_pilih == null) {
layar_pilih = new pilih(layar_kanvas);
}
Display.getDisplay(this).setCurrent(layar_pilih);
} else if(c == comm_keluar) {
try {
destroyApp(false);
notifyDestroyed();
} catch (MIDletStateChangeException ex) {
}
}
}

}

Java class:
Canvas_labirin:
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class canvas_labirin extends javax.microedition.lcdui.Canvas {
private Display layar;
private pola_gambar garis;
private boolean gameover = false;
private int area;
private int x1;
private int x2;
private int x = 0;
private int y = 0;
private int yy;
private int xx;
private int yyh;
private int xxw;
private int Ox = 1;
private int Oy = 1;
private int Px = 1;
private int Py = 1;
int setColWidth(int colWidth) {
if(colWidth < 2) {
area = 2;
} else {
area = colWidth;
}
xx = getWidth() / area;
if(xx % 2 == 0) {
xx -= 1;
}
yy = getHeight() / area;
if(yy % 2 == 0) {
yy -= 1;
}
garis = null;
return(xx);
}
int getMinColWidth() {
return(x2);
}
int getMaxColWidth() {
return(x1);
}
int getMaxNumCols() {
return(yyh);
}
int getColWidth() {
return(area);
}
int getNumCols() {
return(xx);
}
public canvas_labirin(Display d) throws Exception {
layar = d;
int width = getWidth();
int height = getHeight();
area = 5;
x2 = 3;
yyh = width / x2;
if(yyh % 2 == 0) {
yyh -= 1;
}
xx = width / area;
if(xx % 2 == 0) {
xx -= 1;
}
yy = height / area;
if(yy % 2 == 0) {
yy -= 1;
}
xxw = 15;
x1 = width / xxw;
if(x1 > height / xxw) {
x1 = height / xxw;
}
if(x1 < area) {
throw(new Exception("error"));
}
}
void start() {
layar.setCurrent(this);
repaint();
}
void newMaze() {
gameover = false;
garis = null;
Px = 1;
Py = 1;
Ox = 1;
Oy = 1;
layar.setCurrent(this);
repaint();
}
protected void paint(Graphics g) {
if(garis == null) {
int width = getWidth();
int height = getHeight();
garis = new pola_gambar(xx, yy);
for(int i = 0; i < xx; i++) {
for(int j = 0; j < yy; j++) {
if(garis.area_xy[i][j] == 0) {
g.setColor(0,100,10);
} else {
g.setColor(255,255,200);
}
g.fillRect(x + (i*area),
y + (j*area),
area, area);
}
}
g.setColor(0,100,10);
g.fillRect(x + ((xx-1) * area),
y, width, height);
g.setColor(255,255,200);
g.fillRect(x + ((xx-1) * area),
y + ((yy-2) * area), width, height);
g.setColor(0,100,10);
g.fillRect(x,
y + ((yy-1) * area), width, height);
}
g.setColor(255, 100, 150);
g.fillRoundRect(x + (area)*Px,
y + (area)*Py,
area, area,
area, area);
if((Ox != Px) || (Oy != Py)) {
g.setColor(255,255,200);
g.fillRect(x + (area)*Ox,
y + (area)*Oy,
area, area);
}
if(gameover) {
int width = getWidth();
int height = getHeight();
Font font = g.getFont();
int fontHeight = font.getHeight();
int fontWidth = font.stringWidth("Berhasil");
g.setColor(255,255,200);
g.fillRect((width - fontWidth)/2, (height - fontHeight)/2,
fontWidth + 2, fontHeight);
g.setColor(255, 0, 0);
g.setFont(font);
g.drawString("Berhasil", (width - fontWidth)/2,
(height - fontHeight)/2,
g.TOP|g.LEFT);
}
}
public void keyPressed(int keyCode) {
if(! gameover) {
int action = getGameAction(keyCode);
switch (action) {
case LEFT:
if((garis.area_xy[Px-1][Py] == 1) &&
(Px != 1)) {
Ox = Px;
Oy = Py;
Px -= 2;
repaint();
}
break;
case RIGHT:
if(garis.area_xy[Px+1][Py] == 1) {
Ox = Px;
Oy = Py;
Px += 2;
repaint();
} else if((Px == garis.area_xy.length - 2) &&
(Py == garis.area_xy[0].length - 2)) {
Ox = Px;
Oy = Py;
Px += 2;
gameover = true;
repaint();
}
break;
case UP:
if(garis.area_xy[Px][Py-1] == 1) {
Ox = Px;
Oy = Py;
Py -= 2;
repaint();
}
break;
case DOWN:
if(garis.area_xy[Px][Py+1] == 1) {
Ox = Px;
Oy = Py;
Py += 2;
repaint();
}
break;
}
}
}
}

Pilih:
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class pilih extends Form
implements ItemStateListener, CommandListener {
private Command kelaur = new Command("Selesai", Command.EXIT, 1);
private Gauge indikator;
private Gauge klomindikator;
private canvas_labirin xycanvas;
public pilih(canvas_labirin canvas) {
super("Pengaturan ukuran");
addCommand(kelaur);
setCommandListener(this);
xycanvas = canvas;
setItemStateListener(this);
indikator = new Gauge("Lebar", true,
xycanvas.getMaxColWidth(),
xycanvas.getColWidth());
klomindikator = new Gauge("Jumlah kolom", false,
xycanvas.getMaxNumCols(),
xycanvas.getNumCols());
append(indikator);
append(klomindikator);
}
public void itemStateChanged(Item item) {
if(item == indikator) {
int val = indikator.getValue();
if(val < xycanvas.getMinColWidth()) {
indikator.setValue(xycanvas.getMinColWidth());
} else {
int numCols = xycanvas.setColWidth(val);
klomindikator.setValue(numCols);
}
}
}
public void commandAction(Command c, Displayable s) {
if(c == kelaur) {
xycanvas.newMaze();
}
}
}

Pola_gambar:
import java.util.Random;
import java.util.Vector;
public class pola_gambar {
private Random acak_acak = new Random();
int[][] area_xy;
public pola_gambar(int width, int height) {
area_xy = new int[width][height];
for(int i = 1; i < width - 1; i++) {
for(int j = 1; j < height - 1; j++) {
if((i % 2 == 1) || (j % 2 == 1)) {
area_xy[i][j] = 1;
}
}
}
area_xy[0][1] = 1;
createMaze();
}
private void createMaze() {
for(int i = 1; i < area_xy.length - 1; i++) {
for(int j = 1; j < area_xy[i].length - 1; j++) {
if((i + j) % 2 == 1) {
area_xy[i][j] = 0;
}
}
}
for(int i = 1; i < area_xy.length - 1; i+=2) {
for(int j = 1; j < area_xy[i].length - 1; j+=2) {
area_xy[i][j] = 3;
}
}
Vector possibleSquares = new Vector(area_xy.length
* area_xy[0].length);
int[] startSquare = new int[2];
startSquare[0] = getRandomInt(area_xy.length / 2)*2 + 1;
startSquare[1] = getRandomInt(area_xy[0].length / 2)*2 + 1;
area_xy[startSquare[0]][startSquare[1]] = 2;
possibleSquares.addElement(startSquare);
while(possibleSquares.size() > 0) {
int chosenIndex = getRandomInt(possibleSquares.size());
int[] chosenSquare = (int[])possibleSquares.elementAt(chosenIndex);
area_xy[chosenSquare[0]][chosenSquare[1]] = 1;
possibleSquares.removeElementAt(chosenIndex);
link(chosenSquare, possibleSquares);
}
possibleSquares = null;
System.gc();
}
private void link(int[] chosenSquare, Vector possibleSquares) {
int linkCount = 0;
int i = chosenSquare[0];
int j = chosenSquare[1];
int[] links = new int[8];
if(i >= 3) {
if(area_xy[i - 2][j] == 1) {
links[2*linkCount] = i - 1;
links[2*linkCount + 1] = j;
linkCount++;
} else if(area_xy[i - 2][j] == 3) {
area_xy[i - 2][j] = 2;
int[] newSquare = new int[2];
newSquare[0] = i - 2;
newSquare[1] = j;
possibleSquares.addElement(newSquare);
}
}
if(j + 3 <= area_xy[i].length) {
if(area_xy[i][j + 2] == 3) {
area_xy[i][j + 2] = 2;
int[] newSquare = new int[2];
newSquare[0] = i;
newSquare[1] = j + 2;
possibleSquares.addElement(newSquare);
} else if(area_xy[i][j + 2] == 1) {
links[2*linkCount] = i;
links[2*linkCount + 1] = j + 1;
linkCount++;
}
}
if(j >= 3) {
if(area_xy[i][j - 2] == 3) {
area_xy[i][j - 2] = 2;
int[] newSquare = new int[2];
newSquare[0] = i;
newSquare[1] = j - 2;
possibleSquares.addElement(newSquare);
} else if(area_xy[i][j - 2] == 1) {
links[2*linkCount] = i;
links[2*linkCount + 1] = j - 1;
linkCount++;
}
}
if(i + 3 <= area_xy.length) {
if(area_xy[i + 2][j] == 3) {
area_xy[i + 2][j] = 2;
int[] newSquare = new int[2];
newSquare[0] = i + 2;
newSquare[1] = j;
possibleSquares.addElement(newSquare);
} else if(area_xy[i + 2][j] == 1) {
links[2*linkCount] = i + 1;
links[2*linkCount + 1] = j;
linkCount++;
}
}
if(linkCount > 0) {
int linkChoice = getRandomInt(linkCount);
int linkX = links[2*linkChoice];
int linkY = links[2*linkChoice + 1];
area_xy[linkX][linkY] = 1;
int[] removeSquare = new int[2];
removeSquare[0] = linkX;
removeSquare[1] = linkY;
possibleSquares.removeElement(removeSquare);
}
}
public int getRandomInt(int upper) {
int retVal = acak_acak.nextInt() % upper;
if(retVal < 0) {
retVal += upper;
}
return(retVal);
}
}



sumber: 12 aplikasi java mobile (maxicom)