Benhard Risando's Blog..

Senin

Tugas Pemrograman Multimedia 4IA09

Pembuatan Aplikasi Game GOMOKU pada Mobile Menggunakan Java 2 Micro Edition


Berkembangnya teknologi yang semakin maju membuat perangkat mobile

seperti hand phone dan PDA menjadi perangkat yang umum dimiliki masyarakat.

Dukungan terhadap bahasa pemprograman Java sebagai bahasa pengembangan

aplikasi untuk perangkat mobile semakin meluas. Hal ini tidak lepas dari

kesuksesan Java dalam menunjukkan kemampuannya untuk menjadi bahasa

dengan portabilitas tinggi yang menganut prinsip ‘write once, run anywhere’.

Penggunaan bahasa pemprograman Java pada perangkat bergerak,

khususnya pada pengembangan aplikasi MIDlet tidak hanya membuat antusias

para pengembang aplikasi manca negara tetapi juga para penembang di nusantara.

Dukungan yang kuat dari para produsen perangkat mobile juga menjamin

kelangsungan penggunaan Java untuk pengembangan aplikasi.

Aplikasi yang paling populer untuk perangkat mobile adalah aplikasi

permainan. Permainan pada perangkat mobile seperti hand phone merupakan

pengisi waktu kosong yang sangat efisien karena dapat dimainkan di mana saja dan kapan saja.

Salah satu permainan terkenal yang sangat menarik untuk dimainkan

adalah Gomoku. Gomoku atau biasa ditulis Go-Moku (“lima point”) adalah

permainan tradisional dari Jepang yang biasa dimainkan pada papan berukuran

19x19. Permainan ini dimainkan oleh dua orang dan pemenangnya adalah yang

lebih dahulu membentuk lima batu yang segaris.

Gomoku sangat menarik karena bagi pemula permainan ini mempunyai

peraturan yang sangat sederhana dan mudah dipahami. Dan bagi mereka yang

sudah ahli akan mengatakan permainan ini sangat kompleks karena dengan

memperdalam permainan ini dapat dirasakan kekompleksan dari pilihan langkah,

kalkulasi langkah terbaik dan strategi menyerang.

Oleh karena itu saya tertarik untuk melakukan penulisan mengenai pengembangan

Aplikasi Permainan Gomoku untuk perangkat mobile dengan J2ME (Java 2 Micro

Edition). Permainan ini dapat dimainkan sendiri melawan AI (artificial

intelligence) ataupun berdua. Aplikasi permainan ini akan dapat dijalankan pada

semua perangkat mobile yang mendukung Java.


Perkembangan Java


Saat ini distribusi Java dan class pendukungnga dibagi dalam tiga

bagian yang masing-masing memiliki konsentrasi tersendiri yaitu:

  • Java 2 Standard Edition (J2SE), untuk aplikasi desktop
  • Java 2 Enterprise Edition (J2EE), untuk aplikasi server
  • Java 2 Micro Edition (J2ME), untuk piranti dengan kemampuan terbatas

Dukungan terhadap pengembangan dan implementasi Java terus

mengalir.Meskipun Sun Microsystem adalah perusahaan yang

mengembangkan bahasa Java, namun Sun Microsystem tidak membuat

pengembangan Java secara tertutup. Terdapat suatu komunitas raksasa

pengembangan Java yang memberikan dukungan terhadap implementasi Java

dalam beragam bidang komputerisasi. Sun Microsystem juga memberikan

spesifikasi dari Java dan Virtual Machine-nya kepada publik serta

menyediakan perangkat bantu pengembangan aplikasi Java secara cuma-

cuma.

Teknologi Java yang dikembangkan secara bersama-sama ini

menghilangkan kekhawatiran akan ketergantungan terhadap teknologi milik

suatu perusahaan tertentu. Hal inilah yang mendorong banyak perusahaan besar

seperti Oracle dan IBM memberi dukungan terhadap Java kepada

produknya, selain dari fakta yang menunjukkan bahwa Java memang

merupakan bahasa yang handal dan tangguh.


JAVA 2 Micro Edition (J2ME)


