Panduan 5

Fungsional Brantem

Bab ini akan menjelaskan secara terperinci class-class yang terdapat dalam Brantem serta cara memakainya.
Tujuan : Mengetahui class yang ada pada framework Brantem, apa kegunaannya, dan bagaimana cara pemakaiannya.
collapse/expand

Setelah kita dapat menjalankan kerangka dasar dari sebuah game (game kosong) pada bab sebelumnya, saatnya untuk mengutilisasi class dari Brantem untuk membuat game yang sebenarnya!.

Brantem memiliki beberapa class yang berhubungan langsung dengan programer, dalam pembuatan game duel, antara lain :

  1. Abstract Class Battle
    Programer harus menurunkan class Battle dan mengimplementasikan semua fungsionalitas yang ada untuk memulai pembuatan game duel.
  2. Class ScoreBean
    Class ini berfungsi sebagai class penampung atribut papan nilai, mulai dari tampilan papan nilai, sampai counter waktu yang dibutuhkan dalam setiap pertarungan.
  3. Abstract Class Arena
    Programer harus menurunkan class Arena dan mengimplementasikan semua fungsionalitas yang ada. Yang antara lain berupa inisialisasi konfigurasi pertarungan, inisialisasi latar belakang serta musik pengantar.
  4. Class ConfigBean
    Class ini berfungsi sebagai class penampung konfigurasi pertarungan, seperti jumlah ronde pertarungan, tombol pause dan teks pesan yang muncul di layar.
  5. Class MessageBean
    Menampung teks pesan yang tampil dalam game pertarungan serta suara yang menyertai pemunculan teks pesan.
  6. Class SpriteBean
    Sama halnya dengan ScoreBean, SpriteBean juga berfungsi untuk menampung informasi mengenai animasi pemain, gambar latar belakang
  7. Class SoundBean
    Menyimpan seluruh informasi mengenai suara yang di gunakan dalam game.
  8. Abstract Class Duel
    Programer harus menurunkan class Duel dan mengimplementasikan semua fungsionalitas yang ada. Yang antar lain berupa inisialisasi pemain, tombol navigasi serta teks pesan.
  9. Abstract Class Fighter
    Programer harus menurunkan class Fighter dan mengimplementasikan semua fungsionalitas yang ada. Class Fighter berisi seluruh fungsionalitas animasi dari suatu karakter.
  10. Class KeyBean
    Class ini menampung informasi tombol navigasi pemain yang bisa di bagi menjadi 3 kelompok besar, arah, pukulan dan tendangan.
  11. Kumpulan Class Animasi
    Class ini berisi atribut animasi gerakan karakter. Atribut animasi karakter berbeda-beda, tergantung jenis animasi itu sendiri. Contoh animasi loncat memiliki attribute koordinat vertikal untuk menentukan lokasi penggambaran karakter, sedangakan animasi berdiri tidak membutuhkan attribute koordinat vertikal

Dengan class-class yang telah di definisikan di atas, kita sudah bisa memulai membuat game duel. Selanjutnya kita akan mencoba untuk membuat game duel berdasarkan program demo yang ada di http://www.geocities.com/elvino_tan/games/sf.htm

Catatan : Program di bawah ini merupakan potongan-potongan program dari demo Brantem, untuk lengkapnya anda bisa mendownload. Dan potongan-potongan program ini menekankan pada pemakaian framework Brantem.

DemoGame.java

Karena BattleEngine, yang kita gunakan dalam framework barantem, merupakan turunan dari GameObject maka di perlukan GameEngine sebagai fondasi awal menjalankan game. Programer harus mengetahui konsep dan cara kerja GameEngine terlebih dahulu, panduan mengenai GameEngine dapat di peroleh di http://goldenstudios.or.id/index.php
public class DemoGame extends GameEngine{
  // deklarasi variable
  public static final String FILE_LOGO = "com/sf/resource/sprite/logo.jpg";
  public static final String FILE_SMALL_FONT = "com/sf/resource/sprite/smallFont.png";
  public static final ........
  ....

