Selasa, 12 April 2011

APLIKASI GAME PLANE WARRIOR PADA HANDPHONE DENGAN MENGGUNAKAN JAVA 2 MICRO EDITION

Cara Penggunaannya :

Game Plane Warrior ini merupakan game yang berjalan pada perangkat selular yang berbasis java, khususnya Java 2 Micro Edition(J2ME) yang mampu memberikan hiburan bagi yang memainkannya. Game ini juga melatih ketepatan dalam menembak sasaran yang ada di depan mata. Deskripsi dari game ini yaitu sebuah dunia khayalan yang di serang oleh sekelompok makhluk planet(alien). Makhluk planet disini diibaratkan sebagai pesawat alien atau pesawat musuh. Alien ini menyerang dunia khayalan yang diibaratkan sebagai bumi untuk menguasai dunia khayalan tersebut. Makhluk bumi atau pesawat pemain tidak tinggal diam, mereka juga menyiapkan pasukan untuk menyerang pasukan musuh yaitu pesawat alien agar dunia khayalan(bumi) tidak dikuasai oleh makhluk-makhluk planet tersebut. Game ini merupakan perpaduan antara game action dan petualangan yang sifatnya menghibur.

Game ini terdiri dari 3 level dan setiap level memiliki tingkat kesulitan yang berbeda-beda. Berikut adalah gambaran permainan pada setiap level dalam game ini.

· Level 1

Pada level ini berlatar pemandangan di bumi, tepatnya di atas langit. Disini berlatar warna biru muda dengan disertai dengan awan-awan yang bertebaran. Maksud dari latar ini yaitu saat pesawat pemain (pesawat bumi) masih berada dalam bumi atau dunia khayal, lalu datang pesawat alien atau pesawat musuh. Pada level ini pemain diharuskan untuk menghabisi pesawat musuh sebanyak 20 pesawat apabila ingin melanjutkan permainan ke level berikutnya dengan banyaknya darah atau nyawa yang telah disediakan. Dan apabila pesawat pemain bertabrakan dengan pesawat musuh akan mengurangi darah pesawat pemain sebanyak 10% dari 100% darah yang telah disediakan. Dan bila darah tersebut telah habis, maka pemain dinyatakan kalah dan tidak dapat melanjutkan permainan ke level berikutnya. Di level ini pesawat pemain diberikan senjata berupa tembakan 1x sedangkan untuk pesawat musuh tidak diberikan. Pada awal permainan pemain diberikan bonus score 100.

· Level 2

Pada level ini berlatarkan pemandangan saat perjalanan pesawat bumi dan pesawat alien sedang bertarung. Disini diibaratkan berwarna biru tua dengan di taburi dengan bintang-bintang yang berkilauan, dan sudah hampir memasuki daerah luar angkasa atau markas dari pesawat alien. Namun pada level ini yang membedakan dengan level 1 pada pesawat musuh disertai dengan tembakan 1x. Pada level 2 terdapat 2 macam pesawat musuh, yang pertama pesawat musuh yang bergerak lambat ada 20 pesawat dan yang satunya pesawat musuh dengan gerakan yang agak cepat ada 10 pesawat. Dan apabila pesawat pemain bertabrakan dengan pesawat musuh atau pesawat pemain terkena tembakan pesawat musuh maka akan mengurangi darah pesawat pemain sebanyak 10% dari 100% darah yang telah disediakan. Apabila darah tersebut telah habis, maka pemain dinyatakan kalah.

· Level 3

Pada level terakhir ini yang berlatarkan sebuah pemandangan luar angkasa dengan bintang yang bertaburan. Disini diibaratkan luar angkasa berwarna hitam dengan bertaburan bintang-bintang yang berkilauan. Pada level ini pemain dihadapkan pada raja musuh (alien). Pesawat raja alien ini sangat kuat, pemain harus menembakan beberapa kali tembakan supaya raja tersebut mati. Dan harus tepat sasaran. Untuk pesawat raja di level ini disertai dengan tembakan juga seperti pesawat pemain. Jika tembakan tersebut mengenai pesawat pemain maka akan mengurangi darah pesawat pemain. Sama seperti level 1 dan 2, apabila pesawat pemain mengenai pesawat raja ataupun pesawat pemain terkena tembakan pesawat raja maka akan mengurangi darah pesawat pemain sebanyak 10% dari 100% darah yang telah disediakan. Apabila darah yang telah tersedia telah habis, maka pemain dinyatakan kalah. Dan bila ingin memenangkan permainan ini, pemain diharuskan untuk menghabisi raja alien tersebut hingga mati.

Di dalam game ini pemain harus memainkan setiap level satu persatu mulai dari level 1 hingga level ke 3. Apabila pemain mati pada level tertentu, maka ia tidak perlu mengulang dari level 1, akan tetapi pemain dapat melanjutkan permainan dari level yang terakhir di mainkan.


Aturan Permainan Game Plane Warrior :

Aturan dalam memainkan game ini ialah sebanyak mungkin kita menghancurkan pesawat musuh dengan menembak/membidik pesawat musuh dengan tepat, karena dalam game ini pesawat yang digunakan pemain dilengkapi dengan tembakan dan radar (pada level 2) untuk memudahkan dalam menembak pesawat musuh dan pesawat yang digunakan oleh pemain juga dapat menghindari tembakan/sasaran yang diarahkan oleh musuh dengan menggunakan tombol-tombol yang ada dalam ponsel. Dalam game ini Pesawat yang digunakan pemain untuk bergerak ke atas, ke bawah, ke kanan, dan kekiri. Saat pertama bermain, pemain diberikan bonus nilai sebanyak 100 poin. Pada level 1 pemain dihadapkan oleh sekumpulan pesawat musuh ada 20 pesawat musuh, dan pemain harus menghabiskan atau menembak pesawat-pesawat tersebut apabila ingin meneruskan ke level selanjutnya. Tembakan tersebut harus tepat sasaran. Pada level ini pesawat pemain hanya mengeluarkan tembakan 1x dan untuk pesawat musuh tidak disediakan tembakan. Pada level 2 pemain dihadapkan oleh sekumpulan pesawat musuh yang lebih banyak dari pada level 1 yaitu ada 30 pesawat musuh, diantaranya 20 pesawat dengan gerakan yang lambat dan 10 pesawat musuh dengan gerakan yang agak cepat caranya sama seperti level 1 menembakan semua musuh tetapi pada level 2 ini pesawat musuh disertai dengan tembakan untuk menembak. Dan untuk level 3 pemain dihadapkan pada raja dari pesawat musuh. Pemain diharuskan menghabisi raja tersebut apabila ingin memenangkan permainan ini. Pada awal permainan pemain diberikan nyawa sebanyak 100%. Apabila nyawa tersebut habis pada saat pemain memainkan game ini pada level 1 pemain tidak perlu mengulangnya pada level 1, begitu juga pada level 2 dan 3.


source code untuk About.java :
package source;

import javax.microedition.lcdui.*;
class About
extends Form
implements CommandListener
{
private final PlaneWarrior midlet;
private final Command kembali;
String pesan;
Image gundar;

About(PlaneWarrior midlet)
{
super("About");
this.midlet = midlet;
pesan = "Jenis Game : Action & shooting..\n" +
"Berbasis : Java 2 Micro Edition (J2ME)..\n" +
"Game ini dibuat oleh Sri Noviyanti\n"+
"50407815\n\n";
try {
gundar = Image.createImage("/res/gundar.png");
} catch (java.io.IOException e) {
e.printStackTrace();
}
append(new ImageItem("gunadarma", gundar, ImageItem.LAYOUT_DEFAULT, null));
append(new StringItem(null, pesan));
kembali = new Command("Kembali", Command.BACK, 0);
addCommand(kembali);
setCommandListener(this);
}
public void commandAction(Command c, Displayable d){
midlet.tampilan_utama();
}

}

source code untuk Best_of_the_best.java :
package source;

import javax.microedition.lcdui.*;

public class Best_of_the_best
extends Form
implements CommandListener {
private PlaneWarrior midlet;
private Display display;
private Command cmBack;
private StringItem si;
int skor;
String nama;
String rec;

public Best_of_the_best(PlaneWarrior midlet, Display display) {
super("Best of the best");
this.midlet = midlet;
this.display = display;
saverecord();
cmBack = new Command("Back", Command.BACK, 1);

setCommandListener(this);
addCommand(cmBack);
}

public void saverecord(){
skor=midlet.skor;
nama=midlet.nama;

boolean publish = false;

Save save = new Save("db_data");
save.open();
save.saveRecordStream(skor, nama, publish, 0);
append(new StringItem(null, save.readRecordStreamSortInt()));
save.close();
}



public void commandAction(Command c, Displayable s) {
if (c == cmBack)
this.deleteAll();
midlet.tampilan_utama();
}
};