Dengan semakin berkembangnya teknologi dan memasyarakatnya
penggunaan handset telekomunikasi menumbuhkan kebutuhan akan keberadaan
aplikasi yang dapat membantu penggunanya. Aplikasi ini dapat saja berupa
aplikasi yang diproses pada suatu server sehingga handset pengguna hanya
bertindak sebagai media input-output saja seperti pada teknologi WAP.
Pendekatan lainnya adalah menggunakan aplikasi yang berjalan pada handset
pengguna.


Pembuatan Aplikasi


Tahap Perancangan Umum Aplikasi


Aplikasi Gomoku mempunyai empat tahap utama dalam proses pembuatannya.

Tahap pertama adalah pendefinisian kebutuhan. Pada tahap ini penulis melakukan

inventarisasi terhadap elemen apa saja yang akan dimasukkan dalam program

simulasi permainan ini. Pada tahap ini terjadi pemilihan algoritma, pemilihan metoda

pengkodean, dan gambaran kasar aplikasi permainan ini.


Tahap yang kedua adalah tahap perancangan antarmuka. Pada tahap
ini dilakukan perancangan antarmuka grafis untuk pengguna permainan ini. Pada
tahap perancangan antarmuka ini dilibatkan sedikit penggunaan alat bantu
pembuatan citra selain penggunaan bahasa pemrograman sebagai alat utama.

Tahap ketiga adalah tahap pengkodean aplikasi. Pada tahap ini, semua
elemen yang berada pada daftar kebutuhan yang ada pada tahap pertama
dimasukkan secara kode kedalam program. Semua fungsi pendukung aplikasi
permainan seperti jaringan dan antarmuka grafis mengalami pengintegrasian ke
dalam sebuah rangkaian kode program yang utuh. Pada akhir tahap ini dilakukan
sebuah pengujian skala kecil terhadap keseluruhan kode dalam bentuk uji
kompilasi. Hasil ujian kondisional ini akan menentukan apakah aplikasi dapat
dilanjutkan ke tahap berikutnya atau harus di tulis ulang agar lolos uji kompilasi.
Tahap keempat atau yang terakhir adalah tahap pengujian program
secara runtime atau nyata. Tahap ini dilakukan secara berulang terhadap program
yang lolos uji kompilasi dengan berbagai macam kondisi yang mungkin terjadi
guna melihat kinerja aplikasi, menguji integrasi aplikasi dengan bermacam hand
phone, menguji algoritma permainan, dan mengetahui apakah antarmuka grafis
yang digunakan cocok dengan tujuan diciptakannya permainan ini. Tahap
pengujian akhir untuk aplikasi ini untuk sementara tidak melakukan uji optimasi
penggunaan memori terhadap program
.


Gambar Diagram proses perancangan aplikasi Gomoku



Perancangan Antarmuka


Menu Utama



Gambar Antarmuka menu permainan Gomoku


a) Main menu
Menu utama merupakan menu awal yang akan dilihat
pengguna, dari menu utama ini terdapat beberapa pilihan, yaitu:


1. 1 Player : memulai permainan melawan komputer (kecerdasan
buatan).
2. 2 Players : memulai permainan dengan 2 pemain, dimainkan
dengan berjalan secara bergantian.
3. Option : berpindah menuju menu Option untuk mengganti pilihan
permainan.
4. Help : menampilkan menu Help.
5. About : menampilkan menu About.
6. Exit : keluar dari aplikasi permainan Gomoku.


b) Option

Menu ini menampilkan pilihan yang digunakan untuk
mengubah jenis permainan sesuai dengan keinginan pengguna. Pilihan
yang dapat diubah adalah:

1. Level
Terdapat tiga pilihan algoritma kecerdasan buatan yang
dapat dipilih yaitu:
a. Easy
b. Normal

c. Hard


2.Board Size

Terdapat 9 pilihan untuk menentukan ukuran papan
permainan yang akan dipakai dalam permainan Gomoku, yaitu:

a. 8 x 8
b. 9 x 9
c. 10 x 10
d. 11 x 11
e. 12 x 12
f. 13 x 13
g. 14 x 14
h. 15 x 15
i. 16 x 16
Perbedaan ukuran papan akan mengubah taktik dan strategi
permainan, sehingga akan menyebabkan banyaknya variasi
permainan dan tidak membosankan pengguna.


