TUTORIAL ENGINE GAME FOR EDUCATION (EGFE) fileEGFE atau Engine Game For Education adalah salah suatu...

26
TUTORIAL ENGINE GAME FOR EDUCATION (EGFE) Conducted by : TEAM JARC VERSION 1.0 SOUTHEAST ASIAN MINISTERS OF EDUCATION ORGANIZATION SEAMEO REGIONAL OPEN LEARNING CENTER SEAMEO-SEAMOLEC 2009

Transcript of TUTORIAL ENGINE GAME FOR EDUCATION (EGFE) fileEGFE atau Engine Game For Education adalah salah suatu...

Page 1: TUTORIAL ENGINE GAME FOR EDUCATION (EGFE) fileEGFE atau Engine Game For Education adalah salah suatu engine yang dibuat ... Seperti yang terlihat pada gambar struktur EGFE di atas

TUTORIAL

ENGINE GAME FOR EDUCATION

(EGFE)

Conducted by :

TEAM JARC

VERSION 1.0

SOUTHEAST ASIAN MINISTERS OF EDUCATION ORGANIZATION

SEAMEO REGIONAL OPEN LEARNING CENTER

SEAMEO-SEAMOLEC

2009

Page 2: TUTORIAL ENGINE GAME FOR EDUCATION (EGFE) fileEGFE atau Engine Game For Education adalah salah suatu engine yang dibuat ... Seperti yang terlihat pada gambar struktur EGFE di atas

Page 1

Tutorial EGFE – JARC SEAMEO-SEAMOLEC

Pengantar

Perkembangan game khususnya di indonesia saat ini sudah semakin pesat

dimana beberapa instansi pemerintahan, SMU/SMK, sudah membuat content game

edukasi, bahkan beberapa peguruan tinggi sudah mulai membuka jurusan Game Tech.

perusahaan – perusahaan IT di Indonesia-pun banyak yang mulai mengarah pada

produksi pembuatan game. Dengan semakin bertambahnya minat masyarakat terhadap

aplikasi game khususnya game mobile, mendorong kami untuk menyediakan sebuah

engine yang dapat dipelajari dan digunakan untuk keperluan pembuatan game

sehingga lahirlah ide untuk menciptakan engine EGFE.

EGFE atau Engine Game For Education adalah salah suatu engine yang dibuat

untuk membantu para developer/programmer khususnya programmer newbie dalam

proses pembuatan aplikasi game mobile.

Dengan adanya engine ini diharapkan para developer game mobile dapat

mempersingkat waktu dalam pembuatan interface awal seperti pembuatan

SplashScreen, Main Menu, HighScore, Help, About dan beberapa tambahan utility,

sehingga developer lebih terfokus pada scenario dan game play.

Architecture Engine Game For Education

J2ME

Engine GFE

Game

Play

Resource I/O Device

Game Aplication

Splash Screen

Main Menu

Utils

Interface GFEInfo

HighScore

Page 3: TUTORIAL ENGINE GAME FOR EDUCATION (EGFE) fileEGFE atau Engine Game For Education adalah salah suatu engine yang dibuat ... Seperti yang terlihat pada gambar struktur EGFE di atas

Page 2

Tutorial EGFE – JARC SEAMEO-SEAMOLEC

Struktur Engine GFE

Seperti yang kita ketahui bersama bahwa ketika membuat class turunan dari

MIDLet maka yang harus dilakukan adalah mengimport paket

javax.microedition.midlet.* begitu juga caranya apabila seorang developer ingin

mengimplementasikan EGFE pada game yang akan di buat. EGFE di simpan dalam

package egfe sehingga untuk dapat mengakses fungsi-fungsi dari engine ini para

pengembang harus mengimport paket egfe.* Berikut ini adalah struktur engine yang di

bangun untuk mobile game.

Seperti yang terlihat pada gambar struktur EGFE di atas bahwa sudah tersedia

beberapa class yang digunakan untuk mempermudah dalam pembuatan game seperti

splash screen, main menu, penyimpanan high score, penyediaan informasi seperti info

pembuat game dan petunjuk penggunaan, fungsi pembangkitan bilangan acak dan

managemen suara. Terdapat dua buah package yaitu egfe.env untuk penyimpanan

gambar internal(khusus gambar yang digunakan dalam engine) dan egfe.utils

untuk class yang menyediakan fungsi-fungsi tambahan.

SplashScreen

Action

MainMenu

HighScore

env

utils

Images

GFERand

SoundManager

Package egfe

Struktur Engine For Game Education(EGFE)

Keterangan:

Package

Interface

Class

Implement MainMenuAction

GFEInfo

Page 4: TUTORIAL ENGINE GAME FOR EDUCATION (EGFE) fileEGFE atau Engine Game For Education adalah salah suatu engine yang dibuat ... Seperti yang terlihat pada gambar struktur EGFE di atas

Page 3

Tutorial EGFE – JARC SEAMEO-SEAMOLEC

Action

Interface Action merupakan penghubung antara beberapa class agar dapat

dijalankan dalam sebuah class lain sehingga aplikasi game dapat berjalan dengan

lancar tanpa menentukan protocol yang lebih spesifik lagi. Interface ini harus di

implementasi pada class yang membutuhkan method action untuk menjalankan suatu

event dan hanya menyediakan sebuah method yaitu action dengan sebuah parameter

bertipe integer yang digunakan sebagai rule apabila diperlukan pada saat menjalankan

method tersebut.

Interface Action di implementasi oleh class SplashScreen, MainMenu dan

GFEInfo, adapun task yang akan dijalankan di tulis di dalam method action yang telah

di override, sedangkan rule dapat ditentukan sesuai dengan kebutuhan pada saat

pemanggilan method action.