source code untuk Level1.java :
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package source;

import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import java.io.IOException;

import java.util.*;


/**
* @author ichong
*/
public class Level1 extends GameCanvas implements Runnable{
/**
* constructor
*/
PlaneWarrior midlet;
Display display;
private boolean main;
private boolean gameover = false;
public boolean menang;
private Pesawat pesawat;
//private Musuh musuh;
private Sprite[] musuh = new Sprite[20];
private Sprite[] tembakan = new Sprite[50];
private Image pesmus, tem;

private TiledLayer back;
private TiledLayer tiled;
private TiledLayer finish;

public LayerManager dunia;
private int speed = 10;
public int Skor;

public boolean[] tembak = new boolean[50];
int a,b;
private int peluru;
private int darahjagoan=10;

public String reason;

private int count = 50;
private Timer tm;
private TestTimerTask tt;
private Command cmExit, cmInstruction;

int maptiled[][]={
// 1 2 3 4 5 6 7 8
{0, 6, 7, 8, 0, 0, 0, 0},
{0, 9, 10, 11, 0, 0, 0, 0},
{0, 12, 13, 14, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 6, 7, 8, 0, 0, 0},
{0, 0, 9, 10, 11, 0, 0, 0},
{0, 0, 12, 13, 14, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 6, 7, 8, 0},
{0, 0, 0, 0, 9, 10, 11, 0},
{0, 0, 0, 0, 12, 13, 14, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 6, 7, 8, 0, 0},
{0, 0, 0, 9, 10, 11, 0, 0},
{0, 0, 0, 12, 13, 14, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 6, 7, 8, 0},
{0, 0, 0, 0, 9, 10, 11, 0},
{0, 0, 0, 0, 12, 13, 14, 0},
};

int mapfinish[][]={
// 1 2 3 4 5 6 7 8
{1, 1, 1, 1, 1, 1, 1, 1},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
};

public Level1(PlaneWarrior midlet, Display display) throws IOException{
super(true);

pesawat = createZoakh();
tiled = createLayer(maptiled);
finish = createLayer(mapfinish);
try {
//sprite Image
pesmus=Image.createImage("/res/plane.png");
tem=Image.createImage("/res/tembak.png");
} catch(Exception e){}

for(int i=0;i<20;i++){
musuh[i] = new Sprite(pesmus, 25, 25);
musuh[i].setFrame(1);
}
for(int i=0;i<50;i++){
tembakan[i] = new Sprite(tem, 10, 10);
tembakan[i].setFrame(0);
}
dunia = new LayerManager();

dunia.append(pesawat);
for(int i=0;i<20;i++){
dunia.append(musuh[i]);
}
for(int i=0;i<50;i++){
dunia.append(tembakan[i]);
}
dunia.append(tiled);
dunia.append(finish);

tm = new Timer();
tt = new TestTimerTask();
tm.scheduleAtFixedRate(tt, new Date(), 1000);

}

private Pesawat createZoakh() throws IOException{
Image image = Image.createImage("/res/plane.png");
return new Pesawat(image, 25, 25);
}

private TiledLayer createLayer(int map[][]) throws IOException{
Image image = Image.createImage("/res/back.png");
TiledLayer tiledLayer = new TiledLayer(8, 30, image, 30, 30);

for (int row = 0; row < 30; row++) {
for(int column = 0;column<8; column++){
tiledLayer.setCell(column, row, map[row][column]);
}
}
return tiledLayer;
}

public void start(){
main = true;
Thread t = new Thread(this);
t.start();
tiled.setPosition((getWidth()/2-120), -900+getHeight());
finish.setPosition((getWidth()/2-120), -900);
pesawat.setPosition(getWidth()/2, getHeight()-30);

musuh[0].setPosition(10, -10);
musuh[1].setPosition(getWidth()-35, -70);
musuh[2].setPosition(getWidth()/2, -100);
musuh[3].setPosition(25, -150);
musuh[4].setPosition(getWidth()-40,-230);
musuh[5].setPosition(10,-250);
musuh[6].setPosition(25, -320);
musuh[7].setPosition(getWidth()/2+5, -330);
musuh[8].setPosition(getWidth()/2-15, -350);
musuh[9].setPosition(getWidth()/2, -400);
musuh[10].setPosition(getWidth()-50, -480);
musuh[11].setPosition(getWidth()/2-50,-550);
musuh[12].setPosition(getWidth()/2+30,-580);
musuh[13].setPosition(getWidth()/2-5, -670);
musuh[14].setPosition(50, -720);
musuh[15].setPosition(30, -780);
musuh[16].setPosition(getWidth()-40, -800);
musuh[17].setPosition(getWidth()/2-10, -830);
musuh[18].setPosition(getWidth()/2-50,-840);
musuh[19].setPosition(getWidth()/2+30,-870);
for(int i=0;i<50;i++){
tembakan[i].setPosition(-50, -50);
}
Skor = 0;
darahjagoan = 10;
}

public void stop(){
main = false;
}

public void run(){
//playlagu();
Graphics g = getGraphics();
while(main){
while(!gameover){
a++;
if(a%5==0){
tiled.move(0, 1);
a=0;
}
b++;
if(b%3==0){
for(int i=0;i<20;i++){
musuh[i].move(0, 1);
}
finish.move(0, 1);
b=0;
}

input();
nembak();
tick();
render(g);
try{
Thread.sleep(speed);
}catch(InterruptedException e){
stop();
}
}
if(gameover==true){
//synchronized(this){

g.setColor(255, 255, 255);
g.fillRect(getWidth()/2-50, getHeight()/2-10, 100,30 );
g.setColor(255,0,0);
if(menang==true)
g.drawString("YOU WIN", getWidth()/2-30, getHeight()/2-5, Graphics.TOP|Graphics.LEFT);
else{
g.drawString("YOU LOSE " , getWidth()/2-30, getHeight()/2-15, Graphics.TOP|Graphics.LEFT);
g.drawString(reason, getWidth()/2-40, getHeight()/2-5, Graphics.TOP|Graphics.LEFT);
}
g.drawString("Nilai anda = " + Skor, getWidth()/2-40, getHeight()/2+5, Graphics.TOP|Graphics.LEFT);
flushGraphics();

}
}
}

private void selesai(){
}

public void tick(){
for(int i=0;i<20;i++){
//musuh tertembak
for(int j=0;j<50;j++){
if(tembakan[j].collidesWith(musuh[i], true)){
musuh[i].setVisible(false);
Skor+=100;
tembakan[j].setPosition(-50, -50);
}
}
//kena musuh
if(pesawat.collidesWith(musuh[i], true)){
darahjagoan--;
musuh[i].setVisible(false);
if(darahjagoan<=0){
gameover=true;
menang = false;
}
}
}
if(pesawat.collidesWith(finish, true)){
gameover=true;
menang = true;
}
}

private void keluar(){

}

private void input() {
int keyStates = getKeyStates();
if ((keyStates & LEFT_PRESSED) != 0){
if(pesawat.getX()-1>0)
pesawat.Kiri();
}
else if ((keyStates & RIGHT_PRESSED) != 0){
if(pesawat.getX()+260)
pesawat.Atas();
}
else if ((keyStates & DOWN_PRESSED) != 0){
if(pesawat.getY()+26<-10){
tembakan[i].setPosition(-50, -50);
tembak[i]=false;
}
}
}
}

private void render(Graphics g){
int w = getWidth();
int h = getHeight();

g.setColor(34,176,235);
g.fillRect(0, 0, w, h);

dunia.paint(g, 0, 0);

g.setColor(255,255,255);
g.fillRect(5, 5, 50, 20);
g.fillRect(5, 30, 50, 10);
g.setColor(255,0,0);
g.drawString("warrior", 10, 5, Graphics.TOP|Graphics.LEFT);
g.drawString("" + Skor, w-50, 5, Graphics.TOP|Graphics.LEFT);
g.setColor(255,0,0);
g.fillRect(5, 30, darahjagoan*5, 10);
flushGraphics();
}

public class TestTimerTask extends TimerTask{
public final void run(){

}
}

}

source code untuk Level2.java :
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package source;

import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import java.io.IOException;

import java.util.*;