3.Number Stone

Menu “Number Stone” menentukan banyaknya batu segaris
yang dibutuhkan untuk memenangkan permainan ini. Terdapat 3
pilihan:
a. 4 stones

b. 5 stones
c. 6 stones
Dengan mengubah pilihan ini maka pengguna akan merasakan
bahwa permainan sangat berubah seperti memainkan permainan
baru yang memerlukan taktik dan strategi yang berbeda.


4. First Move
Pilihan pada menu ini menentukan siapa yang akan
berjalan terlebih dahulu pada permainan 1 pemain (1 Player).
Dapat dipilih apakah pemain atau komputer yang berjalan dahulu.
Pilihan pada menu:
a. You
b. Com
c) Help
Menu ini berisi sejarah singkat dan peraturan permainan
Gomoku. Diharapkan dengan penjelasan yang singkat ini pengguna
yang baru mengenal permainan Gomoku dapat mengerti cara bermain
dan tujuan permainan Gomoku.


d) About
Menu “About” menampilkan keterangan mengenai aplikasi dan
data singkat penulis.


Papan Permainan


Papan permainan yang digunakan dalam aplikasi permainan Gomoku
merupakan papan biasa yang ukurannya dari “8 x 8” sampai “16 x 16”. Papan
dibentuk dengan garis vertikal dan horizontal. Tampilan papan permainan:


Gambar Desain papan permainan 10 x 10


Pemain yang berjalan pertama merupakan pemain dengan warna batu
hitam. Pemain bebas meletakan batu pada kotak yang belum terisi. Setelah itu
pemain berikutnya berjalan hingga permainan berakhir.


Pengkodean


Tabel berkas pada aplikasi permainan Gomoku


Antarmuka Aplikasi


Antarmuka aplikasi diatur dalam kelas GomokuMidlet yang terdapat
pada file GomokuMidlet.java. Flowchart kelas GomokuMidlet adalah sebagai
berikut:


Gambar Flowchart kelas Gomoku Midlet


a) Mengalokasikan memory yang dibutuhkan


Pengalokasian memory dilakukan pada fungsi konstruktor kelas
GomokuMidlet yaitu pada fungsi public GomokuMidlet(). Pengalokasian
memory dilakukan pada objek yang akan dipakai untuk menampilkan
menu. Statement untuk mengalokasikan memory adalah dengan statement
new.


Fungsi konstruktor akan dijalankan pada saat aplikasi dimulai, jadi
tanpa harus dipanggil secara manual. Nama fungsi konstruktor sesuai
dengan nama kelas tersebut dan tidak mempunyai return type sepert fungsi
lainnya. Konstruktor pada kelas GomokuMidlet:

public GomokuMidlet() {

System.out.println("Starting GoMoKuMidlet");

display = Display.getDisplay(this);

lsMenu = new List("GoMoku Main Menu", Choice.IMPLICIT);

lsOption = new List("GoMoku Option", Choice.IMPLICIT);

lsLevel = new List("GoMoku Level Option", Choice.EXCLUSIVE);

lsBoardSize = new List("GoMoku Board Size Option",

Choice.EXCLUSIVE);

lsNumStone = new List("GoMoku Number Stone Option",

Choice.EXCLUSIVE);

lsWhoFirst = new List("GoMoku First Move Option",

Choice.EXCLUSIVE);

cmMenuOk = new Command("Select", Command.OK, 1);

cmMenuExit = new Command("Exit", Command.BACK, 1);

tickerMenu = new Ticker("Gomoku Main Menu");

tickerOption = new Ticker("Gomoku Option");

fHelp = new Form("Gomoku Help");

fAbout = new Form("Gomoku About");

}

Alokasi memori dilakukan dengan bentuk umum:

nama_variabel = new type_variabel(argument1, argument2, ....);


Dengan mengalokasikan memory maka sistem operasi akan
menyiapkan sejumlah memori yang diperlukan untuk menyimpan data
yang dibutuhkan variabel tersebut.

