Puzzle merupakan permainan yang membutuhkan ketelitian juga ketajaman terhadap daya ingat otak manusia. Puzzle terdiri dari beberapa potong gambar yang diacak, kemudian disusun kembali satu-persatu sehingga terbentuk menjadi satu gambar yang utuh. Aplikasi Permainan “Puzzle” pada Telepon Seluler adalah sebuah permainan puzzle pada telepon seluler, dimana telepon seluler yang digunakan harus memiliki aplikasi java. Puzzle (symbol-puzzle) adalah permainan yang terdiri dari 3 baris dan 3 kolom dengan sembilan kotak memiliki identitas misalnya berupa angka 1, 2, 3, 4, 5, 6, 7, 8 dan 9. Pergeseran dilakukan ke arah kotak mana saja secara vertikal atau horizontal namun tidak secara diagonal dengan menggunakan tombol angka (0 atau 5) pada telepon selular. Hanya satu kotak yang dapat digeser setipa kali perpindahan. Tujuan akhir dari permainan Jigsaw Puzzle adalah mengantur kondisi awal (initial state) yang diperoleh secara acak menjadi dalam bentuk konfigurasi akhir (goal state).
Langkah Pembuatan Program
Membuat Aplikasi
Ketika pertama kali diinstall, Java 2 Micro Edition Wireless Toolkit (J2MEWTK) akan mencari lokasi dimana direktori Java 2 Standart Edition (J2SE) berada. Jika J2MEWTK sudah terinstall dengan benar, lalu kita jalankan shortcut Ktoolbar.
Untuk membuat aplikasi, kita harus membuat project baru terlebih dahulu. Caranya kita klik menu New Project yang ada pada J2MEWTK. Dalam program ini kita membuat aplikasi dengan nama Puzzle.
Kita masukkan nama project-nya dan nama class yang akan dibuat. Dalam pengisian nama class MIDlet harus sama dengan nama class yang akan kita buat dalam program. Lalu kita diminta mengisi setting yang dibutuhkan dalam program tersebut, misalnya ukuran JAR, nama vendor yang membuat Versi MIDlet-nya. Tampilan adalah sebagai berikut :
Setelah disimpan kita kembali ke J2MEWTK lalu kita kompilasi program tersebut dengan memilih Build. Tampilan sebagai berikut :
Setelah itu project baru akan terbentuk. J2MEWTK secara otomatis akan menyimpan semua project kedalam direktori c:/WTK104/apps/Puzzle. Ketika project terbentuk maka akan didapat empat subdirektori didalam project Slide, yaitu bin, lib, res, src. Direktori bin digunakan untuk menyimpan hasil kompilasi MIDlet berupa file .jar dan .jad. direktori lib digunakan untuk menyimpan file JAR tambahan yang ingin disertakan dalam project. Direktori res digunakan untuk menyimpan file gambar dan yang terakhir src digunakan untuk kode sumber (source code) yang harus dikompilasi. Dan untuk menjalankan program puzzle kita pilih pada menu bar dengan meng-klik icon Run. Maka akan muncul tampilan awal dari permainan puzzle yang terdiri dari satu buah pilihan gambar permainan yaitu :
1. Symbol-puzzle
Pada penulisan ini Kita hanya membahas pilihan yang pertama yaitu (symbol-puzzle). Untuk membuat program permainan Puzzle (symbol-puzzle) anda dapat menulisnya dengan menggunakan teks editor. Salah satunya anda dapat menulisnya dengan menggunakan Notepad. Di dalam mengerjakan program Puzzle (symbol-puzzle) menggunakan 7 file, file pertama slide, PuzzleCover, PuzzlePlay, Instruksi, Tentang, Score, PuzzleNewHigh. Tetapi 7 file ini terbagi atas 3 file yaitu file tampilan awal, file tampilan cover, dan file tampilan menu utama.
Tampilan Awal permainan Puzzle
Pada pembuatan kelas Puzzle tampilan awal digunakan paket import
javax.microedition.midlet.*, import javax.microedition.lcdui.*, paket import
javax.microedition.midlet.* mendefinisikan MIDP ( Mobile Information Device ),
import javax.microedition.lcdui.* menyediakan fungsi-fungsi untuk memanipulasi
antarmuka GUI.
Di dalam puzzle tampilan awal mempunyai beberapa procedure yaitu public class slide extends MIDlet{ sebagi procedure utama sedangkan :
private final PuzzleCover cover;
private PuzzlePlay puzzlePlay;
private Instruksi ins;
private Tentang about;
adalah sebagai sub class dari procedure utama yang dimana private-private tersebut dapat dipanggil jika sudah dideklarasikan dahulu. MIDlet harus lah mengimplementasikan fungsi-fungsi abstrak pada kelas MIDlet, untuk menampilkan gambar kode-kode MIDlet menggunakan fungsi StartApp(), fungsi pauseApp dapat digunakan jika status pada MIDlet sedang active atau tidak sedang mengunci suatu file, sedangkan void destroyApp(Boolean b) {} digunakan untuk melakukan pemanggilan, yang jika pemanggilan itu berhenti maka semua pemanggilan akan dibebaskan. Cover
Ini merupakan untuk menampilkan fungsi canvas seperti background, gambar, warna, dll. class PuzzleCover extends Canvas implements CommandListener{ untuk mengambil file gambar digunakan perintah seperti: CoverImages = Image.createImage("/slide.png"); Untuk menampilkan gambar kode-kode MIDlet pada fungsi StartApp() yaitu kode-kode di atas, harus di bungkus dengan try{}catch{} karena fungsi createImage() melemparkan ekspresi berupa Java.io.IOException yang harus ditangani jika memang terjadi kesalahan output/input. Fungsi command merupakan untuk menambahkan tombol “Play” untuk bermain , “Instruksi” untuk melihat bagaimana cara bermain dari Slide Puzzle “About” adalah untuk melihat siapa yang membuat aplikasi permainan teka-teki pindah kotak , dan “Exit” adalah untuk keluar dari menu.
continueCommand = new Command("Play", Command.SCREEN,0);
instruksi = new Command ("Instruksi", Command.SCREEN,1);
about = new Command ("About", Command.SCREEN,2);
exit = new Command ("Keluar",Command.SCREEN,3);
Pada perintah diatas Command.SCREEN adalah untuk mendapatkan indeks menu yang dipilih. Indeks yang ada dari nomor 0-3 yang mewakili menu Play, Instruksi, About, Exit. Setiap tombol Command ditekan fungsi yang akan dijalankan adalah fungsi CommandAction(command c, Displayable d) dan Class CommandAction pada fungsi Command dengan var c, serta fungsi Displayable dengan var d. Class untuk aksi (Action) dari fungsi command menggunakan fungsi.
If(c==continue command) { Midlet.PuzzleCoverDone(); }
If(c==instruksi){
Midlet.InstruksiDone(); } If(c==about){
Midlet.aboutDone(); } If(c==exit) { Midlet.exitRequested();
yang maksudnya adalah jika var c sama dengan var continueCommand maka akan memanggil prosedur atau class PuzzleCoverDone. Fungsi ini sama pada fungsi Command pada About, Instruksi, Play, NewHigh, Score.Play
Kelas ini menggunakan paket selain paket Javax.microedition.midlet dan javax.microedition.Icdui yaitu paket Java.util.Random yang digunakan untuk mengambil angka untuk diacak dan Objek score merupakan objek baru yang menjadi inti tentang membuat penyimpanan yang menggunakan import javax.microedition.rms.*. mekanisme penyimpanan yang permanent di modelkan dengan sebuah record yang berbasis database yang dinamakan Record Management System atau RMS. Bentuk record kurang lebih record = {byte LEVEL_TAG; int level}. Pada kelas bertipe Canvas pasti terdapat fungsi Graphics g, karena fungsi ini yang akan dijalankan setiap kelas bertipe canvas yang digunakan. Ini merupakan fungsi untuk menentukan jumlah static potongan gambar yang digunakan, private static int NUM_IMAGES = 9 karena kolom yang digunakan adalah 3x3 untuk mendefinisikan posisi masing-masing gambar menggunakan : private int[] current = new int[NUM_IMAGES], sedangkan untuk mendefinisikan gambar yang dipertukarkan private Image[] gambar = new Image[NUM_IMAGES] dan untuk mendefinisikan gambar yang ditampilkan di layar private Image[] Real = new Image[NUM_IMAGES] Untuk menampilkan kotak-kotak gambar pada Puzzle menggunakan fungsi. protected void showNotivy(){ for(i=0;i<NUM_IMAGES;i++){ gambar[i] =loadImage(“/”+text[i]+”.png”i; } Menampilkan potongan – potongan yang diinginkan atau gambar yang telah diacak serta menempatkan kembali gambar-gambar berdasarkan urutan baik untuk kotak pertama, kedua ataupun ketiga dapat didefinisikan dengan fungsi yang di bawah ini :
private void pointUnsolved(Graphics g)
{ g.setColor(0xFFFFFF); g.fillrect(0, 0, getWidth(), getHeigtht());
int urut;
for(i=0;i<NUM_IMAGES;i++){
urut = current[i];
Real[i] = gambar[urut];
If(i<3){
g.drawImage(Real[i], 30*I,0,Graphics.TOP + Graphics.LEFT);
}
else if (i<6){
g.drawImage(Real[i], 30*(i-3),35,Graphics.TOP + Graphics.LEFT);
}
else if (i<9){
g.drawImage(Real[i], 30*(i-6),70,Graphics.TOP + Graphics.LEFT);
}
Dalam pengacakan angka dan pergeseran kode-kode program yang digunakan hampir sama, hanya saja penentuan arah yang berbeda. Bila pergeseran gambar yang berupa logo gunadarma dan kotak menggunakan input tombol, pengacakan gambar menggunakan input gambar yang di dapat dari pengacakan suatu variable yang perintah fungsinya seperti berikut :
private void pengacakan(){
tialize();
41
r(i=0;i<NUM_IMAGES;i++){
current[i] = i;
}i
nt penukar,order;
for(i=0;i<NUM_IMAGES;i++){
penukar = acak.nextInt() & 0x05;
order = current[i];
current[i] = current[penukar];
current[penukar] = order;
}}
Pada perintah penukar = acak.nextInt() & 0x05 adalah mengambil nilai dengan acak dari gambar logo gunadarma dan acak adalah variabel bertipe Random. Dari nilai yang diberikan fungsi diatas maka nilai itu yang menentukan gambar apa? Digeser kemana? Perintah untuk menggeser kotak dan gambar dengan menggunakan input
tombol arah perintahnya terdapat pada fungsi keyPressed(int keycode), fungsi ini harus ada bila ingin menggunakan tombol keypad. Fungsi ini yang akan menggeser kotak tergantung tombol arah apa yang ditekan dan letak kotak kosongnya. Bila letak kosong berada si pinggir kiri maka tombol kanan tidak akan berfungsi jika ditekan. Begitu pula bila letak kotak kosong berada di pinggir kanan maka tombol kiri tidak berfungsi jika ditekan. Dan bila kotak berada di pojok maka akan program akan menjalankan perintah repaint(). Perintah repaint() gunanya untuk memanggil fungsi (Graphics g) yang akan menggambar perubahan/pergeseran yang terjadi karena ditekannya tombol arah. Dan setiap terjadi perpindahan kotak maka langkah akan ditambah satu. Fungsi untuk mengacak sama dengan fungsi keyPressed() di atas, yang beda hanya pada fungsi acak() tidak ada perintah agar langkah ditambah satuan repaint(). Pada fungsi acak() perintah tersebut ditiadakan karena dalam pengacakan tidak diperlukan penghitungan langkah dan penggambaran kotak.
Score
Didalam play ini, jika permainan sudah dijalankan dan selesai. Maka akan tampil score yang merupakan nilai dari permainan Puzzle. Objek score merupakan objek baru yang menjadi inti tentang membuat penyimpanan yang menggunakan import javax.microedition.rms.*. Mekanisme pennyimpanan yang permanen dimodelkan dengan sebuah record yang berbasis database yang dinamakan Record Management System atau RMS. Untuk menghasilkan nilai integer dari sebuah array byte yaitu dengan menggunakan private int getInt(byte[] buf, int 43 offset) sedangkan untuk mengubah nilai integer menjadi nilai array byte menggunakan private void putInt(byte[]buf, int offset, int value).
Private void putInt(byte[]buf, int offset, int value)
Buf[offset+0] = (byte)((value>>24) & 0xff);
Buf[offset+1] = (byte)((value>>16) & 0xff);
Buf[offset+2] = (byte)((value>>8) & 0xff);
Sedangkan Private recordStrore store merupakan sebuah objek yang
mempresentasikan apa yang disebut recordstore. Sebuah recordStore terdiri atas
kumpulan record yang akan tertinggal secara permanent dalam sebuah MIDlet.
Tidak ada komentar:
Posting Komentar