Tidak menutup kemungkinan interface Action ini di implementasi oleh class-class

yang di bangun pada saat pembuatan aplikasi game mobile untuk menjalankan task

berdasarkan rule yang ditentukan sesuai dengan kebutuhan.

action(int)

Task A

Task B

Task to-N

Task C

Rules (if)

No Rules

Page 5: TUTORIAL ENGINE GAME FOR EDUCATION (EGFE) fileEGFE atau Engine Game For Education adalah salah suatu engine yang dibuat ... Seperti yang terlihat pada gambar struktur EGFE di atas

Page 4

Tutorial EGFE – JARC SEAMEO-SEAMOLEC

SplashScreen

Dalam sebuah permainan sering muncul istilah splash screen yang merupakan

tampilan awal dari sebuah aplikasi game, ketika program melakukan proses yang

membutuhkan waktu yang relatif lama user/player akan merasa bosan menunggu

proses dengan tampilan berupa layar kosong, untuk itu diperlukan sebuah tampilan

berupa gambar yang dapat berisi informasi perusahaan pembuat, nama pembuat, logo

permainan, sehingga akan lebih menarik perhatian dari user ataupun player.

Permasalahan di atas dapat diatasi oleh class SplashScreen yang berada di

dalam package egfe.SplashScreen dengan menggunakan beberapa fungsi yang

ada di dalamnya. Berikut ini keterangan constructor dan fungsi-fungsi yang ada di

dalam class SplashScreen:

Method Keterangan

Constructor Constructor SplashScreen melewatkan sebuah parameter bertipe integer - delayTime setting selang waktu tampilan slash screen

dalam satuan detik(s)

boolean setImage(String location)

Menentukan image yang akan ditampilkan pada screen - location menentukan lokasi penyimpanan image

@ return true jika gambar ditemukan dan selain itu bernilai false

void

setNext(Display display, Action next)

Menentukan Tampilan selanjutnya setelah splash screen

mencapai waktu yang ditentukan - display untuk menampilkan next display - next action yang akan dijalankan setelah splash

screen mencapai waktu yang ditentukan

void start() Menjalankan splash screen dan akan berhenti secara otomatis apabila mencapai waktu yang ditentukan.

void stop() Menghentikan proses splash screen

void action(int action) Menjalankan aksi pada object SplashScreen

- action digunakan sebagai rule

Penggunaan splash screen pada game mobile biasanya pada saat aplikasi di

jalankan dan ketika keluar dari aplikasi game dengan jedah waktu yang tidak terlalu

lama (sekitar 1 s/d 5detik) pada saat keluar dari aplikasi, sedangkan pada saat aplikasi

pertama di jalankan disesuaikan dengan proses yang dijalankan dan biasanya

membutuhkan waktu relatif lama (setikar 5 s/d 15detik). Berikut ini adalah gambaran

umum penggunaan method yang berada di dalam class SplashScreen:

Page 6: TUTORIAL ENGINE GAME FOR EDUCATION (EGFE) fileEGFE atau Engine Game For Education adalah salah suatu engine yang dibuat ... Seperti yang terlihat pada gambar struktur EGFE di atas

Page 5

Tutorial EGFE – JARC SEAMEO-SEAMOLEC

Untuk menjalankan splash screen harus memanggil method action dengan

melewatkan parameter bertipe integer dimana parameter tidak digunakan sebagai rule,

sehingga nilai yang diberikan tidak berpengaruh terhadap taks yang akan dijalankan

dalam object ini. Berikut ini adalah potongan kode program penggunaan class

SplashScreen:

private SplashScreen splash;

…………………………………………………………………………

display = Display.getDisplay(this);

// Selang waktu 1 detik Pada saat splashscreen tampil

splash = new SplashScreen(1);

splash.setImage("/gambar/splashScreen.png");

// inisialisasi semua yang berkairtan dengan main menu

initMainMenu();

splash.setNext(display, mainMenu);

splash.action(0);

setImage

Image Background

setNext

Display to

Next Display Constructor

Set durasi detik 1 to n

action

Running SplashScreen…

Page 7: TUTORIAL ENGINE GAME FOR EDUCATION (EGFE) fileEGFE atau Engine Game For Education adalah salah suatu engine yang dibuat ... Seperti yang terlihat pada gambar struktur EGFE di atas

Page 6

Tutorial EGFE – JARC SEAMEO-SEAMOLEC

MainMenu

Setiap aplikasi game tidak luput dari main menu yang menggabungkan beberapa

informasi dalam satu tampilan untuk memberikan kemudahan kepada user saat

menjalankan aplikasi. Beberapa informasi yang sering ditampilkan di dalam main menu

diantaranya adalah start game, setting, help, about dan exit. Semua informasi tersebut

dapat di register kedalam class main menu dengan syarat class yang di daftarkan harus

mengimplementasi interface Action agar dapat di parsing oleh object main menu.

Berikut ini adalah penjelasan tentang fungsi-fungsi yang telah disediakan dalam class

MainMenu:

Method Keterangan

Constructor Constructor MainMenu melewatkan dua buah parameter bertipe Display dan String.

- display untuk menampilkan pada screen aplikasi - locationBgImage Lokasi penyimpanan gambar

yang digunakan sebagai background image

void setSleepTime (long sleepTime)

Menentukan waktu sleep dari sebuah thread dengan sebuah parameter bertipe long apabila method ini tidak digunakan maka default sleepnya adalah 20ms.

- sleepTime waktu sleep dalam satuan milidetik

long getSleepTime() Mengembalikan nilai sleep yang diset sebelumnya

void setMenu(Image

imageSubmenu[], Action nextAction[])

Mendaftarkan image dan aksi dari masing-masing sub menu

