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 (“
permainan tradisional dari Jepang yang biasa dimainkan pada papan berukuran
19x19. Permainan ini dimainkan oleh dua orang dan pemenangnya adalah yang
lebih dahulu membentuk
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.
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
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
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");
fAbout = new Form("Gomoku About");
}
Alokasi memori dilakukan dengan bentuk umum:
nama_variabel = new type_variabel(argument1, argument2, ....);
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.
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.
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.
Papan permainan
Penggambaran papan permainan pada layar merupakan tanggung
jawab dari kelas Board yang berada pada file Board.java. Flowchart dari kelas
Board:
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.
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.
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;
}
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.
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=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
Canvas Resolution 180 x 177
Color Support 256 colors
Input Mechanism ITU-T Keypad
Display Resolution 128 x 128
Canvas Resolution 128 x 96
Color Support 4096 colors
Input Mechanism ITU-T Keypad
c) Nokia seri S60
Display Resolution 176 x 208
Canvas Resolution 176 x 144
Color Support 65536 colors
Input Mechanism ITU-T Keypad
d) QwertyDevice
Canvas Resolution 540 x 204
Color Support 256 colors
Input Mechanism Qwerty keyboard
e) SonyEricsson T610
Display Resolution 127 x 160
Canvas Resolution 127 x 128
Color Support 4096 colors
Input Mechanism ITU-T Keypad
Pada pengujian dapat dilihat permainan Gomoku berjalan dengan baik dan
sama pada peralatan mobile yang berbeda-beda karakteristik dan resolusinya.





















Tidak ada komentar:
Posting Komentar