b) Menyiapkan daftar menu yang dibutuhkan

Setelah mengalokasikan memori maka variabel menu tersebut
harus dimasukkan data mengenai isi dari masing menu. Hal ini dilakukan
pada fungsi setMenu() yang dipanggil pada fungsi startApp().


protected void startApp() {

System.out.println("In startApp() function");

setMenu();

showSplash();

setDefaultOption();

}



Fungsi statrApp() adalah fungsi turunan dari kelas MIDlet yang secara
otomatis dijalankan setelah fungsi konstruktor selesai dijalankan. Pada
fungsi ini dipanggil fungsi setMenu() yang akan memasukkan data
mengenai isi masing menu

private void setMenu() {

System.out.println("In setMenu() function");

try {

int i;

Image icBlack = Image.createImage("/blackStone.png");

Image icWhite = Image.createImage("/whiteStone.png");

lsMenu.setTicker(tickerMenu);

lsMenu.append("1 Player", icBlack);

lsMenu.append("2 Players", icWhite);

lsMenu.append("Option", icBlack);

lsMenu.append("Help", icWhite);

lsMenu.append("About", icBlack);

lsMenu.append("Exit", icWhite);

lsMenu.addCommand(cmMenuOk);

lsMenu.addCommand(cmMenuExit);

lsMenu.setCommandListener(this);

lsOption.setTicker(tickerOption);

lsOption.append("Level", icBlack);

lsOption.append("Board Size", icWhite);

lsOption.append("Number Stone", icBlack);

lsOption.append("First Move", icWhite);

lsOption.addCommand(cmMenuOk);

lsOption.addCommand(cmMenuExit);

lsOption.setCommandListener(this);

}

catch(IOException e) {

notifyDestroyed();

}

}



lsMenu merupakan variabel bertipe List yang berisi pilihan utama
yaitu “1 Player”, “2 Players”, “Option”, dan seterusnya. Cara untuk
menambahkan pilihan pada type List adalah dengan fungsi append().
Bentuk umumnya adalah:

nama_variabel.append( kalimar_tampilan, gambar );


Gambar yang dapat tampilkan pada menu harus diload dahulu
pada variabel bertipe Image dengan fungsi createImage(). Dengan
menggunakan fungsi append maka pilihan menu dapat disusun sesuai
rancangan aplikasi.


c) Menampilkan logo permainan Gomoku

Sebelum masuk pada menu pilihan pertama ditampilkan dulu
gambar yang merupakan logo dari aplikasi permainan Gomoku. Kelas
yang mengatur penampilan gambar adalah kelas Splash yang terdapat
pada file Splash.java.
Kelas Splash merupakan kelas turunan dari kelas Canvas yang
memanipulasi fungsi paint sehingga menampilkan gambar yang ditunjuk
argument konstruktornya.

public void paint(Graphics g) {
g.setColor(red, green, blue);
g.fillRect(0, 0, getWidth(), getHeight());
g.drawImage(coverImages, (getWidth() - frameWidth)/2,
(getHeight()-frameHeight)/2, Graphics.TOP + Graphics.LEFT);
}


Fungsi paint() merupakan fungsi yang dipanggil pada saat objek
tersebut ditampilkan dan pada saat ada permintaan untuk meng-update
objek.


Gambar Logo Aplikasi

d) Menampilkan menu utama

Setelah tampilan logo maka program akan dikontrol oleh menu
utama dan menunggu perintah dari pengguna. Pemeriksaan perintah dari
pengguna dilakukan pada fungsi commandAction().