- imageSubmenu daftar image yang akan di gambar sebagai sub menu

- nextAction daftar class yang akan di jalankan

setelah memilih sub menu

void setCurrentPos(int currentPos)

Menentukan posisi sub menu yang aktif - currentPos index posisi menu

Int getCurrentPos() Mengembalikan posisi sub menu yang aktif

void

setPositionSubMenu(int xPos, int yPos)

Menentukan kooardinat awal untuk penggambaran

image submenu - xPos koordinat x

- yPos koordinat y

void setDistSubmenu(int dist)

Menentukan jarak masing-masing submenu - dist jarak submenu

void start() Menjalankan proses pada mainmenu

void stop() Menghentikan proses pada object MainMenu

void action(int action) Menjalankan aksi pada object MainMenu

- action digunakan sebagai rule

Object MainMenu dapat diintegrasikan dengan splash screen sehingga tidak

perlu lagi ada pemanggilan method action secara manual, namun apabila ingin

Page 8: TUTORIAL ENGINE GAME FOR EDUCATION (EGFE) fileEGFE atau Engine Game For Education adalah salah suatu engine yang dibuat ... Seperti yang terlihat pada gambar struktur EGFE di atas

Page 7

Tutorial EGFE – JARC SEAMEO-SEAMOLEC

melakukan langsung tampilan main menu tanpa didahului atau di integrasi dengan

splash screen maka harus memanggil method action, parameter yang dilewatkan tidak

berpengaruh terhadap task yang dijalankan karena class MainMenu tidak

mendefinisikan task didalam method action. Berikut ini adalah ilustrasi melewatkan

parameter pada method setSubmenu.

Pada saat melewatkan list imageSubmenu dan list nextAaction pada method

setSubmenu yang perlu diperhatikan adalah jumlah image dan jumlah next action,

sebagai contoh apabila terdapat 6(enam) buah sub menu maka harus terdapat 12(dua

belas) buah image dimana 6(enam) image pertama digunakan sebagai gambar off dan

selanjutnya on, sedangkan untuk list nextAction cukup mendaftarkan 6(enam) aksi saja

yang akan di register atau diinisialisasi pada masing-masing sub menu. Gambar

dibawah ini menunjukan ilustrasi fungsi method yang disediakan di dalam class

MainMenu:

ListAction ListImage on/off

Next Action A

Next Action B

Next Action C

Next Action D

Next Action E

setSubmenu

setPositionSubMenu

setDistSubmenu

setCurrentPos(1)

Active Submenu

If Fire Pressed Then

Next Action

Image Background

Page 9: TUTORIAL ENGINE GAME FOR EDUCATION (EGFE) fileEGFE atau Engine Game For Education adalah salah suatu engine yang dibuat ... Seperti yang terlihat pada gambar struktur EGFE di atas

Page 8

Tutorial EGFE – JARC SEAMEO-SEAMOLEC

Apabila di dalam list nextAction terdapat index array yang tidak di inisialisasi

maka tidak akan terjadi proses apapun ketika memilih submenu pada index

tersebut(ketika timbol fire ditekan). Berikut ini adalah potongan kode program

pembuatan object MainMenu: public void initMainMenu() {

try {

mainMenu = new MainMenu(display, "/gambar/bg_menu.png");

// Load gambar sebagai sub menu on dan off

subMenu = new Image[10];

subMenu[0] = Image.createImage("/gambar/StartGame_off.png");

subMenu[1] = Image.createImage("/gambar/score_off.png");

subMenu[2] = Image.createImage("/gambar/Help_off.png");

subMenu[3] = Image.createImage("/gambar/About_off.png");

subMenu[4] = Image.createImage("/gambar/Exit_off.png");

subMenu[5] = Image.createImage("/gambar/StartGame_on.png");

subMenu[6] = Image.createImage("/gambar/score_on.png");

subMenu[7] = Image.createImage("/gambar/Help_on.png");

subMenu[8] = Image.createImage("/gambar/About_on.png");

subMenu[9] = Image.createImage("/gambar/Exit_on.png");

…………………………………………………………………………………

// List Action Main Menu

nextDisplay = new Action[6];

nextDisplay[0] = new GamePlay(this);

nextDisplay[1] = highScore;

nextDisplay[2] = bantuan;

nextDisplay[3] = about;

nextDisplay[4] = this;

/**

* Mendaftarkan list image melalui variable submenu & actionnya

* pada nextDisplay dimana banyaknya array pada subMenu harus

* sama dengan nextDisplay

*/

mainMenu.setSubmenu(subMenu, nextDisplay);

// Set posisi awal penggambaran

mainMenu.setPositionSubMenu(50, 75);

// Set jarak masing-masing submenu

mainMenu.setDistSubmenu(40);

} catch (IOException ex) {

}

}

Page 10: TUTORIAL ENGINE GAME FOR EDUCATION (EGFE) fileEGFE atau Engine Game For Education adalah salah suatu engine yang dibuat ... Seperti yang terlihat pada gambar struktur EGFE di atas

Page 9

Tutorial EGFE – JARC SEAMEO-SEAMOLEC

HighScore

Hampir dalam setiap permainan terdapat catatan untuk tiap-tiap score yang

diraih oleh seorang player setelah memainkan sebuah game, score yang disimpan

biasanya dibatasi dalam jumlah tertentu dan hanya beberapa score tertinggi yang

ditambahkan dalam sebuah record. Class HighScore dapat melakukaan fungsi yang

telah di uraikan di atas dan melakukan penyimpanan data ni lai tertinggi dalam sebuah

RMS, class ini juga dapat diintegrasikan dengan class GFEInfo untuk menampilkan

informasi dalam bentuk grafis yang akan di bahas pada bab selanjutnya. Berikut ini

