Pembuatan Aplikasi Game Sederhana pada HandPhone menggunakan J2ME

Pada Kesempatan kali ini, saya ingin memberikan referensi kepada kawan-kawan sekalian untuk pembuatan game sederhana menggunakan J2ME (Java2 Micro Edition). Banyak sekali aplikasi-aplikasi yang dapat di buat melalui bahasa pemrograman java dan aplikasi yang dihasilkan pun sangat menarik dan bervariasi tergantung selera dari programmer yang membuat aplikasi tersebut…

Aplikasi game yang saya buat ini merupakan aplikasi sederhana yang masih perlu utk kawan-kawan kembangkan lagi untuk menjadi aplikasi yang lebih sempurna lagi…..Silahkan mencoba, & tunjukan kreatifitas kawan-kawan……OYI……!!!!!!!!!!!!!!!

Sebelum masuk ke langkah-langkah pembuatan Aplikasi game ini, saya akan menunjukan tampilan akhir dari game yang akan kita buat ini, hasilnya adalah sebagai berikut :

Game

Game

Setelah teman-teman mengetahui hasil akhir dari program tersebut, maka ada beberapa hal yang harus dipersiapkan , yaitu :

  • Background yang dibuat 2 kali dari tinggi layar yang berfungsi sebagai langit yang disimpan dengan nama daratan.gif

daratan.gif

daratan.gif

  • file music yang berupa format wav (digunakan untuk suara pada saat pesawat meledak dan music pada background) yang terdiri dari explode.wav dan background.wav

Setelah semua yang harus disiapkan selesai, maka untuk langkah-langkah pembuatannya, adalah sebagai berikut :

Langkah pertama yang akan dilakukan adalah membuat sebuah MIDlet untuk menampilkan berbagai tipe choice dan implementasinya pada List. langkah yang di lakukan pertama kali yaitu :

  • membuka aplikasi Wireless Toolkit 2.5.1 pada komputer kita, jika kawan-kawan belum meilikinya, bisa di download di sini. setelah itu, di install di komputermasing-masing,
  • setelah masuk ke dalam aplikasi Wireless Toolkit 2.5.1, lalu klik pada menu new project seperti pada gambar berikut :

New Project

New Project

  • Setelah itu isi pada “Project name” dan “MIDlet name” dengan nama PlaneSpace:
API

API

  • Selanjutnya pada “API Selection”, pilih JTWI pada Target Platform, setelah itu OK:

  • Kita telah selesai dalam pembuatan project baru, selanjutnya silahkan buka notepad, kita akan membuat kelas Plane Space.java dan kelas Play.java, source code dari masing-masing kelas adalah sebagai berikut :

Class PlaneSpace.java:

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

import javax.microedition.media.*;

import javax.microedition.media.control.*;

 

public class PlaneSpace     extends MIDlet implements PlayerListener {

private Play play;

private Display display;

private static Player player;

private VolumeControl vc;

public PlaneSpace() {

display = Display.getDisplay(this);

}

 

public void startApp() {

try {

playMedia(“background.wav”);

} catch (Exception e) {

e.printStackTrace();

}

play = new Play(this, display, player);

play.setFullScreenMode(true);

display.setCurrent(play);

new Thread(play).start();

}

 

public void pauseApp() {}

 

public void destroyApp(boolean unconditional) {

if(player != null){

player.close();

}

}

 

public void exitMIDlet() {

destroyApp(false);

notifyDestroyed();

}

 

private void playMedia(String file)

throws Exception {

player = Manager.createPlayer(getClass().getResourceAsStream(file), “audio/x-wav”);

player.addPlayerListener(this);

player.setLoopCount(-1);

player.prefetch();

player.realize();

vc = (VolumeControl)player.getControl(“VolumeControl”);

if (vc != null)

vc.setLevel(30);

 

player.start();

}

 

public void playerUpdate(Player player, String event, Object eventData) {

if(event.equals(PlayerListener.STARTED) &&

new Long(0L).equals((Long)eventData)) {

} else if(event.equals(PlayerListener.CLOSED)) {

}

}

};

 