/**
* @author ichong
*/
public class Level2 extends GameCanvas implements Runnable{
/**
* constructor
*/
PlaneWarrior midlet;
Display display;
private boolean main;
private boolean gameover = false;
public boolean menang;
private Pesawat pesawat;
private Sprite[] musuh = new Sprite[20];
private Sprite[] musuh2 = new Sprite[10];
private Sprite[] tembakan = new Sprite[50];
private Sprite[] tembakan2 = new Sprite[50];
private Image pesmus, tem;

private TiledLayer back;
private TiledLayer tiled;
private TiledLayer finish;
private TiledLayer star;

public LayerManager dunia;
private int speed = 0;
public int Skor;
private int level;

public boolean[] tembak = new boolean[50];
public boolean[] tembak2 = new boolean[50];
int a,b,c;
private int peluru, peluru2;
private int darahjagoan=10;

public String reason;

private int count = 50;
private Timer tm;
private TestTimerTask tt;
private Command cmExit, cmInstruction;

int maptiled[][]={
// 1 2 3 4 5 6 7 8
{0, 6, 7, 8, 0, 0, 0, 0},
{0, 9, 10, 11, 0, 0, 0, 0},
{0, 12, 13, 14, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 6, 7, 8, 0, 0, 0},
{0, 0, 9, 10, 11, 0, 0, 0},
{0, 0, 12, 13, 14, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 6, 7, 8, 0, 0, 0, 0},
{0, 9, 10, 11, 0, 0, 0, 0},
{0, 12, 13, 14, 0, 0, 0, 0},
{0, 0, 0, 0, 6, 7, 8, 0},
{0, 0, 0, 0, 9, 10, 11, 0},
{0, 0, 0, 0, 12, 13, 14, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 6, 7, 8, 0, 0, 0, 0},
{0, 9, 10, 11, 0, 0, 0, 0},
{0, 12, 13, 14, 0, 0, 0, 0},
{0, 0, 0, 6, 7, 8, 0, 0},
{0, 0, 0, 9, 10, 11, 0, 0},
{0, 0, 0, 12, 13, 14, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 6, 7, 8, 0},
{0, 0, 0, 0, 9, 10, 11, 0},
{0, 0, 0, 0, 12, 13, 14, 0},
};

int mapstar[][]={
// 1 2 3 4 5 6 7 8
{5, 4, 4, 5, 5, 4, 4, 4},
{4, 5, 5, 4, 4, 5, 5, 5},
{5, 4, 4, 5, 5, 4, 4, 4},
{4, 5, 5, 4, 4, 5, 5, 5},
{4, 5, 5, 4, 4, 5, 5, 5},
{5, 4, 4, 5, 5, 4, 4, 4},
{5, 4, 4, 5, 5, 4, 4, 4},
{4, 5, 5, 4, 4, 5, 5, 5},
{5, 4, 4, 5, 5, 4, 4, 4},
{4, 5, 5, 4, 4, 5, 5, 5},
{4, 5, 5, 4, 4, 5, 5, 5},
{5, 4, 4, 5, 5, 4, 4, 4},
{5, 4, 4, 5, 5, 4, 4, 4},
{4, 5, 5, 4, 4, 5, 5, 5},
{5, 4, 4, 5, 5, 4, 4, 4},
{4, 5, 5, 4, 4, 5, 5, 5},
{4, 5, 5, 4, 4, 5, 5, 5},
{5, 4, 4, 5, 5, 4, 4, 4},
{5, 4, 4, 5, 5, 4, 4, 4},
{4, 5, 5, 4, 4, 5, 5, 5},
{5, 4, 4, 5, 5, 4, 4, 4},
{4, 5, 5, 4, 4, 5, 5, 5},
{4, 5, 5, 4, 4, 5, 5, 5},
{5, 4, 4, 5, 5, 4, 4, 4},
{5, 4, 4, 5, 5, 4, 4, 4},
{4, 5, 5, 4, 4, 5, 5, 5},
{5, 4, 4, 5, 5, 4, 4, 4},
{4, 5, 5, 4, 4, 5, 5, 5},
{4, 5, 5, 4, 4, 5, 5, 5},
{5, 4, 4, 5, 5, 4, 4, 4},
};

int mapfinish[][]={
// 1 2 3 4 5 6 7 8
{2, 2, 2, 2, 2, 2, 2, 2},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
};

public Level2(PlaneWarrior midlet, Display display) throws IOException{
super(true);

pesawat = createZoakh();
tiled = createLayer(maptiled);
finish = createLayer(mapfinish);
star = createLayer(mapstar);
try {
//sprite Image
pesmus=Image.createImage("/res/plane.png");
tem=Image.createImage("/res/tembak.png");
} catch(Exception e){}

for(int i=0;i<20;i++){
musuh[i] = new Sprite(pesmus, 25, 25);
musuh[i].setFrame(1);
musuh[i].setVisible(false);
}
for(int i=0;i<10;i++){
musuh2[i] = new Sprite(pesmus, 25, 25);
musuh2[i].setFrame(2);
musuh2[i].setVisible(false);
}
for(int i=0;i<50;i++){
tembakan[i] = new Sprite(tem, 10, 10);
tembakan[i].setFrame(0);
}
for(int i=0;i<50;i++){
tembakan2[i] = new Sprite(tem, 10, 10);
tembakan2[i].setFrame(1);
}
dunia = new LayerManager();

dunia.append(pesawat);
for(int i=0;i<20;i++){
dunia.append(musuh[i]);
}
for(int i=0;i<10;i++){
dunia.append(musuh2[i]);
}
for(int i=0;i<50;i++){
dunia.append(tembakan[i]);
}
for(int i=0;i<50;i++){
dunia.append(tembakan2[i]);
}
dunia.append(tiled);
//dunia.append(star);
dunia.append(finish);

tm = new Timer();
tt = new TestTimerTask();
tm.scheduleAtFixedRate(tt, new Date(), 1000);

}

private Pesawat createZoakh() throws IOException{
Image image = Image.createImage("/res/plane.png");
return new Pesawat(image, 25, 25);
}

private TiledLayer createLayer(int map[][]) throws IOException{
Image image = Image.createImage("/res/back.png");
TiledLayer tiledLayer = new TiledLayer(8, 30, image, 30, 30);

for (int row = 0; row < 30; row++) {
for(int column = 0;column<8; column++){
tiledLayer.setCell(column, row, map[row][column]);
}
}
return tiledLayer;
}

public void start(){
main = true;
Thread t = new Thread(this);
t.start();
tiled.setPosition((getWidth()/2-120), -900+getHeight());
star.setPosition((getWidth()/2-120), -900+getHeight());
finish.setPosition((getWidth()/2-120), -900);
pesawat.setPosition(getWidth()/2, getHeight()-30);

musuh[0].setPosition(10, -40);
musuh[1].setPosition(getWidth()-35, -70);
musuh[2].setPosition(getWidth()/2, -100);
musuh[3].setPosition(25, -150);
musuh[4].setPosition(getWidth()-40,-230);
musuh[5].setPosition(10,-250);
musuh[6].setPosition(25, -320);
musuh[7].setPosition(getWidth()/2+5, -330);
musuh[8].setPosition(getWidth()/2-15, -350);
musuh[9].setPosition(getWidth()/2, -400);
musuh[10].setPosition(getWidth()-50, -480);
musuh[11].setPosition(getWidth()/2-50,-550);
musuh[12].setPosition(getWidth()/2+30,-580);
musuh[13].setPosition(getWidth()/2-5, -670);
musuh[14].setPosition(50, -720);
musuh[15].setPosition(30, -780);
musuh[16].setPosition(getWidth()-40, -800);
musuh[17].setPosition(getWidth()/2-10, -830);
musuh[18].setPosition(getWidth()/2-50,-840);
musuh[19].setPosition(getWidth()/2+30,-870);

musuh2[0].setPosition(30, -200);
musuh2[1].setPosition(getWidth()-50, -250);
musuh2[2].setPosition(getWidth()/2-30, -350);
musuh2[3].setPosition(10, -450);
musuh2[4].setPosition(getWidth()-60,-600);
musuh2[5].setPosition(50,-700);
musuh2[6].setPosition(40, -800);
musuh2[7].setPosition(getWidth()/2-50, -900);
musuh2[8].setPosition(getWidth()/2+15, -1100);
musuh2[9].setPosition(getWidth()/2+5, -1200);
for(int i=0;i<50;i++){
tembakan[i].setPosition(-50, -50);
}
for(int i=0;i<50;i++){
tembakan2[i].setPosition(-50, getHeight()+30);
}
Skor = 0;
darahjagoan = 10;
}

public void stop(){
main = false;
}

public void run(){
//playlagu();
Graphics g = getGraphics();
while(main){
while(!gameover){
a++;
if(a%5==0){
tiled.move(0, 1);
star.move(0, 1);
a=0;
}
b++;
if(b%3==0){
for(int i=0;i<20;i++){
musuh[i].move(0, 1);
if(musuh[i].getY()==-30){
musuh[i].setVisible(true);
}
if(musuh[i].getY()==30){
tembakan2[peluru2].setPosition(musuh[i].getX()+5, musuh[i].getY()+15);
tembak2[peluru2] = true;
peluru2++;
if(peluru2==49)
peluru2=0;
}
}
finish.move(0, 1);
b=0;
}
c++;
if(b%2==0){
for(int i=0;i<10;i++){
musuh2[i].move(0, 1);
if(musuh2[i].getY()==-30){
musuh2[i].setVisible(true);
}
if(musuh2[i].getY()==50){
tembakan2[peluru2].setPosition(musuh2[i].getX()+5, musuh2[i].getY()+15);
tembak2[peluru2] = true;
peluru2++;
if(peluru2==49)
peluru2=0;
}
}
c=0;
}

input();
nembak();
nembak2();
tick();
render(g);
try{
Thread.sleep(speed);
}catch(InterruptedException e){
stop();
}
}
if(gameover==true){
//synchronized(this){

g.setColor(255, 255, 255);
g.fillRect(getWidth()/2-50, getHeight()/2-10, 100,30 );
g.setColor(255,0,0);
if(menang==true)
g.drawString("YOU WIN", getWidth()/2-30, getHeight()/2-5, Graphics.TOP|Graphics.LEFT);
else{
g.drawString("YOU LOSE " , getWidth()/2-30, getHeight()/2-15, Graphics.TOP|Graphics.LEFT);
g.drawString(reason, getWidth()/2-40, getHeight()/2-5, Graphics.TOP|Graphics.LEFT);
}
g.drawString("Nilai anda = " + Skor, getWidth()/2-40, getHeight()/2+5, Graphics.TOP|Graphics.LEFT);
flushGraphics();

}
}
}

private void selesai(){
}

public void tick(){
for(int i=0;i<20;i++){
//musuh tertembak
for(int j=0;j<50;j++){
if(tembakan[j].collidesWith(musuh[i], true)){
musuh[i].setVisible(false);
Skor+=100;
tembakan[j].setPosition(-50, -50);
}
}
//kena musuh
if(pesawat.collidesWith(musuh[i], true)){
darahjagoan--;
musuh[i].setVisible(false);
if(darahjagoan<=0){
gameover=true;
menang = false;
}
}
}
for(int i=0;i<10;i++){
//musuh2 tertembak
for(int j=0;j<50;j++){
if(tembakan[j].collidesWith(musuh2[i], true)){
musuh2[i].setVisible(false);
Skor+=200;
tembakan[j].setPosition(-50, -50);
}
}
//kena musuh2
if(pesawat.collidesWith(musuh2[i], true)){
darahjagoan--;
musuh2[i].setVisible(false);
if(darahjagoan<=0){
gameover=true;
menang = false;
}
}
}
//kena pesawat musuh
if(pesawat.collidesWith(finish, true)){
gameover=true;
menang = true;
}
//tertembak
for(int j=0;j<50;j++){
if(tembakan2[j].collidesWith(pesawat, true)){
darahjagoan--;
tembakan2[j].setPosition(-50, getHeight()+30);
}
}
}

private void keluar(){

}

private void input() {
int keyStates = getKeyStates();
if ((keyStates & LEFT_PRESSED) != 0){
if(pesawat.getX()-1>0)
pesawat.Kiri();
}
else if ((keyStates & RIGHT_PRESSED) != 0){
if(pesawat.getX()+260)
pesawat.Atas();
}
else if ((keyStates & DOWN_PRESSED) != 0){
if(pesawat.getY()+26<0){
tembakan[i].setPosition(-50, -50);
tembak[i]=false;
}
}
}
}