adalah keterangan fungsi-fungsi yang telah disediakan oleh class HighScore:

Method Keterangan

Constructor Constuctor HighScore melewatkan empat buah parameter.

- recordName nama record yang digunakan sebagai media penyimpanan

- rows banyaknya baris record yang akan di

simpan - cols banyaknya kolom record yang akan di

simpan - scoreIndex indeks aray untuk mendefinisikan

score(nilai)

void addScore(String[] value) Menambahkan score dalam RMS. - value data yang akan ditambahkan sebagai

record dalam bentuk array satu dimensi

String[][]

checkScore(String value[])

Memeriksa data yang ditambahkan kedalam record

- value data yang akan ditambahkan sebagai record dalam bentuk array satu dimensi

@return data array apabila layak ditambahkan kedalam record store dan selain itu null

String[][] getHighScore()

Mengembalikan score berupa array dua dimensi

void close() Menutup Record HighScore

Parameter recordName yang dilewatkan pada constructor HighScore akan

secara otomatis dibuat apabila ternyata nama record belum ada dan hak aksesnya

dibatasi hanya di dalam midlet-suite yang bersangkutan tanpa ada interferensi dari

midlet-suite yang lain guna keamanan data yang ada di dalamnya. Selain itu untuk

menambahkan data kedalam RMS sebaiknya memerikasa data terlebih dahulu apakah

layak ditambahkan atau tidak dengan cara memanggil method checkScore(…) apabila

nilai kembaliannya tidak sama dengan null maka data dapat ditambahkan melalui

method addHighScore(….). Berikut ini adalah gambar ilustrasi pembuatan object

HighScore:

Page 11: TUTORIAL ENGINE GAME FOR EDUCATION (EGFE) fileEGFE atau Engine Game For Education adalah salah suatu engine yang dibuat ... Seperti yang terlihat pada gambar struktur EGFE di atas

Page 10

Tutorial EGFE – JARC SEAMEO-SEAMOLEC

budy 100

adi 50

nina 45

rifki 30

indah 20

Parameter scoreIndex merupakan index kolom yang akan digunakan sebagai

ordering dimana nilai pada index ini harus bilangan numeric ketika menambahkan data

walaupun disimpan di dalam array bertipe String (contoh:nama[1]=”50”). Berikut ini

adalah potongan kode program untuk pembuatan object HighScore:

public void writeHighScore() {

HighScore hc = new HighScore("dbHighScore", 5, 2, 1);

String nama[] = new String[2];

nama[0] = " adi";

nama[1] = "" + score;

hc.addScore(nama);

// menampilkan isi high score

String ni[][] = hc.getHighScore();

for (int i = 0; i < ni.length; i++) {

System.out.println("");

for (int j = 0; j < ni[0].length; j++) {

System.out.print(ni[i][j]);

}

}

System.out.println("");

}

recordName

rows=5

cols=2

scoreIndex=1

String nama[] = new String[2];

nama[0] = "adi";

nama[1] = "50";

addScore(nama);

Page 12: TUTORIAL ENGINE GAME FOR EDUCATION (EGFE) fileEGFE atau Engine Game For Education adalah salah suatu engine yang dibuat ... Seperti yang terlihat pada gambar struktur EGFE di atas

Page 11

Tutorial EGFE – JARC SEAMEO-SEAMOLEC

GFEInfo

Class GFEInfo berfungsi untuk menyediakan informasi seperti tampilan about,

help dan high score dalam bentuk grafis, sehingga kelihatan lebih menarik

dibandingkan dengan menggunakan Form dari midlet. Contructor GFEInfo melewatkan

dua buah parameter yaitu Display untuk mengatur tampilan dalam aplikasi dan

Displayable untuk tampilan selanjutnya ketika ditekan tombol Back. Berikut ini adalah

list method yang tersedia di dalam class GFEInfo:

Method Keterangan

setHeader Melewatkan sebuah parameter bertipe Image yang digunkan sebagai header dalam canvas

setBody Melewatkan sebuah parameter bertipe Image yang digunkan sebagai body dalam canvas

setFooter Melewatkan sebuah parameter bertipe Image yang digunkan sebagai footer dalam canvas

setHighScore Menjadikan informasi yang ditampilkan berupa highscore - highScore object HighScore yang akan ditampilkan

- yPos posisi awal koordinat Y untuk penggambaran - xPos posisi awal koordinat X untuk penggambaran

- dist jarak antar baris score masing-masing

Class GFEInfo ini mengimplementasi Interface Action sehingga dapat dilewatkan

sebagai sebuah menu di dalam class MainMenu. Ilustrasi implementasi class GFEInfo

ini dapat di lihat pada gambar berikut ini.

Ilustrasi implementasi class GFEInfo

setHeader

setBody

setFooter

Image A

Image B

Image C

Ketika tombol Back di tekan langsung menuju keNext Display

Page 13: TUTORIAL ENGINE GAME FOR EDUCATION (EGFE) fileEGFE atau Engine Game For Education adalah salah suatu engine yang dibuat ... Seperti yang terlihat pada gambar struktur EGFE di atas

Page 12

Tutorial EGFE – JARC SEAMEO-SEAMOLEC

Setelah melihat ilustrasi pada gambar di atas maka potongan kode programnya

dapat dituliskan sebagai berikut:

// Information Help

GFEInfo bantuan = new GFEInfo(display, mainMenu);

bantuan.setHeader(Image.createImage("/gambar/Help_Header.png"));

bantuan.setBody(Image.createImage("/gambar/Help_Body.png"));

bantuan.setFooter(Image.createImage("/gambar/Back.png"));

// didaftarkan sebagai list di dalam Main Menu pada index ke 4

nextDisplay[3] = bantuan;