  // bagian dari game DemoGame
  public GameObject getGame(int id) {
    switch (id) {
    case : .....
    case PLAY_KEN : { 
	  ......
	  return new BattleEngine(this, new StreetFighter(this));
	  }
	     	........				  
    }
  }
  
  // jalankan program DemoGame  
  public static void main(String[] args) {  
    GameLoader loader = new GameLoader();
    loader.setup(new DemoGame(), new Dimension(350, 190), false);
    loader.start();
  }  
}
Keterangan : GameEngine di gunakan untuk memecah bagian berdasarkan fungsinya, dari program di atas kita bisa lihat apabila variable id di method getGame, memiliki nilai yang sama dengan PLAY_KEN maka class BattleEngine akan di bentuk dengan parameter class StreetFighter dan class DemoGame. Dan agar program kita bisa berjalan jangan lupa untuk menambahkan public static void main

StreetFighter.java

Class StreetFighter harus merupakan turunan dari Class Battle, dan harus mengimplementasikan 1 constructor dan 3 method
public class StreetFighter extends Battle{
  // deklarasi variable
  private GameEngine gameEngine;

  // bagian dari game DemoGame
  public StreetFighter(GameEngine gameEngine) {
    this.gameEngine = gameEngine;
  }
  
  // inisialisasi papan nilai
  public ScoreBean initScoreBoard() {
    return new ScoreBean(130, 99, 5, Color.GRAY, Color.YELLOW, Color.GRAY, 0, 0);
  }

  // inisialisasi pertarungan
  public Arena initArena() {
    return new SFBattleAreana();
  }

  // dipanggil apabila pertarungan telah selesai
  public void finish() {
    gameEngine.nextGameID = DemoGame.TITLE;
  }
}
Keterangan : Pertama-tama kita harus membuat konstruktor dengan parameter gameEngine, gameEngine ini akan di pakai di method finish(), yaitu menentukan langkah selanjutnya yang akan di ambil, apabila pertarungan telah selesai. Method initScoreBoard() bertujuan untuk pembuatan papan nilai pertarungan, untuk ke dua pemain, untuk keterangan masing2 parameter dapat di lihat di dokumentasi Brantem. Method initArena() bertujuan untuk inisialisasi konfigurasi permainan

SFBattleAreana.java

Class SFBattleAreana merupakan turunan dari Class Arena dan harus mengimpementasikan 4 method antara lain : initBackground(), initMusic(), initDuel() dan initConfig()
public class SFBattleAreana extends Arena{
  // inisialisai latar belakang
  public SpriteBean initBackground() {
    return new SpriteBean("com/sf/resource/sprite/bg.png", 1, 4);
  }
  
  // inisialisai musik pengantar
  public SpriteBean initMusic() {
    return new SoundBean("com/sf/resource/sound/Music1.mid");
  }  
  
  // inisialisasi petarung, tombol dan teks pesan
  public Duel initDuel() {
    return new SFDuel();
  }    
  
  // konfigurasi teks pesan dan permainan seperti jumlah ronde
  public ConfigBean initConfig() {
    MessageBean messageBean = new MessageBean();
    messageBean.setDrawMsg("Draw", "com/sf/resource/sound/Fire.wav");
    .........
    return new ConfigBean(3, 2, KeyEvent.VK_PAUSE, messageBean);
  }      
}
Keterangan : Class ini merupakan class konfigurasi. Method initBackground() berfungsi untuk inisialisasi latar belakang permainan, sama halnya dengan initMusic() yang merupakan inisialisasi musik pengantar. Method initDuel() merupakan class konfigurasi pula yang akan kita bahas setelah ini. Method initConfig() merupakan konfigurasi pemainan

SFDuel.java

Class SFDuel merupakan turunan dari Class Duel dan harus mengimpementasikan 6 method antara lain : initFighter1(), initFighter2(), initBigFont(), initSmallFont(), initKeyPlayer1() dan initKeyPlayer2()
public class SFDuel extends Duel{
  // inisialisai animasi pemain 1
  public Fighter initFighter1() {
    return new Ken();
  }
  
  // inisialisai animasi pemain 2  
  public Fighter initFighter2() {
    ....
  }
  