private void nembak2(){
for(int i=0;i<50;i++){
if(tembak2[i]==true){
tembakan2[i].move(0, 1);
if(tembakan2[i].getY()>getHeight()){
tembakan2[i].setPosition(-50, getHeight()+50);
tembak2[i]=false;
}
}
}
}

private void render(Graphics g){
int w = getWidth();
int h = getHeight();

g.setColor(15,51,154);
g.fillRect(0, 0, w, h);

dunia.paint(g, 0, 0);

g.setColor(255,255,255);
g.fillRect(5, 5, 50, 20);
g.fillRect(5, 30, 50, 10);
g.setColor(255,0,0);
g.drawString("warrior", 10, 5, Graphics.TOP|Graphics.LEFT);
g.drawString("" + Skor, w-50, 5, Graphics.TOP|Graphics.LEFT);
g.setColor(255,0,0);
g.fillRect(5, 30, darahjagoan*5, 10);
flushGraphics();
}

public class TestTimerTask extends TimerTask{
public final void run(){

}
}

}

source code Level3.java :
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package source;

import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import java.io.IOException;

import java.util.*;


/**
* @author ichong
*/
public class Level3 extends GameCanvas implements Runnable{
/**
* constructor
*/
PlaneWarrior midlet;
Display display;
private boolean main;
private boolean gameover = false;
private boolean kanan;
public boolean menang;
private Pesawat pesawat;
private Sprite musuh;
private Sprite[] tembakan = new Sprite[50];
private Sprite[] tembakan2 = new Sprite[50];
private Image pesmus, tem, tem2;

private TiledLayer back;
private TiledLayer tiled;

public LayerManager dunia;
private int speed = 10;
public int Skor;
private int level;

public boolean[] tembak = new boolean[50];
public boolean[] tembak2 = new boolean[50];
int a,b,c;
private int peluru, peluru2;
private int darahjagoan=10, darahmusuh = 10;

public String reason;

private int count = 50;
private Timer tm;
private TestTimerTask tt;
private Command cmExit, cmInstruction;

int maptiled[][]={
// 1 2 3 4 5 6 7 8
{0, 6, 7, 8, 0, 0, 0, 0},
{0, 9, 10, 11, 0, 0, 0, 0},
{0, 12, 13, 14, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 6, 7, 8, 0, 0, 0},
{0, 0, 9, 10, 11, 0, 0, 0},
{0, 0, 12, 13, 14, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 6, 7, 8, 0, 0, 0, 0},
{0, 9, 10, 11, 0, 0, 0, 0},
{0, 12, 13, 14, 0, 0, 0, 0},
{0, 0, 0, 0, 6, 7, 8, 0},
{0, 0, 0, 0, 9, 10, 11, 0},
{0, 0, 0, 0, 12, 13, 14, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 6, 7, 8, 0, 0, 0, 0},
{0, 9, 10, 11, 0, 0, 0, 0},
{0, 12, 13, 14, 0, 0, 0, 0},
{0, 0, 0, 6, 7, 8, 0, 0},
{0, 0, 0, 9, 10, 11, 0, 0},
{0, 0, 0, 12, 13, 14, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 6, 7, 8, 0},
{0, 0, 0, 0, 9, 10, 11, 0},
{0, 0, 0, 0, 12, 13, 14, 0},
};

public Level3(PlaneWarrior midlet, Display display) throws IOException{
super(true);

pesawat = createZoakh();
tiled = createLayer(maptiled);
try {
//sprite Image
pesmus=Image.createImage("/res/pesawatraja.png");
tem=Image.createImage("/res/tembak.png");
tem2=Image.createImage("/res/plane.png");
} catch(Exception e){}

musuh = new Sprite(pesmus, 50, 50);
musuh.setFrame(0);

for(int i=0;i<50;i++){
tembakan[i] = new Sprite(tem, 10, 10);
tembakan[i].setFrame(0);
}
for(int i=0;i<50;i++){
tembakan2[i] = new Sprite(tem2, 25,25);
tembakan2[i].setFrame(4);
tembakan2[i].setVisible(false);
}
dunia = new LayerManager();

dunia.append(pesawat);
dunia.append(musuh);

for(int i=0;i<50;i++){
dunia.append(tembakan[i]);
}
for(int i=0;i<50;i++){
dunia.append(tembakan2[i]);
}
dunia.append(tiled);
//dunia.append(star);

tm = new Timer();
tt = new TestTimerTask();
tm.scheduleAtFixedRate(tt, new Date(), 1000);

}

private Pesawat createZoakh() throws IOException{
Image image = Image.createImage("/res/plane.png");
return new Pesawat(image, 25, 25);
}

private TiledLayer createLayer(int map[][]) throws IOException{
Image image = Image.createImage("/res/back.png");
TiledLayer tiledLayer = new TiledLayer(8, 30, image, 30, 30);

for (int row = 0; row < 30; row++) {
for(int column = 0;column<8; column++){
tiledLayer.setCell(column, row, map[row][column]);
}
}
return tiledLayer;
}

public void start(){
main = true;
Thread t = new Thread(this);
t.start();
tiled.setPosition((getWidth()/2-120), -900+getHeight());
pesawat.setPosition(getWidth()/2, getHeight()-30);
musuh.setPosition(getWidth()/2, 10);

for(int i=0;i<50;i++){
tembakan[i].setPosition(-50, -50);
}
for(int i=0;i<50;i++){
tembakan2[i].setPosition(-50, getHeight()+30);
}
Skor = 0;
darahjagoan = 10;
darahmusuh = 10;
}

public void stop(){
main = false;
}

public void run(){
//playlagu();
Graphics g = getGraphics();
while(main){
while(!gameover){
a++;
if(a%5==0){
tiled.move(0, 1);
if(tiled.getX()==getHeight())
tiled.setPosition((getWidth()/2-120), -900+getHeight());
a=0;
}
gerakanraja();
input();
nembak();
nembak2();
tick();
render(g);
try{
Thread.sleep(speed);
}catch(InterruptedException e){
stop();
}
}
if(gameover==true){
g.setColor(255, 255, 255);
g.fillRect(getWidth()/2-50, getHeight()/2-10, 100,30 );
g.setColor(255,0,0);
if(menang==true)
g.drawString("YOU WIN", getWidth()/2-30, getHeight()/2-5, Graphics.TOP|Graphics.LEFT);
else{
g.drawString("YOU LOSE " , getWidth()/2-30, getHeight()/2-15, Graphics.TOP|Graphics.LEFT);
g.drawString(reason, getWidth()/2-40, getHeight()/2-5, Graphics.TOP|Graphics.LEFT);
}
g.drawString("Nilai anda = " + Skor, getWidth()/2-40, getHeight()/2+5, Graphics.TOP|Graphics.LEFT);
flushGraphics();

}
}
}

private void gerakanraja(){
if(musuh.getX()<-25)
kanan=true;
if(musuh.getX()>getWidth()-25)
kanan=false;
if(kanan==true)
musuh.move(1, 0);
else
musuh.move(-1, 0);
b++;
if(b%70==0){
tembakan2[peluru2].setPosition(musuh.getX()+10, musuh.getY()+25);
tembakan2[peluru2].setVisible(true);
tembak2[peluru2] = true;
peluru2++;
if(peluru2==49)
peluru2=0;
}
}

private void selesai(){
}

public void tick(){
//musuh tertembak
for(int j=0;j<50;j++){
if(tembakan[j].collidesWith(musuh, true)){
darahmusuh--;
Skor+=100;
tembakan[j].setPosition(-50, -50);
if(darahmusuh<=0){
gameover=true;
menang = true;
}
}
}
//kena musuh
if(pesawat.collidesWith(musuh, true)){
darahjagoan--;
musuh.setVisible(false);
if(darahjagoan<=0){
gameover=true;
menang = false;
}
}

//tertembak
for(int j=0;j<50;j++){
if(tembakan2[j].collidesWith(pesawat, true)){
darahjagoan--;
tembakan2[j].setPosition(-50, getHeight()+30);
}
}
}

private void keluar(){

}

private void input() {
int keyStates = getKeyStates();
if ((keyStates & LEFT_PRESSED) != 0){
if(pesawat.getX()-1>0)
pesawat.Kiri();
}
else if ((keyStates & RIGHT_PRESSED) != 0){
if(pesawat.getX()+260)
pesawat.Atas();
}
else if ((keyStates & DOWN_PRESSED) != 0){
if(pesawat.getY()+26<0){
tembakan[i].setPosition(-50, -50);
tembak[i]=false;
}
}
}
}