Pada class GFEInfo juga terdapat method setHighScore yang berfungsi untuk

menampilkan informasi high score yang melewatkan object HighScore sebagai

parameternya beserta posisi koordinat penggambarannya dalam sebuah canvas.

Berikut ini adalah ilustrasi penggunaan high score.

Implementasi class GFEInfo sebagai HighScore

setHighScore

Ketika tombol Back di tekan langsung menuju keNext Display

Nama Score

budy 100

adi 50

nina 45

rifki 30

indah 20

yPos=10

xPos = Int[]{10,120}

dist=20

List Score

Page 14: TUTORIAL ENGINE GAME FOR EDUCATION (EGFE) fileEGFE atau Engine Game For Education adalah salah suatu engine yang dibuat ... Seperti yang terlihat pada gambar struktur EGFE di atas

Page 13

Tutorial EGFE – JARC SEAMEO-SEAMOLEC

Method setHighScore meleweatkan parameter highScore yang merupakan array

dua dimensi bertipe data HighScore, data yang tampil di peroleh melalui class

HighScore dengan memanggil method getHighScore seperti yang telah diuraikan pada

pada bahasan sebelumnya. Berikut ini adalah potongan kode program untuk

pembuatan tampilan high score.

// HighScore

GFEInfo highScore = new GFEInfo(display, mainMenu);

highScore.setHeader(Image.createImage("/gambar/Score_Header.png"));

highScore.setBody(Image.createImage("/gambar/Score_Body.png"));

highScore.setFooter(Image.createImage("/gambar/Back.png"));

// Inisialisasi object high score

HighScore hc = new HighScore("dbHighScore", 5, 2, 1);

int colsPosition[] = {25, 145};

highScore.setHighScore(hc, colsPosition, 40, 20);

// didaftarkan sebagai list di dalam Main Menu pada index ke 5

nextDisplay[4] = highScore;

Page 15: TUTORIAL ENGINE GAME FOR EDUCATION (EGFE) fileEGFE atau Engine Game For Education adalah salah suatu engine yang dibuat ... Seperti yang terlihat pada gambar struktur EGFE di atas

Page 14

Tutorial EGFE – JARC SEAMEO-SEAMOLEC

GFERandom

Class GFERandom terletak pada package egfe.utils.GFERandom yang

berfungsi untuk melakukan pembangkitkan bilangan acak, class ini sangat membantu

pada saat pengacakan sekumpulan soal maupun gambar dan semua kegiatan yang

berkaitan dengan pengacakan. Class ini menghasilkan output berupa array bertipe int

yang sudah di acak. Berikut ini adalah keterangan method yang tersedia di dalam class

GFERandom.

Method Keterangan

Constructor Melewatkan sebuah parameter sebagai mode random - GFERandom.MODE1 nilai tidak ada yang duplikat

- GFERandom.MODE2 nilai boleh duplikat - GFERandom.MODE3 nilai boleh diplikat dengan syarat

ada batasan duplikatnya

void setSource(int num)

Menentukan banyaknya bilangan yang akan di acak

void

setDestination(int num) Menentukan banyaknya jumlah yang akan dihasilkan

int[] getResult() Mengembalikan nilai berupa array dengan nilai yang sudah di acak

void setMode(int mode)

Menentukan mode pengacakan - GFERandom.MODE1 nilai tidak ada yang duplikat

- GFERandom.MODE2 nilai boleh duplikat - GFERandom.MODE3 nilai boleh diplikat dengan syarat

ada batasan duplikatnya

int getMode() Mengembalikan nilai mode random yang digunakan

void setMaxDuplicate(int

duplicate)

Menentukan banyaknya kemungikan nilai yang duplikat pada saat pengacakan, bagian ini di set apabila memilih

GFERandom.MODE3

void rand() Melakukan pembangkitan bilangan acak sesuai dengan source, destination dan mode yang ditentukan

static int randomInt(int next)

Membangkitkan bilangan acak - next batas jumlah tertinggi angka yang diacak

@return ni lai bilangan acak

Metode yang digunakan dalam melakukan pengacakan pada class GFERandom

adalah dengan memanfaatkan index array dan kemudian di simpan dalam bentuk array

satu dimensi sebagai nilai outputnya, oleh sebab itu data yang akan di acak harus di

mapping terlebih dahulu ke dalam bentuk array dengan dimensi array disesuaikan

dengan kebutuhan. Berikut ini adalah gambar ilustrasi penggunaan GFERandom:

Page 16: TUTORIAL ENGINE GAME FOR EDUCATION (EGFE) fileEGFE atau Engine Game For Education adalah salah suatu engine yang dibuat ... Seperti yang terlihat pada gambar struktur EGFE di atas

Page 15

Tutorial EGFE – JARC SEAMEO-SEAMOLEC

Seperti yang terlihat pada gambar di atas bahwa parameter yang dilewatkan

pada method setSource(…) merupakan jumlah elemen array yang akan di acak dari

index 0 s/d n-1, sedangkan setDest(…) merupakan jumlah elemen array yang

dihasilkan atau dibutuhkan untuk pengambilan index array acak dengan ketentuan

sebagai berikut:

1. Apabila memilih MODE1, maka nilai yang dilewatkan pada method setDest tidak

boleh lebih dari nilai yang dilewatkan pada method setSource . 2. Apabila memilih MODE2, maka nilai yang dilewatkan pada method setDest boleh

melebihi nilai yang dilewatkan pada method setSource.

3. Apabila memilih MODE3, maka nilai yang dilewatkan pada method setDest tidak boleh lebih dari 2*nilai yang dilewatkan pada method setSource.

Secara otomatis jumlah duplikasi untuk pengacakan di set dengan nilai 2(dua) apabila memilih MODE3 dan tidak memanggil atau memberikan nilai pada method setMaxDuplicate(…). Selain itu class GFERandom menyediakan method static

