a b c d e f g h Gambar 1. Konfigurasi akhir.

dokumen-dokumen yang mirip
Francisco Silvano

Pemrograman dengan Java

MODUL PRAKTIKUM PEMROGRAMAN BERORIENTASI OBJEK

Modul Praktikum 8 Pemograman Berorientasi Objek

Pemrograman Berorientasi Obyek Lanjut (IT251) Ramos Somya, S.Kom., M.Cs.

Pengenalan JavaScript

BONUS. Dasar Java Mobile. Mengenal Java Mobile Mengenal MIDlet Mobile Grafis Mobile Animasi Latihan Soal

Fajar Yusran Zebua DASAR ANIMASI

MENGENAL JAVA APPLET. Wiranti Sri Utami. Abstrak. Pendahuluan.

Triswansyah Yuliano

Grafis & Applet. Viska Mutiawani, M.Sc

LAPORAN RESMI. PRAKTIKUM TEKNOLOGI WEB Pengenalan JavaScript

Mengatur Rata Kanan, Rata Tengah Pada jtable NetBeans

Sofiyan Arif Kurniawan

Pada module ini, Anda akan mempelajari tentang membuat applet menggunakan AWT.

GUI & Event Handling. Viska Mutiawani, M.Sc. 1 Viska Mutiawani - Informatika FMIPA Unsyiah

LAPORAN RESMI PRAKTIKUM II WEB DESAIN PENGENALAN JAVASCRIPT

PENGENALAN BAHASA PEMROGRAMAN JAVA

GUI & Event Handling. Viska Mutiawani, M.Sc

Krisna D. Octovhiana. 1.1 Apa itu Operator?

Bab 1. HTML (Hypertext Markup Language) A. World Wide Web

HTML (HyperText Markup Language)

Program Java Sesi 1. Arief Susanto

DAFTAR ISI. DAFTAR ISI... i. Membuat Formulir Data Mahasiswa dengan Tabs Stop Contoh Hasil Langkah Kerja... 3

AWT (ABSTRACT WINDOWS TOOLKITS)

A. TUJUAN PEMBELAJARAN

BAHASA PEMROGRAMAN JAVA PUTU INDAH CIPTAYANI JURUSAN SISTEM INFORMASI STMIK AMIKOM YOGYAKARTA

PEMAHAMAN DASAR DASAR JAVA

Krisna D. Octovhiana. 1.1 Mengenal Struktur Kontrol.

Gambar 1. Deklarasi Interface MouseListener

Muhidin

Badiyanto, S.Kom., M.Kom. PBO java

KASUS INHERITANCE. (Window, Multithreading dan Applet)

Sofiyan Arif Kurniawan

Yonatan Prasdikatama

Modul Praktikum Bahasa Pemrograman 1

GUI Event Handling. 5. Mendiskusikan keuntungan-keuntungan dari menggunakan inner dan anonymous class

Krisna D. Octovhiana. 1.1 Mengenal Data dan Variabel.

PEMOGRAMAN APLIKASI BERGERAK (Java ME) Company LOGO

FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA LAB SHEET PEMROGRAMAN JAVA 2

BAHASA PEMROGRAMAN JAVA

10.1 Menggunakan FTP

Pemrograman. Pertemuan-3 Fery Updi,M.Kom

Applet (1) Oleh: Kholid Fathoni

Aplikasi CRUD Sederhana Dengan PHP dan MySql

E-trik Ajax. Database MySQL. Dedi Alnas

JavaApplet. Sumber : Buku Dasar Pemrograman Java TM 2 karangan Abdul Kadir & Dasar-dasar Pemrograman Java di

PAKET (PACKAGE) 20 Januari 2012

STMIK AMIKOM YOGYAKARTA YOGYAKARTA 2008 WIDHIARTA, S. KOM

Ginanjar Utama Workbench Tempat Bekerja

Standar action cara penulisannya mirip dengan aturan penulisan pada XML. Sintak dari Standard Action ini adalah :

PERTEMUAN 2 ARRAY, PERCABANGAN, DAN PERULANGAN