private void nembak2(){
for(int i=0;i<50;i++){
if(tembak2[i]==true){
tembakan2[i].move(0, 1);
if(tembakan2[i].getY()>getHeight()){
tembakan2[i].setPosition(-50, getHeight()+50);
tembakan2[i].setVisible(false);
tembak2[i]=false;
}
}
}
}

private void render(Graphics g){
int w = getWidth();
int h = getHeight();

g.setColor(0,0,0);
g.fillRect(0, 0, w, h);

dunia.paint(g, 0, 0);

g.setColor(255,255,255);
g.fillRect(5, 5, 50, 20);
g.fillRect(5, 30, 50, 10);
g.fillRect(w-55, 5, 50, 20);
g.fillRect(w-55, 30, 50, 10);
g.setColor(255,0,0);
g.drawString("warrior", 10, 5, Graphics.TOP|Graphics.LEFT);
g.drawString("king", w-50, 5, Graphics.TOP|Graphics.LEFT);
//g.drawString("" + Skor, w-50, 5, Graphics.TOP|Graphics.LEFT);
g.setColor(255,0,0);
g.fillRect(5, 30, darahjagoan*5, 10);
g.fillRect(w-55, 30, darahmusuh*5, 10);
flushGraphics();
}

public class TestTimerTask extends TimerTask{
public final void run(){

}
}

}

source code untuk Pesawat.java :
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package source;

import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;

/**
* @author ichong
*/
public class Pesawat extends Sprite{
private int langkah;
private int arah;
private int gerakan = 1;
public boolean mentok;
public int gerakansebelumnya;
private static final int laju = 1;
/**
* constructor
*/
public Pesawat(Image image, int frameWidth, int frameHeight) {
super(image, frameWidth, frameHeight);
defineReferencePixel(frameWidth / 2, frameHeight / 2);
}

private static final int[][] framelook = {
{ 1, 2, 3, 4},
{ 5, 6, 7, 8},
{ 9, 10, 11, 12},
{13, 14, 15, 16}
};

public void Atas(){
arah = 0;
this.move(0,- laju);
gerakansebelumnya = 1;
}

public void Bawah(){
arah = 1;
this.move(0, +laju);
gerakansebelumnya = 2;
}

public void Kanan(){
arah = 2;
this.move(+laju, 0);
gerakansebelumnya = 3;
}

public void Kiri(){
arah = 3;
this.move(-laju, 0);
gerakansebelumnya = 4;
}

public void undo(){
switch(arah){
case 0 :
this.move(0,+ laju);
break;
case 1:
this.move(0,- laju);
break;
case 2:
this.move(-laju, 0);
break;
case 3:
this.move(+laju, 0);
break;
}
}
}

source code untuk Petunjuk.java :
package source;

import javax.microedition.lcdui.*;
class Petunjuknya
extends Form
implements CommandListener
{
private final PlaneWarrior midlet;
private final Command kembali;
String pesan1, pesan2;
int tipe;

Petunjuknya(PlaneWarrior midlet, int Tipe)
{
super("Petunjuknya");
this.midlet = midlet;
this.tipe = Tipe;
pesan();
pesan1 = "- Tembak aja musuhnya...\n" +
" Tombol ** Petunjuk\n" +
" UP/2 ** Bergerak ke atas\n" +
" DOWN/8 ** Bergerak ke bawah\n" +
" RGHT/6 ** Bergerak ke kanan\n" +
" LEFT/4 ** Bergerak ke kiri\n"+
" SHOOT/5 ** Menembak\n"+
"** Bila pesawat bertabrakan dengan pesawat musuh akan mengurangi nyawa **\n\n"+
"...Selamat Mencoba yaa...\n\n" +
"...LET'S PLAY....\n";
append(new StringItem(null, pesan1));
append(new StringItem(null, pesan2));
kembali = new Command("Kembali", Command.BACK, 0);
addCommand(kembali);
setCommandListener(this);
}
public void commandAction(Command c, Displayable d){
switch(tipe){
case 0 :
midlet.tampilan_utama();
break;
case 1 :
midlet.lanjut(1);
break;
case 2 :
midlet.lanjut(2);
break;
case 3 :
midlet.lanjut(3);
break;
case 4 :
midlet.lanjut(4);
break;
}
}

void pesan(){
switch(tipe){
case 0 :
pesan2 = "instruksi di menu utama";
break;
case 1 :
pesan2 = "instruksi di level 1";
break;
case 2 :
pesan2 = "instruksi di level 2";
break;
case 3 :
pesan2 = "instruksi di level 3";
break;
case 4 :
pesan2 = "instruksi di level 4";
break;
}
}
}