untuk pengacakan yang dapat di call dengan cara GFERandom.randomInt(…)

dimana parameternya merupakan batas nilai tertinggi kemunculan data. Berikut ini adalah potongan kode program contoh penggunaan class GFERandom:

Index array yang

akan di acak 0-9

Hasil pengacakan

index array

(5 elemen)

getResult()

rand()

setSource(10)

setDest(5)

Mapping Data

Process

Selanjutnya

Page 17: TUTORIAL ENGINE GAME FOR EDUCATION (EGFE) fileEGFE atau Engine Game For Education adalah salah suatu engine yang dibuat ... Seperti yang terlihat pada gambar struktur EGFE di atas

Page 16

Tutorial EGFE – JARC SEAMEO-SEAMOLEC

// inisialisasi object

rand = new GFERandom(GFERandom.MODE1);

rand.setSource(6);

rand.setDestination(6);

………………………………………………………………………………………………………………………………

// Random jawaban yang akan ditampilkan

rand.rand();

soal = rand.getResult();

………………………………………………………………………………………………………………………………

// Mengambil image berdasarkan index yang telah diacak

imageJawaban = gpm.getImageJawaban()[gpm.getJawaban()[soal[i]]];

………………………………………………………………………………………………………………………………

// Random soal yang akan ditampilkan

indexSoalJawab = soal[GFERandom.randomInt(soal.length)];

imageSoal = gpm.getImageSoal()[indexSoalJawab];

Instantiate object yang hanya sekali di panggil pada saat pembuatan object, kemudian random jawaban yang akan di panggil apabila diperlukan pengacakan soal yang disesuaikan dengan kebutuhan melalui method rand() dan mengambil hasil

bilangan acak melalui method getResult(). Selanjutnya user dapat memproses atau menerapkan hasil bilangan acak pada suatu data yang sudah di mapping ke dalam

bentuk array baik berupa soal, gambar, dst.

Page 18: TUTORIAL ENGINE GAME FOR EDUCATION (EGFE) fileEGFE atau Engine Game For Education adalah salah suatu engine yang dibuat ... Seperti yang terlihat pada gambar struktur EGFE di atas

Page 17

Tutorial EGFE – JARC SEAMEO-SEAMOLEC

SoundManager

Bermain tanpa adanya suara merupakan hal yang dapat menyebabkan

kebosanan terhadap seorang user/player, untuk itu dibuatlah sebuah class yang khusus

menangani suara. Berikut ini adalah fungsi-fungsi yang terdapat di dalam class

SoundManager:

Method Keterangan

Constructor Melewatkan sebuah parameter berupa array dua dimensi

- listFileName Daftar lokasi penyimpanan suara dan tipe nya yang dapat berupa MIDI maupun WAV

void

setVolume(int volume)

Menentukan volume suara

- volume nilai volume suara yang akan dimainkan

void play(int index, int loopCount)

Memainkan sebuah file suara dengan menentukan index mapping datanya - index index suara yang akan dimainkan

- loopCount menentukan berapa kali suara akan dimainkan

boolean

isPlay(int index)

Memeriksa suara apakah masih di mainkan atau tidak

- index index suara yang akan di periksa @return true apabila file suara masih di mainkan

void stop(int index) Menghentikan suara

- index index suara yang akan dihentikan

SoundManager melewatkan parameter berupa array dua dimensi yang isi index

pertamnya adalah lokasi penyimpanan fi le dan index kedua adalah tipe suara yang

dapat diinisialisasi langsung dengan memanggil field static SoundManager.MIDI atau

SoundManager.WAV. Berikut ini adalah protongan kode program penggunaan class

SoundManager. //Inisialisasi suara

String a[][] = {{"/gentar.mid", SoundManager.SOUND_MIDI},

{"/explode.wav", SoundManager.SOUND_WAVE}

};

sm = new SoundManager(a);

--------------------------------------------

sm.play(0, 1); //memainkan file suara

--------------------------------------------

sm.stop(0); //Menghentikan suara

Page 19: TUTORIAL ENGINE GAME FOR EDUCATION (EGFE) fileEGFE atau Engine Game For Education adalah salah suatu engine yang dibuat ... Seperti yang terlihat pada gambar struktur EGFE di atas

Page 18

Tutorial EGFE – JARC SEAMEO-SEAMOLEC

Referensi

1. Knudsen Jonathan, 2003, Wireless Java Developing with J2ME Second Edition,

Apress Publisher.

2. Jeni Team, 2007, Modul JENI 2, Java Education Network Indonesia Center VEDC

Malang. 3. Jeni Team, 2007, Modul JENI 4, Java Education Network Indonesia Center VEDC

Malang.

Page 20: TUTORIAL ENGINE GAME FOR EDUCATION (EGFE) fileEGFE atau Engine Game For Education adalah salah suatu engine yang dibuat ... Seperti yang terlihat pada gambar struktur EGFE di atas

Page 19

Tutorial EGFE – JARC SEAMEO-SEAMOLEC

Lampiran Source Program:

Class Main /*

* @(#)Main.java 1.0

*

* Copyright 2009 SEAMEO SEAMOLEC, All rights reserved.

* Game For Education.

*/

import egfe.GFEInfo;

import egfe.SplashScreen;

import egfe.MainMenu;

import egfe.Action;

import egfe.HighScore;

import java.io.IOException;

import javax.microedition.lcdui.Display;

import javax.microedition.lcdui.Image;

import javax.microedition.midlet.*;

/**

* @author Sajarwo Anggai

* @author Abdul Rizal Adompo

* @version 1.0, 11 May 2009

*/