Pemrograman Web WEEK 03 HTML LANJUT

Modul Pelatihan : Pembuatan Game Animasi Menggunakan Greenfoot

Pengenalan Java. Widio Riyanto, S. Kom/ JavaApplet 1

Nilai Properti Constrains pada TextField

DateField adalah objek yang dapat digunakan untuk menampilkan atau mengedit objek yang bertipe Date.

BAB I PERKENALAN HTML

Menginstal Web Server Apache, PHP, dan MySQL

Sekarang, kita akan mencoba untuk menganalisa program Java pertama : public class Hello {

Memasukkan file Flash Ke Delphi 7

Krisna D. Octovhiana. 1.1 Apa itu Array?

Happy Chandraleka

Moh Sulhan Apa itu Hosting? Lisensi Dokumen:

MODUL PRAKTIKUM STRUKTUR DATA DAN ALGORITMA LINKED LIST (BAGIAN 1)

Modul Praktikum 3 Pemograman Berorientasi Objek

GUI (Grapichal User Interface)

Bab 8. Dasar-Dasar OOP

Program Enkripsi & Dekripsi sederhana menggunakan Visual Basic 6.0

Pengolahan Image dengan GIMP

Formulir. Menyisipkan / membuat formulir, lakukan salah satu cara berikut : Insert Forms Insert Bar, pilih kategori Forms

Membuat SlideShow Gambar

3 Cara Belajar HTML, PHP dan MySQL. Nama Penulis Lisensi Dokumen:

Modul 9: antarmuka grafis (GUI) dalam window

Integrasi Animasi Dengan Java

PERTEMUAN 2 PEMOGRAMAN BERORIENTASI OBJEK L/O/G/O

Tutorial Compiler Bahasa-C Dengan Anjuta IDE

Pengenalan Script. Definisi HTML

TUGAS III PEMROGRAMAN BERBASIS WEB ARTIKEL JAVASCRIPT

Score: Persentage: % ~ u ~ Generated by Foxit PDF Creator Foxit Software For evaluation only.

BAB IV IMPLEMENTASI DAN PENGUJIAN

BAB I PENDAHULUAN. Listing 1.1 menunjukkan program GUI Java sederhana menggunakan AWT. import java.awt.*; import java.awt.event.*;

Ghandie Kurnia Widi Lisensi Dokumen: Copyright IlmuKomputer.

Komunikasi Multimedia

BAB I PERKENALAN HTML

Tipe data primitif adalah tipe data dasar yang dikenali oleh Java dan bukan merupakan class. Tipe data primitif ini dapat dikenali dengan ciri

Pemrograman Basis Data Berbasis Web

Koneksi Java GUI-Database

IF PEMROGRAMAN LANJUT TUGAS 1. Oleh : Andri Heryandi, M.T.

Pembuatan Website Sederhana Menggunakan HTML (Hyper Text Markup Language)

A. Tujuan B. Dasar Teori 1. Pemrosesan Form 2. Konsep Penggunaan Tag <form> pada HTML

PEMOGRAMAN APLIKASI BERGERAK (Java ME)

Modul Praktikum 4 Pemograman Berorientasi Objek

Menampilkan Data/Tabel MySQL di Ms.Access

Pengenalan Bahasa Pemrograman Java

PHP mendukung komentar yang digunakan pada C, C++ dan Shell Unix. Sebagai contoh:

BAB II LANDASAN TEORI. 2.1 SNMP (Simple Network Management Protocol) adalah Keith McCLOGHRIE, Marshall ROSE, Jeffrey D.

Cara Mudah Membuat Banner Animasi

Flash Case on Masking Animation

Puja Pramudya

Transkripsi:

Pemrograman Permainan Puzzle-8 Taufik Fuadi Abidin taufik.abidin@ndsu.nodak.edu http://www.cs.ndsu.nodak.edu/~abidin Lisensi Dokumen: Copyright 2004 IlmuKomputer.Com Seluruh dokumen di IlmuKomputer.Com dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari IlmuKomputer.Com. Puzzle-8 Puzzle-8 adalah permainan yang terdiri dari 3 baris dan 3 kolom (9 kotak) dengan delapan kotak memiliki identitas misalnya berupa huruf a,b,c,d,e,f,g,h dan satu kotak kosong. Pergeseran dilakukan ke arah kotak kosong secara vertikal atau horizontal namun tidak secara diagonal. Hanya satu kotak yang dapat digeser setiap kali perpindahan. Tujuan akhir dari permainan puzzle-8 adalah mengatur kondisi awal (initial state) yang diperoleh secara acak menjadi dalam bentuk konfigurasi akhir (goal state). Konfigurasi akhir dalam program yang akan kita bahas ini adalah: a b c d e f g h Gambar 1. Konfigurasi akhir. Tulisan ini membahas bagaimana membuat applet permainan puzzle-8 (Lihat contohnya di http://ww.cs.ndsu.nodak.edu/~abidin) menggunakan bahasa pemrograman Java. Sebagaimana kita ketahui Java merupakan bahasa pemograman berorientasi objek yang dikembangkan oleh Sun Microsystems. Satu hal yang sangat menarik dari bahasa pemrograman ini adalah aplikasi applet, yaitu suatu aplikasi yang dapat dijalankan melalui browser. Applet bersifat machine-independent karena kode programnya oleh compiler Java hanya diubah menjadi java bytecode yang berekstensi.class. Kemudian pada saat dieksekusi, java bytecode tersebut oleh interpreter Java (telah tersedia dalam browser ternama seperti Netscape dan Internet Explorer) diubah menjadi bahasa mesin sesuai konfigurasi perangkat keras dimana program tersebut dijalankan. Keunikan inilah yang membuat applet semakin digemari. Selain itu, Java yang merupakan bahasa pemrograman berorientasi objek mengizinkan pemrogram menggunakan class yang telah ada dan mewarisi sifatnya kepada class dibawahnya. Sehingga sifat dan kemampuan yang telah ada pada class sebelumnya tidak perlu diimplementasi ulang, namun dapat secara langsung dipakai. Konsep ini dikenal dengan sebutan inheritance. Karena tujuan kita adalah membuat permainan puzzle-8 yang dapat dijalankan melalui web (aplikasi applet), maka mutlak program yang kita buat tersebut menurunkan sifat class Applet yang sudah secara build-in disediakan oleh Java. Diagram berikut menggambarkan keterkaitan class-class dalam puzzle-8. 1

Applet is-a Puzzle-8 has Puzzle has PuzzleItem Diagram di atas dapat kita terjemahkan sebagai berikut: Puzzle-8 merupakan Applet berupa puzzle yang terdiri dari beberapa item berupa kotak a, b, c, d dan seterusnya. Dalam implementasi, kita membutuhkan 2 file suara (click.au dan finish.au). Click.au akan dimainkan pada saat pergeseran puzzle dilakukan dan finish.au dimainkan bila kondisi akhir dicapai. Selain itu, 9 file gambar dalam format jpeg juga diperlukan. Bentuk dan penamaan kesembilan file gambar tersebut adalah sebagai berikut: nama file: item0.jpeg nama file: item1.jpeg nama file: item2.jpeg nama file: item3.jpeg nama file: item4.jpeg nama file: item5.jpeg nama file: item6.jpeg nama file: item7.jpeg Kode Program /******************************* * File: Puzzle8.java * Author: Taufik Fuadi Abidin *******************************/ import java.awt.*; import java.awt.event.*; import java.applet.*; 2

public class Puzzle8 extends Applet private Image image[]; private String imagefile, imagetype; private String clicksound, finishsound; private int row, col, imagenum; private Label title, score; private Panel puzzle, bottom; private AudioClip clickclip, finishclip; public String getappletinfo() return "Copyright by Taufik Fuadi Abidin"; public String[][] getparameterinfo() String[][] info = "imagefile", "string", "Image file name", "clicksound", "string", "Sound if clicked", "finishsound", "string", "Sound if puzzle complete", "imagenum", "int", "Total number of image to be randomed", "row", "int", "Number of row of the puzzle", "col", "int", "Number of col of the puzzle", "imagetype", "string", "Type of image file" ; return info; public void init() imagefile = getparameter("imagefile"); clicksound = getparameter("clicksound"); finishsound = getparameter("finishsound"); imagetype = getparameter("imagetype"); imagenum = Integer.parseInt(getParameter("imageNum")); row = Integer.parseInt(getParameter("row")); col = Integer.parseInt(getParameter("col")); image = new Image[imageNum]; //Load image for (int i = 0; i < imagenum; i++) image[i] = getimage(getdocumentbase(), imagefile + i + "." + imagetype); showstatus(imagefile + " loaded..."); repaint(); clickclip = getaudioclip(getdocumentbase(), clicksound); finishclip = getaudioclip(getdocumentbase(), finishsound); setlayout(new BorderLayout()); setbackground(color.white); setforeground(color.black); puzzle = new Puzzle(image, imagenum, row, col,clickclip, finishclip, 3

this); bottom = new Panel(); bottom.setlayout(new BorderLayout()); bottom.setbackground(color.gray); setfont(new Font("Helvetica", Font.PLAIN, 14)); score = new Label(); score.setforeground(color.white); title = new Label("(c) 2003 Taufik Fuadi Abidin"); title.setforeground(color.white); bottom.add("north", score); bottom.add("center", title); add("center",puzzle); add("south", bottom); public void start() repaint(); public void stop() repaint(); public void setscore(string s) score.settext(s); repaint(); /******************************* * File: Puzzle.java * Author: Taufik Fuadi Abidin *******************************/ import java.awt.*; import java.awt.*; import java.awt.event.*; import java.lang.number.*; import java.applet.*; public class Puzzle extends Panel implements MouseListener private PuzzleItem item[]; private int num[]; //menyimpan no acak untuk image private int elemen; //jumlah elemen puzzle private int numofmove=0; private int opened1pos, opened2pos, openedimageid; private AudioClip clickclip, finishclip; private Puzzle8 ep; //Constructor Puzzle public Puzzle(Image image[], int seed, int row, int col, AudioClip clickclip, AudioClip finishclip, Puzzle8 ep) 4