  // inisialisasi teks pesan ukuran besar
  public SpriteBean initBigFont() {
    return new SpriteBean("com/sf/resource/sprite/bigFont.png", 8, 12);
  }  
  
  // inisialisasi teks pesan ukuran kecil
  public SpriteBean initSmallFont() {
    .......
  }  
  
  // inisialisasi tombol pemain 1
  public KeyBean initKeyPlayer1() {
    KeyBean bean = new KeyBean();
    bean.setDirection(KeyEvent.VK_W, KeyEvent.VK_S, KeyEvent.VK_A, KeyEvent.VK_D);
    bean.setActionPunch(KeyEvent.VK_R, KeyEvent.VK_T, KeyEvent.VK_Y);
    bean.setActionKick(KeyEvent.VK_F, KeyEvent.VK_G, KeyEvent.VK_H);
    return bean;
  }      
  
  // inisialisasi tombol pemain 2
  public KeyBean initKeyPlayer2() {
    .......
  }        
  
  // bila pemain 2 bukan komputer ini harus return null
  public FighterAI initPlayerAI() {
    return new SFAI();
  }          
}
Keterangan : Class ini merupakan class konfigurasi. Animasi pemain 1 dan pemain 2 yang di inisialisasikan melalui method initFighter1() dan initFighter2(). Inisialisasi teks pesan di bagi menurut ukuran dari font yaitu teks pesan besar dan teks pesan kecil melalui method iniBigFont() dan initSmallFont(). Dan juga konfigurasi tombol pemain 1 dan 2 melalui method initKeyPlayer1() dan initKeyPlayer2()

Ken.java

Class Ken merupakan turunan dari Class Fighter yang mengimplementasikan seluruh kemungkinan animasi karakter. Di class ini lah segala sesuatu mengenai karakter di definisikan
public class Ken extends Fighter{
  // posisi letak koordinat Y pemain 
  public int getYCoordinate() {
    return  75;
  }
  
  // nama karakter pemain  
  public String getName() {
    return  "KEN";
  }
  
  // inisialisasi animasi pemain
  public SpriteBean[] initResource() {
    SpriteBean[] resource = new SpriteBean[3];
    resource[0] = new SpriteBean("com/sf/resource/sprite/character/kenSB.png", 1, 1);    
    resource[0]	= .......
    return resource;
  }  
  	
  // inisialisasi kombinasi tombol, umumnya untuk mengeluarkan ilmu  	
  public AdvanceKeyCapture[] initCaptureKeys(BaseInput baseInput, KeyBean keyBean) {
    AdvanceKeyCapture[] arrayKey = new AdvanceKeyCapture[9];
    int[] punchMagic = new int[]{keyBean.getLeft(), keyBean.getDown(), keyBean.getLeft()};		
    int[] punchMagic = ....
    ................
    arrayKey[0] = new AdvanceKeyCapture(baseInput, punchMagic, 1000, 
                  keyBean.getWeakPunch(), Controls.DIRECTION_UP, Controls.STATUS_SPECIAL1);
    arrayKey[1] = .......
    ................
    return arrayKey;		
  } 

  // salah satu contoh animasi sprite  	
  public IntroSprite doIntro(BufferedImage[] bufferedImages) {
    int[] frames = new int[] {1};
    double[] horizontal = new double[] {0};
    return new IntroSprite(bufferedImages, medium, frames, horizontal, 
               "com/sf/resource/sound/Action.wav");
  }  
  
  public StandSprite doStand(BufferedImage[] bufferedImages) {
    ..................
  }
  
  ....................
}
Keterangan : Class ini merupakan representasi dari karakter pemain, yang terdiri koordinat Y pemain, nama karakter pemain, resource animasi pemain, kombinasi tombol pemain serta animasi pemain.

Sampai sini, anda sebagai programer sudah bisa membuat game duel, bagaimana cukup simple dan cepet bukan ?
Selanjutnya kita akan membahas masing-masing parameter yang ada di masing-masing class yang berhubungan dengan programer, atau bisa juga lihat dokumentasi framework Brantem.

class :: ScoreBean