public class Main extends MIDlet implements Action {

private Display display;

private SplashScreen splash;

public MainMenu mainMenu;

private Image[] subMenu;

private Action[] nextDisplay;

public void startApp() {

display = Display.getDisplay(this);

// Selang Waktu 1detik Pada saat splashscreen tampil

splash = new SplashScreen(1);

splash.setImage("/gambar/splashScreen.png");

// inisialisasi semua yang berkairtan dengan main menu

initMainMenu();

splash.setNext(display, mainMenu);

splash.action(0);

}

public void initMainMenu() {

try {

mainMenu = new MainMenu(display, "/gambar/MainMenu.png");

// Load gambar sebagai sub menu on dan off

subMenu = new Image[10];

Page 21: TUTORIAL ENGINE GAME FOR EDUCATION (EGFE) fileEGFE atau Engine Game For Education adalah salah suatu engine yang dibuat ... Seperti yang terlihat pada gambar struktur EGFE di atas

Page 20

Tutorial EGFE – JARC SEAMEO-SEAMOLEC

subMenu[0] = Image.createImage("/gambar/StartGame_off.png");

subMenu[1] = Image.createImage("/gambar/score_off.png");

subMenu[2] = Image.createImage("/gambar/Help_off.png");

subMenu[3] = Image.createImage("/gambar/About_off.png");

subMenu[4] = Image.createImage("/gambar/Exit_off.png");

subMenu[5] = Image.createImage("/gambar/StartGame_on.png");

subMenu[6] = Image.createImage("/gambar/score_on.png");

subMenu[7] = Image.createImage("/gambar/Help_on.png");

subMenu[8] = Image.createImage("/gambar/About_on.png");

subMenu[9] = Image.createImage("/gambar/Exit_on.png");

// Information Help

GFEInfo bantuan = new GFEInfo(display, mainMenu);

bantuan.setHeader(Image.createImage("/gambar/Help_Header.png"));

bantuan.setBody(Image.createImage("/gambar/Help_Body.png"));

bantuan.setFooter(Image.createImage("/gambar/Back.png"));

// Information About

GFEInfo about = new GFEInfo(display, mainMenu);

about.setHeader(Image.createImage("/gambar/Help_Header.png"));

about.setBody(Image.createImage("/gambar/About_Body.png"));

about.setFooter(Image.createImage("/gambar/Back.png"));

// HighScore

GFEInfo highScore = new GFEInfo(display, mainMenu);

highScore.setHeader(Image.createImage("/gambar/Score_Header.png"));

highScore.setBody(Image.createImage("/gambar/Score_Body.png"));

highScore.setFooter(Image.createImage("/gambar/Back.png"));

HighScore hc = new HighScore("dbHighScore", 5, 2, 1);

int colsPosition[] = {25, 145};

highScore.setHighScore(hc, colsPosition, 40, 20);

// List Action Main Menu

nextDisplay = new Action[6];

nextDisplay[0] = new GamePlay(this);

nextDisplay[1] = highScore;

nextDisplay[2] = bantuan;

nextDisplay[3] = about;

nextDisplay[4] = this;

/**

* Mendaftarkan list image melalui variable submenu & actionnya

* pada nextDisplay dimana banyaknya array pada subMenu harus

sama

* dengan nextDisplay

*/

mainMenu.setSubmenu(subMenu, nextDisplay);

mainMenu.setPositionSubMenu(50, 75); // Set posisi awal

penggambaran

mainMenu.setDistSubmenu(40); // Set jarak masing-

Page 22: TUTORIAL ENGINE GAME FOR EDUCATION (EGFE) fileEGFE atau Engine Game For Education adalah salah suatu engine yang dibuat ... Seperti yang terlihat pada gambar struktur EGFE di atas

Page 21

Tutorial EGFE – JARC SEAMEO-SEAMOLEC

masing submenu

} catch (IOException ex) {

}

}

// Aksi ini akan dipanggil oleh main menu apabila terdaftar pada list

actionnya

public void action(int action) {

destroyApp(true);

}

public Display getDisplay() {

return display;

}

public void pauseApp() {

}

public void destroyApp(boolean unconditional) {

notifyDestroyed();

}

}

Class GamePlay /*

* @(#)GamePlay.java 1.0

*

* Copyright 2009 SEAMEO SEAMOLEC, All rights reserved.

* Game For Education.

*/

import egfe.utils.GFERandom;

import egfe.Action;

import egfe.HighScore;

import egfe.utils.GFEUtils;

import egfe.utils.SoundManager;

import java.io.IOException;

import java.util.Timer;

import java.util.TimerTask;

import javax.microedition.lcdui.Graphics;

import javax.microedition.lcdui.Image;

import javax.microedition.lcdui.game.GameCanvas;

import javax.microedition.lcdui.game.LayerManager;

import javax.microedition.lcdui.game.Sprite;

/**

*

* @author Sajarwo Anggai

* @author Abdul Rizal Adompo

* @version 1.0, 02 September 2009

*/

Page 23: TUTORIAL ENGINE GAME FOR EDUCATION (EGFE) fileEGFE atau Engine Game For Education adalah salah suatu engine yang dibuat ... Seperti yang terlihat pada gambar struktur EGFE di atas

Page 22

Tutorial EGFE – JARC SEAMEO-SEAMOLEC