elemen = row * col; this.ep = ep; this.clickclip = clickclip; this.finishclip = finishclip; scramble(seed, elemen); item = new PuzzleItem[elemen]; setlayout(new GridLayout(row, col)); //Acak elemen puzzle int ipos=0, jpos=0; for (int i = 0; i < elemen; i++) if((i!=0) && (i % col == 0)) ipos++; jpos=0; item[i] = new PuzzleItem(image[num[i]], num[i], ipos, jpos); item[i].addmouselistener(this); add(item[i]); jpos++; private void scramble(int seed, int elemen) num = new int[elemen]; //set nilai awal array num for (int i = 0; i<num.length; i++) num[i]=-1; int slot=0; while (slot < num.length) int rand = (int)(seed * Math.random()); boolean duplicate = false; for(int i=0; i<num.length; i++) if(num[i] == rand) duplicate = true; if(!duplicate) num[slot] = rand; slot++; public void mousepressed(mouseevent e) 5

int zeropos = 0; PuzzleItem it = (PuzzleItem) e.getsource(); //check posisi item yang diklik for(int i=0; i < elemen; i++) if(it == item[i]) // identifikasi image yang diklik dan ambil ID-nya int clickedid = item[i].getimageid(); Image clickedimage = item[i].getimage(); if(clickedid!= 0) //cari posisi dari image kosong for(int t=0; t < elemen; t++) if(item[t].getimageid() == 0) zeropos = t; break; //baca ipos dan jpos dari image yang diklik int ipos = item[i].getrow(); int jpos = item[i].getcol(); //baca ipos dan jpos dari image kosong int zipos = item[zeropos].getrow(); int zjpos = item[zeropos].getcol(); Image zeroimage = item[zeropos].getimage(); boolean validmove = false; if((ipos == zipos) (jpos == zjpos)) //posisi berdekatan if((math.abs(zipos - ipos) == 1) (Math.abs(zjpos - jpos) == 1)) validmove = true; if(validmove) numofmove++; //tukar posisi dan gambar //update jumlah pergeseran item[i].setimageid(0); item[i].setimage(zeroimage); item[i].setrow(ipos); item[i].setcol(jpos); item[i].update(); item[zeropos].setimageid(clickedid); item[zeropos].setimage(clickedimage); item[zeropos].setrow(zipos); item[zeropos].setcol(zjpos); item[zeropos].update(); 6