Class Play.java

 

import javax.microedition.lcdui.*;

import javax.microedition.io.*;

import javax.microedition.media.*;

import javax.microedition.media.control.*;

 

import java.io.*;

import java.util.Random;

 

class Play extends Canvas implements CommandListener, Runnable, PlayerListener {

 

private PlaneSpace midlet;

private Display display;

private Command cmExit;

private int y = 0;

private int px = 76;

private int py = 180;

private boolean yes = true;

private String bgImgN = “/daratan.gif”;

private Image bgImg = null;

private int randRange = 20;

private int[] bombX = new int[randRange];

private int[] bombY = new int[randRange];

private int xScreen = 176;

private int yScreen = 208;

private int ySkyEdge = 500;

private int hplane = 23;

private int wplane = 21;

private int bombAmount = 0;

private int whbomb = 15;

private boolean first = true;

private int minIndex = 0;

private Random random;

private boolean gameover = false;

private Player player;

private VolumeControl vc;

private int gauge = 1000;

 

 

public Play(PlaneSpace midlet, Display display, Player player) {

random = new Random();

this.midlet = midlet;

this.display = display;

this.player = player;

cmExit = new Command(“Keluar”, Command.OK, 1);

 

addCommand(cmExit);

setCommandListener(this);

 

try {

bgImg = Image.createImage(bgImgN);

} catch (java.io.IOException e) {

}

}

protected void paint(Graphics g) {

g.setClip(0,0,xScreen,yScreen);

g.drawImage(bgImg,0,-y,Graphics.TOP|Graphics.LEFT);

g.setColor(255, 255, 255);

g.fillRect(5, 5, 105, 10);

 

int tmp = gauge;

if(gauge > 1000){

tmp = 100;

}else{

tmp = (int)((gauge * 100) / 1000);

}

 

g.setColor(0, 0, 0);

g.fillRect(5, 5, (tmp + 5), 10);

 

if(gameover == true){

g.setColor(254, 22, 57);

g.setFont(Font.getFont(Font.FACE_PROPORTIONAL,Font.STYLE_BOLD,Font.SIZE_LARGE));

g.drawString(“Game Over”,40,((yScreen / 2) – 30), Graphics.TOP | Graphics.LEFT);

g.drawString(“anda belum beruntung”,3,((yScreen / 2) – 15), Graphics.TOP | Graphics.LEFT);

g.drawString(“Tugas Mobile”,33,((yScreen / 2) – 0), Graphics.TOP| Graphics.LEFT);

g.drawString(“computing”,40,((yScreen / 2) + 15), Graphics.TOP | Graphics.LEFT);

}

int xpic;

int ypic;

if((shooted() == true)||(gauge <= 0)){

gameover = true;

g.setClip((px – 2),(py – 2),35,35);

xpic = 110;

ypic = 500;

g.drawImage(bgImg,(px – 2) – xpic,-(ypic – (py – 2)),Graphics.TOP|Graphics.LEFT);

}else{

if((bombY[minIndex] >= (yScreen – 15))||(first == true)){

generateBomb();

if(first == true){

first = false;

}

}else{

for(int i=0;i<bombAmount;i++) {

bombY[i]++;

if(bombY[i] > yScreen){

gauge = gauge + 3;

}

}

}

xpic = 77;

ypic = 509;

for(int i=0;i<bombAmount;i++) {

if(bombY[i] <= (yScreen – 25)){

g.setClip(bombX[i],bombY[i],whbomb,whbomb);

g.drawImage(bgImg,bombX[i] – xpic,-(ypic – bombY[i]),Graphics.TOP|Graphics.LEFT);

}

}

g.setClip(px,py,hplane,wplane);

xpic = 15;

ypic = 503;

g.drawImage(bgImg,px – xpic,-(ypic – py),Graphics.TOP|Graphics.LEFT);

}

}

 

protected void keyPressed(int keyCode) {

switch (keyCode) {

case -1: // UP

py = py – 10;

if(py < 0){

py = py + 10;

}

break;

case -2: // DOWN

py = py + 10;

if(py > (yScreen – hplane)){

py = py – 10;

}

break;

case -3: // LEFT

px = px – 10;

if(px < 0){

px = px + 10;

}

break;

case -4: // RIGHT

px = px + 10;

if(px > (xScreen – wplane)){

px = px – 10;

}

break;

}

}

 

public void commandAction(Command c, Displayable s) {

if (c == cmExit) {

yes = false;

midlet.exitMIDlet();

}

}

 

public void run() {

while (gameover == false) {

try {

synchronized (this) {

if(y <= 0){

y = ySkyEdge – yScreen;

}else{

y–;

}

Thread.sleep(10);

gauge = gauge – 3;

repaint();

}

} catch (Exception ie) {

}

}

if(gameover == true){

bombAmount = 0;

try {

Thread.sleep(1500);

player.stop();

} catch (Exception e) {

e.printStackTrace();

}

}

}

 

public void generateBomb(){

bombAmount = random.nextInt() % randRange;

if(bombAmount < 1){

bombAmount = randRange;

}

random.setSeed(xScreen);

for(int i=0;i<bombAmount;i++){

int xBomb = random.nextInt() % (xScreen – 50);

int yBomb = random.nextInt() % (yScreen – 25);

if(xBomb < 0){

xBomb = xBomb + (xScreen – 50);

}

bombX[i] = xBomb;

bombY[i] = yBomb – (yScreen – 25);

}

minIndex = 0;

int min = bombY[minIndex];

for(int i=1;i<bombAmount;i++) {

if(min > bombY[i]){

min = bombY[i];

minIndex = i;

}

}

}

 

boolean shooted(){

boolean res = false;

int i=0;

while((res == false)&&(i < bombAmount)) {

if(inPlaneRange(bombX[i], bombY[i]) == true){

res = true;

try {

playMedia(“explode.wav”);

} catch (Exception e) {

e.printStackTrace();

}

}

i++;

}

return res;

}

 

boolean inPlaneRange(int x, int y){

boolean res = false;

if((x >= px)&&(x <= (px + wplane))&&(y >= py)&&(y <= (py + hplane))){

res = true;

}

return res;

}

 

private void playMedia(String file)

throws Exception {

player = Manager.createPlayer(getClass().getResourceAsStream(file), “audio/x-wav”);

player.addPlayerListener(this);

player.setLoopCount(-1);

player.prefetch();

player.realize();

vc = (VolumeControl)player.getControl(“VolumeControl”);

if (vc != null)

vc.setLevel(30);

 

player.start();

}

 

public void playerUpdate(Player player, String event, Object eventData) {

if(event.equals(PlayerListener.STARTED) &&

new Long(0L).equals((Long)eventData)) {

} else if(event.equals(PlayerListener.CLOSED)) {

}

}

}

  • Selanjutnya, setelah source code tersebut di tuliskan di notepad tadi, selanjutanya kedua class yang di buat tadi di simpan pada folder : C:\WTK2.5.1\apps\PlaneSpace\src.

  • Lalu kembali pada aplikasi Wireless Toolkit 2.5.1, dan pilh Run…..maka program game tersebut telah dapat kawan-kawan jalankan…
  • Mainkan permainan dengan tombol up, down, right, left untuk menghindari pesawat dari bom, apabila pesawat berhasil menghindari bom maka gauge akan bertambah dan apabila pesawat terkena bom maka akan Game Over…..oyi

Selamat mencoba ya………Try and Try……
Jangan kalah sebelum berperang … .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .SEMANGAT……..
& Good Luck..Oyi

Sumber : http://herman-it.blogspot.com/2009/02/pembuatan-aplikasi-game-sederhana-pada.html

About the author

Pantang tolak tugas, Pantang tugas tak terselesaikan , Pantang Ulur Waktu dan Yakin Usaha Sampai . . . . . .