source code untuk PlaneWarrior.java :
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package source;

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.media.*;
import javax.microedition.media.control.*;
import java.io.IOException;

/**
* @author ichong
*/
public class PlaneWarrior extends MIDlet implements CommandListener, PlayerListener{
private Level1 canvas1;
private Level2 canvas2;
private Level3 canvas3;
public String nama;
private TextBox textBox;
private boolean level2=false, level3=false, level4=false;
Display display;
private static Player player;
private VolumeControl vc;
public int level = 1;
public int levelterakhir;
public int skor;
private List menu_utama;
private List menu_new;
private List lanjut;
public int instruksi;
Command cmBack, exit, ins1, ins2, ins3, ins4, con1, con2, con3, cmSubmit;
public boolean main = false;
Best_of_the_best read;

public PlaneWarrior(){

if(canvas1==null){
try{
canvas1 = new Level1(this, display);
exit = new Command("Exit", Command.EXIT, 1);
ins1 = new Command("Petunjuknya", Command.SCREEN, 2);
con1 = new Command("Lanjutkan Permainan", Command.SCREEN, 3);
canvas1.addCommand(exit);
canvas1.addCommand(ins1);
canvas1.addCommand(con1);
canvas1.setCommandListener(this);
}catch(IOException ioe){
System.out.println(ioe);
}
}
if(canvas2==null){
try{
canvas2 = new Level2(this, display);
exit = new Command("Exit", Command.EXIT, 1);
ins2 = new Command("Petunjuknya", Command.SCREEN, 2);
con2 = new Command("Lanjutkan Permainan", Command.SCREEN, 3);
canvas2.addCommand(exit);
canvas2.addCommand(ins2);
canvas2.addCommand(con2);
canvas2.setCommandListener(this);
}catch(IOException ioe){
System.out.println(ioe);
}
}

if(canvas3==null){
try{
canvas3 = new Level3(this, display);
exit = new Command("Exit", Command.EXIT, 1);
ins3 = new Command("Petunjuknya", Command.SCREEN, 2);
con3 = new Command("Lanjutkan Permainan", Command.SCREEN, 3);
canvas3.addCommand(exit);
canvas3.addCommand(ins3);
canvas3.addCommand(con3);
canvas3.setCommandListener(this);
}catch(IOException ioe){
System.out.println(ioe);
}
}
}



public void startApp() {
list();
playintro();

display = Display.getDisplay(this);
read = new Best_of_the_best(this, display);
//savelevel();
loadlevel();
Display.getDisplay(this).setCurrent(new welcome(this));
//this.mulai_permainan3();
}

public void pauseApp() {
}

public void destroyApp(boolean unconditional) {
if (canvas1 != null)
canvas1.stop();
}

public void list(){
cmBack = new Command("Kembali", Command.BACK, 1);
cmSubmit = new Command("OK dah!!", Command.OK, 1);

menu_utama = new List("MENU UTAMA", List.IMPLICIT);
menu_utama.append("Permainan Baru", null);
menu_utama.append("Lanjutkan Permainan", null);
menu_utama.append("Best of the best", null);
menu_utama.append("Petunjuknya", null);
menu_utama.append("About", null);
menu_utama.append("Keluar",null);
menu_utama.setCommandListener(this);

textBox = new TextBox("Masukkan Nama Kamu yaa : ", "", 100, TextField.ANY);
textBox.addCommand(cmSubmit);
textBox.addCommand(cmBack);
textBox.setCommandListener(this);

lanjut = new List("Lanjutkan Permainan", List.IMPLICIT);
lanjut.append("level 1", null);

lanjut.addCommand(cmBack);
lanjut.setCommandListener(this);
}

void ubahcommandcanvas(){
canvas1.removeCommand(ins1);
canvas1.setCommandListener(this);
}

void tampilan_utama(){
Display.getDisplay(this).setCurrent(menu_utama);
}

void Instruksi(int tipe){
Display.getDisplay(this).setCurrent(new Petunjuknya(this, tipe));
}

void lanjut(int tipe){
switch(tipe){
case 1 :
canvas1.setFullScreenMode(true);
display.setCurrent(canvas1);
break;
case 2 :
canvas2.setFullScreenMode(true);
display.setCurrent(canvas2);
break;
case 3 :
canvas3.setFullScreenMode(true);
display.setCurrent(canvas3);
break;
}

}

void mulai_permainan1(){
main = true;
//playlagu();
playback();
canvas1.start();
canvas1.setFullScreenMode(true);
display.setCurrent(canvas1);
}

void mulai_permainan2(){
main = true;
//playlagu();
playback();
canvas2.start();
canvas2.setFullScreenMode(true);
display.setCurrent(canvas2);
}

void mulai_permainan3(){
main = true;
//playlagu();
playback();
canvas3.start();
canvas3.setFullScreenMode(true);
display.setCurrent(canvas3);
}


public void commandAction (Command command, Displayable displayable){
if(displayable == menu_utama){
if(command == List.SELECT_COMMAND){
switch(menu_utama.getSelectedIndex()){
case 0 :
//permainan baru
Save save2 = new Save("jelek");
save2.open();
save2.delete();
save2.close();
display.setCurrent(textBox);
break;
case 1 :
//lanjutkan permainan
display.setCurrent(lanjut);
break;
case 2 :
//best of the best
display.setCurrent(read);
break;
case 3 :
//petunjuknya
instruksi = 0;
Instruksi(0);
break;
case 4 :
//about
Display.getDisplay(this).setCurrent(new About(this));
break;
case 5 :
//keluar
exitMIDlet();
break;
}
}
}else if(displayable == textBox){
if(command == cmSubmit){
level = 1;
skor = 0;
nama = textBox.getString();
if(level2){
lanjut.delete(1);
level2=false;
}
if(level3){
lanjut.delete(2);
level3=false;
}
Display.getDisplay(this).setCurrent(new loading(this, 1));
}else if(command == cmBack){
display.setCurrent(menu_utama);
}
}else if(displayable == lanjut){
if(command == List.SELECT_COMMAND){
switch(lanjut.getSelectedIndex()){
case 0 :
level = 1;
Display.getDisplay(this).setCurrent(new loading(this, 1));
break;
case 1 :
level = 2;
mulai_permainan2();
break;
case 2 :
level = 3;
mulai_permainan3();
break;
}
}else if(command == cmBack){
display.setCurrent(menu_utama);
}
}
if (command.getCommandType() == Command.EXIT) {
main = false;
playintro();
//stoplagu();
display.setCurrent(menu_utama);
}else if (command == ins1) {
Instruksi(1);
}else if (command == ins2) {
Instruksi(2);
}else if (command == ins3) {
Instruksi(3);
}else if (command == ins4) {
Instruksi(4);
}else if (command == con1){
if(canvas1.menang==true){
this.skor = skor + canvas1.Skor;
read.saverecord();
if(!level2){
lanjut.append("level 2", null);
level2=true;
}
Display.getDisplay(this).setCurrent(new loading(this, 2));
}else{
lanjut(1);
}
}else if (command == con2){
if(canvas2.menang==true){
this.skor = skor + canvas2.Skor;
read.saverecord();
if(!level3){
lanjut.append("level 3", null);
level3=true;
}
Display.getDisplay(this).setCurrent(new loading(this, 3));
}else{
lanjut(2);
}
}else if (command == con3){
if(canvas3.menang==true){
this.skor = canvas3.Skor;
read.saverecord();
Display.getDisplay(this).setCurrent(new loading(this, 5));
}else{
lanjut(4);
}
}
}

private void playintro(){
try{
player.stop();
if(player!=null){
player.close();
}
}catch(Exception e){
}
try {
playMedia("/res/intro.mid");
} catch (Exception e) {
e.printStackTrace();
}
}

private void playback(){
try{
player.stop();
if(player!=null){
player.close();
}
}catch(Exception e){
}
try {
playMedia("/res/backsound.mid");
} catch (Exception e) {
e.printStackTrace();
}
}

private void playMedia(String file)
throws Exception {
player = Manager.createPlayer(getClass().getResourceAsStream(file), "audio/midi");

player.addPlayerListener(this);

player.setLoopCount(-1);
player.prefetch();
player.realize();

vc = (VolumeControl)player.getControl("VolumeControl");
if (vc != null) vc.setLevel(50);

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)) {
}
}

public void loadlevel(){
Save save2 = new Save("jelek");
save2.open();

save2.close();

String Level;
nama = save2.readNama();
Level = save2.readLevel();
if(Level == "level2"){
lanjut.append("level2", null);
level2=true;
}else if(Level == "level3"){
lanjut.append("level2", null);
level2=true;
lanjut.append("level3", null);
level2=true;
}

System.out.println("neh die " + Level + nama);
System.out.println(nama);
//save.close();
}