boolean goal = true; //check apakah kondisi akhir (goal state)? for(int t=0; t < (elemen-1); t++) if(item[t].getimageid()!= (t+1)) goal = false; break; if(!goal) clickclip.play(); else finishclip.play(); ep.setscore("total Move = " + numofmove); for(int t=0; t < elemen; t++) //nonaktifkan mouselistener item[t].removemouselistener(this); break; public void mouseclicked(mouseevent e) public void mouseentered(mouseevent e) public void mouseexited(mouseevent e) public void mousereleased(mouseevent e) /******************************* * File: PuzzleItem.java * Author: Taufik Fuadi Abidin *******************************/ import java.awt.*; import java.awt.image.*; public class PuzzleItem extends Panel private Image image; private int ipos, jpos; private int imageid; private String status; //Constructor PuzzleItem public PuzzleItem(Image image, int imageid, int ipos, int jpos) this.image = image; this.imageid = imageid; this.ipos = ipos; this.jpos = jpos; 7

public void paint(graphics g) Rectangle r = getbounds(); g.drawimage(image,0,0,this); g.setcolor(color.cyan); g.drawrect(0,0,r.width-1,r.height-1); public int getrow() return ipos; public int getcol() return jpos; public int getimageid() return imageid; public Image getimage() return image; public void setrow(int ipos) this.ipos = ipos; public void setcol(int jpos) this.jpos = jpos; public void setimageid(int id) this.imageid = id; public void setimage(image image) this.image = image; public void update() repaint(); 8