public void commandAction(Command c, Displayable d) {

if (d.equals(lsMenu)) {

if (c.equals(cmMenuExit))

startExit();

else {

switch (lsMenu.getSelectedIndex()) {

case 0:

start1Player(); break;

case 1:

start2Player(); break;

case 2:

startOption(); break;

case 3:

startHelp(); break;

case 4:

startAbout(); break;

case 5:

startExit(); break;

}

}

}



Kode diatas memperlihatkan bagaimana aplikasi melihat pilihan yang
dipilih oleh pengguna. Dengan statement switch dilakukan percabangan
alur program sesuai pilihan yang dipilih pengguna.



Gambar Main Menu


Papan permainan

Penggambaran papan permainan pada layar merupakan tanggung
jawab dari kelas Board yang berada pada file Board.java. Flowchart dari kelas
Board:



Gambar Flowchart papan permainan

Langkah awal yang dilakukan adalah mengambil informasi mengenai
resolusi layar.

phoneWidth=getWidth();

phoneHeight=getHeight();


Setelah variabel phoneWidth dan ohoneHeight berisi lebar dan tinggi resolusi
maka dilakukan perhitungan jarak masing-masing garis vertikal dan
horizontal yang dipakai untuk membentuk papan permainan. Jarak ini juga
dipengaruhi oleh pilihan ukuran dari papan permainan (board size).

stoneSizeX=phoneWidth/stoneXnum;

stoneSizeY=phoneHeight/stoneYnum;

boardSizeX=stoneSizeX*stoneXnum;

boardSizeY=stoneSizeY*stoneYnum;

boardX=(phoneWidth-boardSizeX)/2;

boardY=(phoneHeight-boardSizeY)/2;


Variabel stoneSizeX menyimpan lebar 1 kotak pada papan sedangkan
stoneSizeY mnyimpan panjang kotak. Dengan perhitungan diatas maka akan
didapatkan koordinat penggambaran papan permainan beserta jarak garis
vertikal dan horizontal papan.

Langkah terakhir adalah menggambar papan tersebut, yang diletakkan
pada fungsi paint().

public void paint(Graphics g) {

int x,y;

g.setColor(BACK_COLOR.red, BACK_COLOR.green, BACK_COLOR.blue);

g.fillRect(0, 0, getWidth(), getHeight());

g.setColor(BOARD_COLOR.red,BOARD_COLOR.green,BOARD_COLOR.blue

);

g.fillRect(boardX, boardY, boardSizeX, boardSizeY);

g.setColor(BOARD_LINE_COLOR.red,BOARD_LINE_COLOR.green,

BOARD_LINE_COLOR.blue);

g.drawRect(boardX, boardY, boardSizeX-1, boardSizeY-1);
for (y=0;y


Fungsi yang dipakai adalah drawRect() untuk menggambar persegi panjang
dan drawCell() fungsi yang mengatur pengambaran kotak didalam papan
permainan.



Peraturan permainan

Kelas GomokuGame dibuat untuk mengatur jalannya permainan, dari
menentukan giliran pemain yang berjalan, menentukan langkah yang valid
atau tidak sampai menentukan apakah permainan telah berakhir.



Gambar Flowchart kelas GomokuGame

Pada konstruktor dilakukan alokasi memori untuk variabel array stone
yang memuat data batu yang diletakkan pada papan permainan.

public GomokuGame(int x, int y, int nstone) {

gameX=x;

gameY=y;

winStone=nstone;

stone=new int[x][y];

}


Variabel gameX dan gameY menyimpan informasi ukuran papan
permainan yang dipakai. Vairabel winStone menyimpan banyaknya batu yang
dibutuhkan untuk memenangkan permainan.
Permainan dapat dimulai dengan menjlankan fungsi start(), fungsi ini
akan menyiapkan variabel yang dipakai dalam permainan.

public void start() {

whoPlay=1;

gameOver=false;

stepCount=0;

}


Setelah permainan ini siap dimainkan maka akan menunggu perintah
langkah dari pemain. Untuk melangkah dipakai fungsi play() yang akan
memeriksa apakah langkah tersebut valid.

public boolean play(int x, int y) {

if (!isValid(x,y) || gameOver) return false;

System.out.println("valid : (" + x + ", " + y + ") : " + whoPlay);

stone[x][y]=whoPlay;

stepCount++;

if (stepCount>=gameX*gameY) gameOver=true;

if (isFinish()!=0) gameOver=true;

changeTurn();

return true;

}


Pemeriksaan apakah langkah pemain valid dilakukan fungsi isValid().
Langkah pemain dianggap valid bila ia meletakan batu pada kotak belum
terisi. Setelah pengecekan dilakukan update terhadap variabel stone, dan
terakhir dipanggil fungsi isFinish untuk melihat apakah pemain tersebut telah
memenuhi pesyaratan untuk memenangkan permainan.

Kecerdasan buatan

Sebuah program komputer tidak dapat berpikir sendiri, kita harus
memberitahu langkah yang harus dikerjakan. Tetapi kita tidak dapat
memprediksikan setiap langkah yang akan dapat dilakukan pada permainan.
Bahkan lima langkah pertama yang dimainkan pada papan berukuran 8x8
mencapai 914.941.440 langkah yang berbeda. Maka bila kita ingin
memprediksikan seluruh langkah yang ada kita memerlukan processor dengan
kecepatan yang sangat cepat.
Maka kita harus memberikan beberapa taktik dasar yang dapat
mengurangi kemungkinan langkah yang terjadi. Taktik dasar tersebut adalah:

1. Buat 5 batu segaris bila dapat.

2. Halangi lawan membentuk 5 batu segaris.

3. Buat 4 batu segaris yang terbuka bila dapat

4. Halangi lawan membentuk 4 batu segaris yang bebas.

5. Buat 2 buah 3 batu segaris bila dapat.

6. Halangi lawan membuat 2 buah 3 batu segaris yang bebas.

Selain menggunakan taktik dasar diatas maka kita perlu menggunakan
penilaian untuk menentukan langkah mana yang terbaik. Maka kita akan
memberi nilai pada setiap taktik.



Nilai diatas digunakan untuk memberikan nilai pada suatu langkah.
Dan dengan memberi nilai pada langkah yang ada kita dapat mencari langkah
yang terbaik.


Gambar Menentukan nilai langkah


Satu kotak pada papan permainan dapat membentuk 20 macam 5 batu
segaris, yaitu 5 pada vertikal, 5 pada horizontal dan 10 pada diagonal. Oleh
karena itu pada setiap langkah kita mencari nilai dari 20 macam terbentuknya
5 batu segaris.
Setelah mencari nilai dari setiap langkah yang dapat dilakukan terakhir
dilakukan pencarian nilai terbesar

protected void searchBestMove() {

int mScore=Integer.MIN_VALUE+1;

for (int x=0;x
mScore) {

mScore=result[x][y];

bestX=x;

bestY=y;

}

}

bestScore=mScore;

}


Bila ditemukan langkah yang mempunyai nilai yang sama maka akan diacak
langkah mana yang akan diambil. Hal ini akan membuat langkah komputer
tidak monoton.

Uji Coba

Setelah pembuatan aplikasi selesai maka diperlukan pengujian aplikasi
pada berbagai macam emulator yang mensimulasikan aplikasi pada peralatan
mobile yang berbeda.
Pengujian dilakukan untuk melihat apakah permainan Gomoku dapat
berjalan dengan lancar pada berbagai peralatan yang berbeda, dan melihat apakah
penggambaran grafik pada peralatan tersebut berjalan dengan baik walaupun pada
resolusi yang berbeda-beda.

a) Default Emulator

Display Resolution 180 x 208

Canvas Resolution 180 x 177

Color Support 256 colors

Input Mechanism ITU-T Keypad






Gambar Tampilan pada default emulator


b) Nokia 7210

Display Resolution 128 x 128

Canvas Resolution 128 x 96

Color Support 4096 colors

Input Mechanism ITU-T Keypad



Gambar Tampilan pada Nokia 7210


c) Nokia seri S60

Display Resolution 176 x 208

Canvas Resolution 176 x 144

Color Support 65536 colors

Input Mechanism ITU-T Keypad



Gambar Tampilan pada Nokia seri S60


d) QwertyDevice


Display Resolution 640 x 240

Canvas Resolution 540 x 204

Color Support 256 colors

Input Mechanism Qwerty keyboard





Gambar Tampilan pada QwertyDevice


e) SonyEricsson T610


Display Resolution 127 x 160

Canvas Resolution 127 x 128

Color Support 4096 colors

Input Mechanism ITU-T Keypad



Gambar Tampilan pada T610

Pada pengujian dapat dilihat permainan Gomoku berjalan dengan baik dan
sama pada peralatan mobile yang berbeda-beda karakteristik dan resolusinya.