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 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 Game Aplication Engine GFE GFEInfo Interface HighScore Game Play Main Menu Utils Splash Screen ...
TUTORIAL ENGINE GAME FOR EDUCAT ION (EGFE) Conducted by : TEAM JARC VERSION 1.0 SOUTHEAST ASIAN MINISTERS OF EDUCATION ORGANIZATION SEAMEO REGION AL OPEN LEARNING CENTER SEAMEO-SEAMOLEC 2009
Pengantar Perkembangan game khususnya di indonesia saat ini sudah semakin pesat dimana beberapa instansi pemeri ntahan, SMU/SMK, sudah membuat content game edukasi, bahkan beberapa peguruan tinggi sudah mulai membuka jurusan Game Tech. perusahaan– mengarah pada mulai yang IT di Indonesia-pun banyak perusahaan produksi pembuatan game. Dengan semakin bertambahnya minat masyarakat terhadap aplikasi game khususnya game mobile, mendorong kami untuk menyediakan sebuah engine yangdapat 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 programmernewbiedalam proses pembuatan aplikasi game mobile. Dengan adanya engi ne ini diharapkan para developer game mobile dapat mempersingkat waktu dalam pembuatan i nterface 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 Game Aplication Engine GFE E Interface HighScore Game Main Menu Play Utils Splash Screen DeviceResource I/O J2ME
Page 1
Tutorial EGFE–JARC SEAMEO-SEAMOLEC
Struktur Engine GFESeperti 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 i ngin mengimplementasikan EGFE pada game yang akan di buat. EGFE di simpan dalam packageegfesehi ngga untuk dapat mengakses fungsi-fungsi dari engi ne ini para pengembang harus mengimport paketegfe.* Berikut i yang di ne adalah struktur engi ni bangun untuk mobile game. Struktur Engine For Game Education(EGFE)Packa e e env Action S lashScre Images p en utils MainMenuHighSGFERandcore GFEInfo SoundManager Keterangan:Package Interface Clas s Implement MainMenuAction yang terlihat pada gambar struktur EGFE di atas bahwa sudah tersediaSeperti beberapa class yang digunakan untuk mempermudah dalam pembuatan game seperti splash screen, main menu, penyimpanan high score, penyediaan informasi seperti i nfo pembuat game dan petunjuk penggunaan, fungsi pembangkitan bilangan acak dan managemen suara . Terdapat dua buah package yaituegfe.envuntuk penyimpanan gambar internal(khusus gambar yang digunakan dalam engi ne) danegfe.utilsuntuk class yang menyediakan fungsi-fungsi tambahan. Page 2 Tutorial EGFE–JARC SEAMEO-SEAMOLEC
Action Interface Action merupakan penghubung antara beberapa class agar dapat dijalankan dalam sebuah class lain sehi ngga aplikasi game dapat berjalan dengan lancar tanpa menentukan protocol yang lebih spesifik lagi. Interface i ni 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. Task A No Rules Task B action i nt C Task (if) Rules Task to-N MainMenu danInterface Action di implementasi oleh class SplashScreen, 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 i ni di implementasi oleh class-class yang di bangun pada saat pembuatan aplikasi game mobile untuk menjalankan task berdasarkan rule yang ditentukan sesuai dengan kebutuhan.
Page 3
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, sehi ngga akan lebih menarik perhatian dari user ataupun player. Permasalahan di atas dapat diatasi oleh class SplashScreen yang berada di dalam packageegfe.SplashScreen yang dengan menggunakan beberapa fungsi 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 -delayTimesetti ng selang waktu tampilan slash screen dalam satuan detik s boolean Menentukan image yang akan ditampilkan pada screen setImage(String location) -locationmenentukan lokasi penyimpanan image @return true jika gambar ditemukan dan selain itu bernilai false void Menentukan Tampilan selanjutnya setelah splash screen setNext(Display display, mencapai waktu yang ditentukan Action next) -displayuntuk menampilkan next display -nextaction yang akan dijalankan setelah splash screen menca ai waktu an 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 rule ai sebadi unakan 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 i ni adalah gambaran umum penggunaan method yang berada di dalam class SplashScreen: Page 4
Tutorial EGFE–JARC SEAMEO-SEAMOLEC
setIma e
Image Background
ConstructorSet durasi detik 1 to n Running SplashScreen…
setNext
Display to Next Display
acti onUntuk 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);
Page 5
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, setti ng, 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 i ni adalah penjelasan tentang fungsi-fungsi yang telah disediakan dalam class MainMenu: Method Constructor
Keterangan Constructor MainMenu melewatkan dua buah parameter bertipe Display dan Stri ng. display untuk menampilkan pada screen aplikasi --locationBgImageLokasi penyimpanan gambar yang digunakan sebagai background image void setSleepTimeMenentukan waktu sleep dari sebuah thread dengan (long sleepTime) sebuah parameter bertipe long apabila method i ni tidak digunakan maka default sleepnya adalah 20ms. -slee Time dalamwaktu slee satuan milidetik lon etSlee Time Men embalikan nilai slee an diset sebelumn a void Mendaftarkan image dan aksi dari masing -masing setMenu(Image sub menu imageSubmenu[], Action -imageSubmenu di yang akandaftar image nextAction[]) gambar sebagai sub menu -nextActiondaftar class yang akan di jalankan setelah memilih sub menu void Menentukan posisi sub menu yang aktif setCurrentPos(int currentPos) -currentPosindex posisi menu Int getC urrentPos() Mengembalikan posisi sub menu yang aktif void Menentukan kooardinat awal untuk penggambaran setPositionSubMenu(i nt xPos, image submenu int yPos) -xPos xkoordi nat Poskoordi nat -void Menentukan jarak masing -masing submenu setDistSubmenu(int dist) -distjarak submenu void start() Menjalankan proses pada mainmenu void stop() Menghentikan proses pada object MainMenu void action(int action) Menjalankan aksi pada object MainMenu -actiondi unakan rule seba ai Object Mai nMenu dapat diintegrasikan dengan splash screen sehingga tidak perlu lagi ada pemanggilan method action secara manual, namun apabila ingin Page 6
Tutorial EGFE–JARC SEAMEO-SEAMOLEC
ListImage on/off
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 mendefi nisikan task didalam method action. Berikut ini adalah ilustrasi melewatkan parameter pada method setSubmenu. setSubmenuListActionNext Action A Next Action B Next Action C Next Action D Next Action E 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: setPositionSubMenusetCurrentPos 1Page 7
Image Background If Fire Pressed Then Next Action Active S ubmenu setDistSubmenu
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 8
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 i ni juga dapat diintegrasikan dengan class GFE Info untuk menampilkan informasi dalam bentuk grafis yang akan di bahas pada bab selanjutnya . Berikut i ni adalah keterangan fungsi-fungsi yang telah disediakan oleh class HighScore: Method Keterangan Constructor Constuctor HighScore melewatkan empat buah parameter. -recordName digunakannama record yang sebagai media penyimpanan -rowsbanyaknya baris record yang akan di simpan -cols dibanyaknya kolom record yang akan simpan -scoreIndex nisikanindeks aray untuk mendefi score(nilai) void addScore(Stri ng[] value) Menambahkan score dalam RMS. -valuedata yang akan ditambahkan sebagai record dalam bentuk array satu dimensi String[][] Memeriksa data yang ditambahkan kedalam record checkScore(Stri ng value[]) -valuedata yang akan ditambahkan sebagai record dalam bentuk array satu dimensi @return data array apabila layak ditambahkan kedalam record store dan selai n itu null String[][]re()MengembalikanscoreberupaarrayduadimensigetHighSco void close Menutu Record Hi hScore 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 i nterferensi dari midlet-suite yang lain guna keamanan data yang ada di dalamnya. Selai n 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 i ni adalah gambar ilustrasi pembuatan object HighScore: Page 9
cols=2 Parameter scoreIndex merupakan index kolom yang akan digunakan sebagai ordering dimana nilai pada index i ni harus bilangan numeric ketika menambahkan data walaupundisimpan di dalam array bertipe String (contoh:nama[1]=”50”). Berikut ni i 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(""); }