File HTML (asumsi disimpan dengan nama puzzle.html) <html> <head> <title>applet Puzzle-8</title> </head> <body bgcolor=#000000> <font color=white size=5> <center>permainan Puzzle-8 <hr> <applet code="puzzle8.class" width=180 height=228> <param name="imagefile" value="item"> <param name="clicksound" value="click.au"> <param name="finishsound" value="finish.au"> <param name="imagenum" value="9"> <param name="row" value="3"> <param name="col" value="3"> <param name="imagetype" value="jpg"> </applet> <hr> <font color=white size=2> <br>copyright 2003 Taufik Fuadi Abidin </center></font> </body> </html> Penutup Compile ketiga file Java di atas dan jalankan file HTML puzzle.html pada browser anda. Klik pada kotak yang ingin anda geser dan selesaikan puzzle-8 sampai konfigurasi akhir tercapai. Untuk mengacak ulang, klik tombol refresh pada browser anda. Have fun! 9

Taufik Fuadi Abidin Biografi dan Profil Taufik Fuadi Abidin. Lahir di Banda Aceh, 8 Oktober 1970. Menyelesaikan S1 dibidang matematika di Jurusan Matematika FMIPA ITS Surabaya pada tahun 1993 dan S2 dibidang ilmu komputer di Computer Science Department, RMIT University, Melbourne, Australia pada tahun 2000. Saat ini sedang melanjutkan program S3 di Computer Science Department, North Dakota State University (NDSU), USA. Di Indonesia berstatus sebagai tenaga pengajar Jurusan Matematika FMIPA Universitas Syiah Kuala, Banda Aceh. Meminati dan mendalami bidang database, data dan teks mining serta information retrieval. Informasi lebih lanjut tentang penulis ini bisa didapat melalui: URL: http://www.cs.ndsu.nodak.edu/~abidin Email: taufik.abidin@ndsu.nodak.edu 10