public void savelevel(){
Save save2 = new Save("jelek");
save2.open();
String Level = "level1";
switch(level){
case 1 :
Level = "level1";
break;
case 2 :
Level = "level2";
break;
case 3 :
Level = "level3";
break;
case 4 :
Level = "level4";
break;

}
save2.delete();
save2.saveRecordStream(level, nama, true, 0);
save2.saveRecordStream(level, nama, true, 0);
System.out.println(nama);
save2.close();
}

public void exitMIDlet(){
savelevel();
try{
player.stop();
if(player!=null){
player.close();
}
}catch(Exception e){
}
destroyApp(true);
notifyDestroyed();
}

}

source code untuk Save.java :
package source;

import javax.microedition.rms.*;
import java.io.*;

class Save {
private RecordStore store;
private String storage;
private int amount = 0;

Save(String storage, int amount) {
store = null;
this.amount = amount;
this.storage = storage;
}

Save(String storage){
this.storage = storage;
}

RecordStore getStore() {
return store;
}

boolean open() {
try {
store = RecordStore.openRecordStore(storage, true);
} catch (RecordStoreException rse) {
}

if (store == null)
return false;

return true;
}

void close() {
try {
if (store != null)
store.closeRecordStore();
} catch (RecordStoreException rse) {
}
}

void delete() {
try {
store.deleteRecordStore(storage);
} catch (Exception e) {
}
}

void saveRecord(int recID, String str) {
byte[] rec = str.getBytes();
try {
if (recID == 0)
store.addRecord(rec, 0, rec.length);
else
store.setRecord(recID, rec, 0, rec.length);
} catch (RecordStoreException rse) {
System.out.println("gagal");
}
}

String readRecord(int recID) {
try {
byte[] recData = new byte[amount];
int len;

len = store.getRecord(recID, recData, 0);
return new String(recData, 0, len);
} catch (RecordStoreException rse) {
return "null";
}
}

void saveRecordStream(int skor, String nama, boolean bPublish, int recID) {
try {
ByteArrayOutputStream strmBytes = new ByteArrayOutputStream();
DataOutputStream strmDataType = new DataOutputStream(strmBytes);
byte[] record;


strmDataType.writeInt(skor);
strmDataType.writeUTF(nama);
strmDataType.writeBoolean(bPublish);
strmDataType.flush();

record = strmBytes.toByteArray();
try {
if (recID == 0)
store.addRecord(record, 0, record.length);
else
store.setRecord(recID, record, 0, record.length);
} catch (RecordStoreException rse) {
}

strmBytes.reset();

strmBytes.close();
strmDataType.close();
} catch (Exception e) {
System.out.println("gagal");
}
}

String readRecordStreamSortInt() {
try {
String rec = "";
byte[] recData = new byte[50];

ByteArrayInputStream strmBytes = new ByteArrayInputStream(recData);
DataInputStream strmDataType = new DataInputStream(strmBytes);

if (store.getNumRecords() > 0){
SortInt sort = new SortInt();
int i = 1;
RecordEnumeration re = store.enumerateRecords(null, sort, false);
while (re.hasNextElement()){
store.getRecord(re.nextRecordId(), recData, 0);

rec = rec + strmDataType.readInt() + " | " + strmDataType.readUTF() + "\n";
strmBytes.reset();
}
sort.sortIntClose();
re.destroy();
}

strmBytes.close();
strmDataType.close();
return rec;
}catch (Exception e){
return null;
}
}

String readNama() {
try {
String rec = "";
byte[] recData = new byte[50];

ByteArrayInputStream strmBytes = new ByteArrayInputStream(recData);
DataInputStream strmDataType = new DataInputStream(strmBytes);

if (store.getNumRecords() > 0){
SortInt sort = new SortInt();
int i = 1;
RecordEnumeration re = store.enumerateRecords(null, sort, false);
while (re.hasNextElement()){
store.getRecord(re.nextRecordId(), recData, 0);

rec = rec + strmDataType.readUTF();
strmBytes.reset();
}
sort.sortIntClose();
re.destroy();
}

strmBytes.close();
strmDataType.close();
return rec;
}catch (Exception e){
return null;
}
}

String readLevel() {
try {
String rec = "";
byte[] recData = new byte[50];

ByteArrayInputStream strmBytes = new ByteArrayInputStream(recData);
DataInputStream strmDataType = new DataInputStream(strmBytes);

if (store.getNumRecords() > 0){
SortInt sort = new SortInt();
int i = 1;
RecordEnumeration re = store.enumerateRecords(null, sort, false);
while (re.hasNextElement()){
store.getRecord(re.nextRecordId(), recData, 0);

rec = rec + strmDataType.readInt();
strmBytes.reset();
}
sort.sortIntClose();
re.destroy();
}

strmBytes.close();
strmDataType.close();
return rec;
}catch (Exception e){
return null;
}
}
};

source code untuk SortInt.java :
package source;

import java.io.*;
import javax.microedition.rms.*;

class SortInt implements RecordComparator {
private byte[] recData = new byte[10];
private ByteArrayInputStream strmBytes = null;
private DataInputStream strmDataType = null;

public void sortIntClose() {
try{
if (strmBytes != null)
strmBytes.close();
if (strmDataType != null)
strmDataType.close();
}catch (Exception e){
}
}

public int compare(byte[] record1, byte[] record2){
int x1, x2;
try{
int maxsize = Math.max(record1.length, record2.length);
if (maxsize > recData.length)
recData = new byte[maxsize];

strmBytes = new ByteArrayInputStream(record1);
strmDataType = new DataInputStream(strmBytes);
x1 = strmDataType.readInt();

strmBytes = new ByteArrayInputStream(record2);
strmDataType = new DataInputStream(strmBytes);
x2 = strmDataType.readInt();
if (x1 == x2)
return RecordComparator.EQUIVALENT;
else if (x1 > x2)
return RecordComparator.PRECEDES;
else
return RecordComparator.FOLLOWS;
} catch (Exception e) {
return RecordComparator.EQUIVALENT;
}
}
}

source code untuk loading.java :
package source;

import javax.microedition.lcdui.*;
class loading extends Canvas implements Runnable{
private final PlaneWarrior midlet;
private Image gambar,gambar2;
private volatile boolean dismissed = false;
int level;

loading(PlaneWarrior midlet, int Level){
level = Level;
this.midlet = midlet;
setFullScreenMode(true);
try {
gambar = Image.createImage("/res/pesawatraja.png");
}catch(java.io.IOException e){
}
new Thread(this).start();
}
public void run(){
synchronized(this){
try{
wait(5000L);
}
catch (InterruptedException e){
}
skip();
}
}


public void paint(Graphics g){
int lebar = getWidth();
int tinggi = getHeight();
g.setColor(0,0,0);
g.fillRect(0, 0, lebar, tinggi);
g.drawImage(gambar,getWidth()/2-25,getHeight()/2-40,Graphics.TOP | Graphics.LEFT);
g.setColor(255,255,255);
if(level<5)
g.drawString("loading level " + level, getWidth()/2-30, getHeight()/2+40, Graphics.TOP | Graphics.LEFT);
else
g.drawString("the end", getWidth()/2-30, getHeight()/2+40, Graphics.TOP | Graphics.LEFT);
}



public synchronized void keyPressed(int keyCode){
skip();
}


private void skip(){
if (!dismissed){
dismissed = true;
switch(level){
case 1 :
midlet.mulai_permainan1();
break;
case 2:
midlet.mulai_permainan2();
break;
case 3:
midlet.mulai_permainan3();
break;
case 5 :
midlet.tampilan_utama();
break;
}
}
}
}

source code untuk welcome.java :
package source;

import javax.microedition.lcdui.*;
class welcome extends Canvas implements Runnable{
private final PlaneWarrior midlet;
private Image gambar, gambar2;
private volatile boolean dismissed = false;
welcome(PlaneWarrior midlet){
this.midlet = midlet;
setFullScreenMode(true);
try {
gambar = Image.createImage("/res/pesawatraja.png");
gambar2 = Image.createImage("/res/planewarrior.png");
}catch(java.io.IOException e){
}
new Thread(this).start();
}
public void run(){
synchronized(this){
try{
wait(5000L);
}
catch (InterruptedException e){
}
skip();
}
}


public void paint(Graphics g){
int lebar = getWidth();
int tinggi = getHeight();
g.setColor(0,0,0);
g.fillRect(0, 0, lebar, tinggi);
g.drawImage(gambar,getWidth()/2-25,getHeight()/2-40,Graphics.TOP | Graphics.LEFT);
g.drawImage(gambar2,getWidth()/2-40,getHeight()/2+20,Graphics.TOP | Graphics.LEFT);
}


public synchronized void keyPressed(int keyCode){
skip();
}


private void skip(){
if (!dismissed){
dismissed = true;
midlet.tampilan_utama();
}
}
}