Constructor:
   public ScoreBean(int barLength, int counter, int scoreHight, Color borderColor, Color barColor, 
   		    Color barBgColor, int P1PictureIndex, int p2PictureIndex) {}

   dimana :
	barLength       = Panjang papan nilai
	counter         = Waktu yang di sediakan per ronde
	scoreHight      = Tinggi papan nilai
	borderColor     = Warna pinggir papan nilai
	barColor        = Warna papan nilai
	barBgColor      = Warna belakang papan nilai
	P1PictureIndex 	= Index gambar pemain 1
	P2PictureIndex 	= Index gambar pemain 2
	

class :: SpriteBean

Constructor:
   public SpriteBean(String file, int colums, int rows) {}

   dimana :
	file   = Lokasi file
	colums = Jumlah kolom 
	rows   = Jumlah baris
	

class :: SoundBean

Constructor:
   public SoundBean(String file) {}

   dimana :
	file   = Lokasi file
	

class :: MessageBean

Method:
   public void setXXXMsg(String message, String sound) {}

   dimana :
	message = Teks pesan 
	sound   = Lokasi file suara
	

class :: ConfigBean

Constructor:
   public void ConfigBean(int rounds, int bgSpeed, int pause, MessageBean messageBean) {}

   dimana :
	rounds       = Jumlah ronde dalam pertarungan
	bgSpeed      = Kecepatan horisontal gerak latar belakang
	pause	     = Tombol untuk fungsi pause
	messageBean  = Teks pesan dan suara yang tampil dan terdengar dalam pertarungan
	

class :: KeyBean

Method:
   public void setDirection(int up, int down, int left, int right) {}
   dimana :
	up    = tombol atas atau lompat	
	down  = tombol bawah atau jongkok
	left  = tombol kiri atau jalan mundur
	right = tombol kiri atau jalan maju
	

   public void setActionPunch(int weakPunch, int mediumPunch, int strongPunch) {}
   dimana :
	weakPunch    = tombol pukulan lemah
	mediumPunch  = tombol pukulan menengah 
	strongPunch  = tombol pukulan kuat 
		

   public void setActionKick(int weakKick, int mediumKick, int strongKick) {}
   dimana :
	weakKick    = tombol tendangan lemah	
	mediumKick  = tombol tendangan menengah 
	strongKick  = tombol tendangan kuat
			

class :: AdvanceKeyCapture

Constructor:
   public AdvanceKeyCapture(BaseInput baseInput, int[] keys, int time, int key, int dir, int stat) {}
   dimana :
	baseInput = Tombol Listener dari class GTGE
	keys      = Tombol kombinasi arah
	time      = Batas waktu untuk melakukan kombinasi arah
	key       = Tombol status
	dir       = Arah
	stat      = Status
	

Karena jumlah animasi sprite terlalu banyak, maka di ambil salah satu contoh saja, namun representasi parameter sama dengan class animasi lainnya
class :: SpecialAttackSprite

Constructor:
   public SpecialAttackSprite(BufferedImage[] bufferedImages, Timer timer, int[] frames, int hitPoint, 
                              int[] attack, double[] horizontal, double[] vertical, 
                              boolean isAttackSprite, MagicSprite magicSprite, String soundPath) {}

   dimana :
	bufferedImages  = Kumpulan gambar karakter
	timer           = Waktu animasi karakter
	frames	        = Nomor array yang di pilih
	hitPoint        = Nilai serangan
	attack          = Nomor array serangan
	horizontal      = Kecepatan horisontal
	vertical        = Koordinat vertikal, notes : ini bukan kecepetan vertikal
	isAttackSprite  = Apakah animasi ini animasi serangan
	magicSprite     = Animasi ilmu
	soundPath       = Lokasi file suara
	


Kesimpulan :

  • Hanya dengan sedikit file konfigurasi, programer sudah bisa membuat game duel.
  • Konfigurasi class di buat sesimple dan sedikit mungkin.
  • Selamat mencoba and happy gaming

Referensi : Brantem dokumentasi, Brantem demo source code

Brantem is copyright © 2006 Elvino Tan. All rights reserved.
GTGE and this site template is copyright © 2003-2005 Golden T Studios. All rights reserved. Use is subject to license terms.
GoldenStudios.or.id
Halaman 5 dari 6