public class GamePlay extends GameCanvas implements Action, Runnable {

private Main m;

private LayerManager lm;

private Sprite jawaban[];

private int soal[];

private int indexSoalJawab = -1;

private int currentPos = 0;

private GFERandom rand;

private Image bg_player;

private Sprite spriteSoal;

private Image imageSoal;

private Image imageJawaban;

private GamePlayMapping gpm;

private Timer t;

private Waktu task;

private boolean stop;

private int score = 0, limitQuiz = 5, countQuiz = 0;

private EndGame endGame;

private String pos[][] = {{"a", "b", "c"},

{"d", "e", "f"}};

private int position[] = new int[2];

private SoundManager sm;

public GamePlay(Main m) {

super(false);

this.m = m;

t = new Timer();

task = new Waktu();

task.setActive(false);

t.schedule(task, 1000, 1000);

endGame = new EndGame(m);

//Inisialisasi suara

String a[][] = {{"/gentar.mid", SoundManager.SOUND_MIDI},

{"/explode.wav", SoundManager.SOUND_WAVE}};

sm = new SoundManager(a);

}

public void init() {

position[0] = 0;

position[1] = 0;

lm = new LayerManager();

lm.setViewWindow(0, 0, this.getWidth(), this.getHeight() + 200);

rand = new GFERandom(GFERandom.MODE1);

rand.setSource(6);

rand.setDestination(6);

jawaban = new Sprite[6];

gpm = new GamePlayMapping();

gpm.init();

try {

bg_player = Image.createImage("/gambar/bg_player.png");

Page 24: TUTORIAL ENGINE GAME FOR EDUCATION (EGFE) fileEGFE atau Engine Game For Education adalah salah suatu engine yang dibuat ... Seperti yang terlihat pada gambar struktur EGFE di atas

Page 23

Tutorial EGFE – JARC SEAMEO-SEAMOLEC

} catch (IOException ex) {

}

}

public void loadSprite() {

// Random jawaban yang akan ditampilkan

rand.rand();

soal = rand.getResult();

int x = 0, y = 80;

for (int i = 0; i < jawaban.length; i++) {

imageJawaban = gpm.getImageJawaban()[gpm.getJawaban()[soal[i]]];

if (jawaban[i] == null) {

jawaban[i] = new Sprite(imageJawaban);

jawaban[i].setVisible(true);

jawaban[i].setPosition(x, y);

} else {

lm.remove(jawaban[i]);

jawaban[i].setImage(imageJawaban, imageJawaban.getWidth(),

imageJawaban.getHeight());

}

lm.append(jawaban[i]);

if ((i + 1) % 3 == 0) {

x = 0;

y += 80;

} else {

x += 80;

}

}

// Random soal yang akan ditampilkan

indexSoalJawab = soal[GFERandom.randomInt(soal.length)];

imageSoal = gpm.getImageSoal()[indexSoalJawab];

if (spriteSoal == null) {

spriteSoal = new Sprite(imageSoal);

spriteSoal.setVisible(true);

spriteSoal.setPosition(70, 265);

} else {

lm.remove(spriteSoal);

spriteSoal.setImage(imageSoal, imageSoal.getWidth(),

imageSoal.getHeight());

}

lm.append(spriteSoal);

}

public void draw(Graphics g) {

g.setColor(255, 255, 255);

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

g.drawImage(bg_player, 0, 0, 0);

g.setColor(0, 0, 0);

g.drawString("" + score, 120, 40, 0);

g.drawString("" + task.getCount() + "s", 185, 40, 0);

lm.paint(g, 0, 0);

Page 25: TUTORIAL ENGINE GAME FOR EDUCATION (EGFE) fileEGFE atau Engine Game For Education adalah salah suatu engine yang dibuat ... Seperti yang terlihat pada gambar struktur EGFE di atas

Page 24

Tutorial EGFE – JARC SEAMEO-SEAMOLEC

g.drawRect(position[1] * 80, position[0] * 80 + 80, 80, 80);

if (task.getCount() <= 0) {

stop = true;

task.setActive(false);

writeHighScore();

sm.stop(0); //Menghentikan suara

endGame.action(0);

}

}

protected void keyReleased(int keyCode) {

GFEUtils.checkPointerPosition(pos, position, 1, 1, keyCode);

if (keyCode == KEY_NUM5) {

//sm.play(1, 1);

countQuiz++;

if (countQuiz >= 5) {

stop = true;

task.setActive(false);

writeHighScore();

sm.stop(0);

endGame.action(0);

} else {

score += 15;

this.action(1);

task.setCount(20);

task.setActive(true);

}

}

}

public void run() {

Graphics g = getGraphics();

while (!stop) {

draw(g);

flushGraphics();

try {

Thread.sleep(50);

} catch (InterruptedException ex) {

}

}

}

public void writeHighScore() {

HighScore hc = new HighScore("dbHighScore", 5, 2, 1);

String nama[] = new String[2];

nama[0] = "adi";

nama[1] = "" + score;

hc.addScore(nama);

// menampilkan isi high score

String ni[][] = hc.getHighScore();

for (int i = 0; i < ni.length; i++) {

System.out.println("");

for (int j = 0; j < ni[0].length; j++) {

System.out.print(ni[i][j]);

Page 26: TUTORIAL ENGINE GAME FOR EDUCATION (EGFE) fileEGFE atau Engine Game For Education adalah salah suatu engine yang dibuat ... Seperti yang terlihat pada gambar struktur EGFE di atas

Page 25

Tutorial EGFE – JARC SEAMEO-SEAMOLEC

}

}

System.out.println("");

}

public void action(int action) {

stop = false;

if (action == 0) {

score = 0;

countQuiz = 0;

sm.play(0, 1); //memainkan file suara

m.getDisplay().setCurrent(this);

setFullScreenMode(true);

new Thread(this).start();

}

init();

loadSprite();

task.setCount(20);

task.setActive(true);

}

}

class Waktu extends TimerTask {

private int count = 10;

private boolean active;

public void run() {

if (active) {

count--;

}

}

public void setCount(int count) {

this.count = count;

}

public int getCount() {

return count;

}

void setActive(boolean active) {

this.active = active;

}

}