Implementasi/Layout :

Tampilan Utama :













Tampilan Awal Game :













Tampilan Permainan Baru :














Tampilan About :

Sabtu, 12 Maret 2011

Pengantar Komputasi Modern

Definisi Komputasi Modern

Komputasi merupakan algoritma yang digunakan untuk menemukan suatu cara agar dapat memecahkan suatu masalah dari sebuah data input. Komputasi ini merupakan bagian dari ilmu matematika dan ilmu komputer. Secara umum ilmu komputasi adalah bidang ilmu yang mempunyai perhatian pada penyusunan model matematika dan teknik penyelesaian numerik serta penggunaan komputer untuk menganalisis dan memecahkan masalah-masalah ilmu (sains).

Bidang ini berbeda dengan ilmu komputer (computer science), yang mengkaji komputasi, komputer dan pemrosesan informasi. Bidang ini juga berbeda dengan teori dan percobaan sebagai bentuk tradisional dari ilmu dan kerja keilmuan. Dalam ilmu alam, pendekatan ilmu komputasi dapat memberikan berbagai pemahaman baru, melalui penerapan model-model matematika dalam program komputer berdasarkan landasan teori yang telah berkembang, untuk menyelesaikan masalah-masalah nyata dalam ilmu tersebut.

Kelahiran Komputasi Modern

Ilmu atau sains berdasarkan obyek kajiannya dibedakan antara Fisika, Kimia, Biologi dan Geologi. Ilmu dapat pula digolongkan berdasarkan metodologi dominan yang digunakannya, yaitu ilmu pengamatan/percobaan (observational/experimental science), ilmu teori (theoretical science) dan ilmu komputasi (computational science). Yang terakhir ini bisa dianggap bentuk yang paling baru yang muncul bersamaan dengan perkembangan kekuatan pemrosesan dalam komputer dan perkembangan teknik-teknik metode numerik dan metode komputasi lainnya.

Sejarah Komputasi Modern

Komputasi Modern pertama kali digagasi oleh John Von Neumann. Beliau di lahirkan di Budapest, ibukota Hungaria pada 28 Desember 1903 dengan nama Neumann Janos. Karya – karya yang dihasilkan adalah karya dalam bidang matematika, teori kuantum, game theory, fisika nuklir, dan ilmu komputer. Beliau juga merupakan salah seorang ilmuwan yang sangat berpengaruh dalam pembuatan bom atom di Los Alamos pada Perang Dunia II lalu. Kepiawaian John Von Neumann teletak pada bidang teori game yang melahirkan konsep automata, teknologi bom atom dan komputasi modern yang kemudian melahirkan komputer. Von Neumann telah menjadi ilmuwan besar abad 21. Dia adalah anak pertama dari pasangan Neumann Miksa dan Kann Margit. Di sana, nama keluarga diletakkan di depan nama asli. Sehingga dalam bahasa Inggris, nama orang tuanya menjadi Max Neumann. Pada saat Max Neumann memperoleh gelar, maka namanya berubah menjadi Von Neumann. Setelah bergelar doktor dalam ilmu hukum, dia menjadi pengacara untuk sebuah bank. Pada tahun 1903, Budapest terkenal sebagai tempat lahirnya para manusia genius dari bidang sains, penulis, seniman dan musisi.







Arsitektur Von Nuemann adalah komputer dengan program yang tersimpan (program dan data disimpan pada memori) dengan pengendali pusat, I/O, dan memori yang dikenal dengan nama "Arsitektur von Neumann".













Arsitektur von Neumann

Dalam kerjanya komputasi modern menghitung dan mencari solusi dari masalah yang ada, dan perhitungan yang dilakukan itu meliputi :

1. Akurasi (big, Floating point)

2. Kecepatan (dalam satuan Hz)

3. Problem Volume Besar (Down Sizzing atau pararel)

4. Modeling (NN & GA)

5. Kompleksitas (Menggunakan Teori big O)

Model Komputasi

Komputasi memiliki 3 model, yaitu

  1. Mesin Mealy
  2. Mesin Moore
  3. Petri net

1. Mesin Mealy












Diagram fasa dari mesin Mealy sederhana


Dalam teori komputasi sebagai konsep dasar sebuah komputer, mesin Mealy adalah otomasi fasa berhingga (finite state automaton atau finite state tranducer) yang menghasilkan keluaran berdasarkan fasa saat itu dan bagian masukan/input. Dalam hal ini, diagram fasa (state diagram) dari mesin Mealy memiliki sinyal masukan dan sinyal keluaran untuk tiap transisi. Prinsip ini berbeda dengan mesin Moore yang hanya menghasilkan keluaran/output pada tiap fasa.

Nama Mealy diambil dari “G. H. Mealy” seorang perintis mesin-fasa (state-machine) yang menulis karangan “A Method for Synthesizing Sequential Circuits” pada tahun 1955.


2. Mesin Moore


Dalam teori komputasi sebagai prinsip dasar komputer, mesin Moore adalah otomasi fasa berhingga (finite state automaton) di mana keluarannya ditentukan hanya oleh fasa saat itu (dan tidak terpengaruh oleh bagian masukan/input). Diagram fasa (state diagram) dari mesin Moore memiliki sinyal keluaran untuk masing-masing fasa. Hal ini berbeda dengan mesin Mealy yang mempunyai keluaran untuk tiap transisi.

Nama Moore diambil dari “Edward F. Moore” seorang ilmuwan komputer dan perintis mesin-fasa (state-machine) yang menulis karangan “Gedanken-experiments on Sequential Machines”.


3. Petri net

Petri net adalah salah satu model untuk merepresentasikan sistem terdistribusi diskret. Sebagai sebuah model, Petri net merupakan grafik 2 arah yang terdiri dari place, transition, dan tanda panah yang menghubungkan keduanya. Di samping itu, untuk merepresentasikan keadaan sistem, token diletakkan pada place tertentu. Ketika sebuah transition terpantik, token akan bertransisi sesuai tanda panah.










Contoh transisi token pada Petri net


Penggunaan Komputasi Modern

Secara sederhana komputasi dapat diartikan sebagai sebuah cara untuk menemukan pemecahan masalah dari suatu input data dengan menggunakan algoritma yang ses

uai. Hal ini disebut juga sebagai teori komputasi, sebagai suatu sub-bidang yaitu salah satunya dari ilmu komputer dan matematika.

Pada awalnya kegiatan pemecahan dilakukan dengan cara sederhana menggunakan kertas dan pena, kapur, dan lain sebagainya. Sebagai contoh adalah perhitungan matematis 3x(2+18). Dengan menggunakan kalkulator kita dapat menyelsaikan perhitungan tersebut menggunakan algoritma sebagai berikut :

  1. input nilai 2 sebagai variabel B.
  2. masukkan operator "+".
  3. input nilai 18 sebaga i variabel C.
  4. simpan hasil (2+18) sebagai variab el D.
  5. masukkan operator "x".
  6. input nilai 3 sebagai variabel A.
  7. simpan hasil 3x(2+18) sebagai variabel E.
  8. cet ak variabel E.
  9. Ulangi dari langkah 1 untuk nilai inputan yang lain.










Algoritma di atas termasuk sebuah algoritma sederhana untuk pemecahan sebuah perhitungan matematis. Apa yang akan terjadi jika perhitungan yang akan dilakukan memerlukan variabel yang lebih banyak dan algoritma yang digunakan lebih kompleks dan panjang? Alat sesederhana kalkulator belum tentu mampu menyelesaikannya dalam waktu yang singkat. Atas dasar itulah seorang ilmuwan bidang matematika John von Neumann mengemukakan teori komputasi modern.


Referensi :

http://www.komputasi.lipi.go.id/utama.cgi?cetakartikel&1209393042

http://id.wikipedia.org/wiki/Komputasi

http://id.wikipedia.org/wiki/Kategori:Model_komputasi

http://id.wikipedia.org/wiki/Mesin_Mealy

http://id.wikipedia.org/wiki/Petri_net

http://www.smartssolution.info/komputasi-modern.html