Senin, 11 April 2011

Pembuatan Aplikasi Game Snake 3D pada Mobile..



Assalamu'alaikum Wr.Wb.
Ini merupakan tugas yang diberikan oleh Dosen saya untuk Mata Kuliah Pemrograman Multimedia. Sebenernya beliau memberikan 3 pilihan tugas, salah satunya yaitu membuat Aplikasi Game pada mobile. Sebelumnya saya bingung harus memilih dari ketiga tugas tersebut, namun setelah berpikir-pikir, mungkin sebaiknya saya membahas tentang pembuatan aplikasi game ini. oke, pada kesempatan ini, aplikasi  game yang saya buat ini adalah game Snake 3D. berawal dari perkembangan aplikasi permainan pada telepon seluler juga telah semakin maju, ini terlihat dari makin banyaknya jenis – jenis permainan yang ada pada telpon seluler.  Seperti kita ketahui bahwa semua orang butuh permainan tidak hanya untuk hiburan, tetapi juga untuk melatih logika, insting dan ketepatan. Oleh karena itu, saya membuat sebuah aplikasi permainan sederhana ini dengan menggunakn J2ME

Apa sih J2ME itu ?
Java2 Micro Edition atau yang biasa disebut J2ME adalah lingkungan pengembangan yang didesain untuk meletakkan perangkat lunak JAVA pada barang elektronik berserta perangkat pendukungnya. Pada J2ME, jika perangkat lunak berfungsi dengan baik pada sebuah perangkat maka belum tentu juga berfungsi baik pada perangkat yang lain. J2ME membawa Java ke dunia informasi, komunikasi, dan perangkat komputasi yang lebih kecil dibandingkan dengan computer desktop. J2ME biasa digunakan pada telepon selular, pager, PDA, dan sejenisnya.
Teknologi J2ME juga memiliki beberapa keterbatasan jika diaplikasikan pada ponsel. J2ME sangat bergantung pada device yang digunakan, bisa dari merk ponsel, maupun kemampuan ponsel, dan dukungan terhadap teknologi J2ME. MIsalnya, jika sebuah ponsel tidak memiliki kamera maka jelas J2ME pada ponsel tersebut tidak dapat mengakses kamera.

Apa sih Game Snake 3D itu?

Permainan Snake 3D adalah salah satu permainan sederhana dan populer yang dikenal masyarakat dan dimainkan pada telepon seluler. Disini objek ular mencari makanan berupa objek kubus. Hal ini, dipengaruhi oleh kecepatan ular tersebut dalam mencari makanan yang disediakan sesuai dengan vektor posisi makanan itu ditampilkan. Semakin banyak objek ular tersebut memakan objek makanan, maka objek ularakan semakin bertambah panjang. Saat objek ular memakan makanan, maka pemain akan mendapatkan point. Point itu akan semakin terus bertambah, apabila objek ular terus memakan makanan. Pertambahan point akan bertambah sebanyak 2 poin. Pada permainan Snake 3D ini, pemain dapat memilih tingkat kesulitan sesuai dengan keinginan. Tingkat kesulitan yang terdapat pada permainan ini antara lain: Tingkat Easy, Normal, dan Hard.Permainan akan berakhir (Game Over) jika objek ular tersebut keluar dari maze atau objek ular menabrak objek nya sendiri.

Terus, Apa aja sih yang diperlukan untuk membuat game ini??
§  pertama kali yang harus kita install yaitu JAVA itu sendiri,untuk memproses code yang akan kita gunakan. JAVA yang digunakan jdk 1.6. silahkan mendowload disini
§  Selanjutnya kita juga menginstall WTK. ini merupakan software emulator yang digunakan untuk menge test aplikasi mobile yang telah dibuat. Silahkan Download disini
§  Kita juga menginstall editor Notepad ++ . software ini berguna sebagai editor coding atau tempat mengetikkan code program. Silahkan Download disini.

Just Info
pada game ini kita membuat 6 class pada java, yaitu:
1. MIDletMain.java
2. SnakeBody.java
3. Snakecube3D.java
4. SnakeFood.java
5. Ground.java
6. GameLoop.java
Keenam class itu merupakan pembangun game ini.
Ø  MIDletMain.java merupakan kelas utama sebagai Midlet. Disini kita mendeklarasikan midletmain dan mendeklarasikan objek dan variabel yang digunakan. Kemudian kita membuat method untuk mengekekusi class utama aplikasi permainan atau menjalankan aplikasi ini. berikut code program untuk class MIDletMain.
import java.util.Timer;
import java.util.TimerTask;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;




public class MIDLetMain extends MIDlet implements CommandListener {


static MIDLetMain instance;
GameLoop displayable= new GameLoop();
Timer itimer= new Timer();
public MIDLetMain(){
this.instance=this;
}


public void startApp() {
Display.getDisplay(this).setCurrent(displayable);


}


public void pauseApp() {
}


public void destroyApp(boolean unconditional) {
}
public static void quitApp(){
instance.destroyApp(true);
instance.notifyDestroyed();
instance=null;
}


public void commandAction(Command command, Displayable displayable) {
}


}















Ø  SnakBody.java merupakan coding untuk membentuk tampilan badan snake. Snake disini membentuk gambar 3D. Disini juga di deklarasikan panjang badan snake, nilai yang diperoleh pemain, level dan kontrol pointer. Berikiut ini code untuk class SnakeBody.





public class SnakeBody {








private Snakecube3D[] myBody=new Snakecube3D[400] ;
private int[] colors=new int[]{0x880000,0xCC0000,0xFF0000,0xFF2F2F,0xFF4A4A,0xFF7979,0xFFA4A4};
private short len=5;
private short score;
private short value;
private short direction=4;
private float ycamera=30;
private float xcamera;
private float zcamera=30;
public static boolean GameOver=false;
public static boolean canChange=true;
public static boolean GamePause;




public SnakeBody() {
myBody[0]=new Snakecube3D((short)0,(int)(0xFFCC00));
// for() {
myBody[i]=new Snakecube3D(i,colors[i%7]);
}
}


public void setGamePause(boolean GamePause) {
this.GamePause = GamePause;
}


public boolean isGamePause() {
return GamePause;
}


public void setDirection(short dir) {
if(direction>=3&&dir<3) { direction = dir; canChange=false; } else if(direction<=2&&dir>2){
direction = dir;
canChange=false;
}


}




public Snakecube3D[] getMyBody() {
return myBody;
}
public void update(SnakeFood myfood) {


for(int i=len-1;i>0;i--) {
myBody[i].setVertix(myBody[i-1].getVert());
}




if(direction==1) {


myBody[0].decreaseZ();
zcamera-=5;
} else
if(direction==2) {
myBody[0].increaseZ();
zcamera+=5;
} else if(direction==3) {
myBody[0].increaseX();
xcamera+=4;


} else if(direction==4) {
myBody[0].decreaseX();
xcamera-=4;
}


GameOver=myBody[0].getCheckBound(direction);


myfood.update(myBody[0],direction);


checkAllBody();
if(myfood.checkEaten()) {


score+=value;
len++;
myBody[len-1]=new Snakecube3D((short)(len-1),colors[len%7]);
myBody[len-1].setIVbcube(myBody[len-2].getIVbcube());
myfood.generateFood();
myfood.setEaten(false);
}


canChange=true;
}
public void checkAllBody() {
//for() {
if(myBody[0].getCheckBodyCollision(direction,myBody[i],i)) {
GameOver=true;


return;
}
}
}
public short getScore() {
return score;
}




public float getXcamera() {
return xcamera;
}


public float getYcamera() {
return ycamera;
}


public float getZcamera() {
return zcamera;
}


public short getLen() {
return len;
}


public void setValue(short value) {
this.value = value;
}




}

Ø  Snakecube3D.java merupakan bagian yang  mendeklarasian warna yang terdapat pada kubus 3D nya. Dan membuat arah gerakan snake tersebut untuk mencari makanan. Arah gerakan snake tersebut ke arah kanan,kiri,atas dan bawah. berikut adalah code program dari class SnakeCube3D.



import javax.microedition.m3g.Appearance;
import javax.microedition.m3g.Fog;
import javax.microedition.m3g.IndexBuffer;
import javax.microedition.m3g.Material;
import javax.microedition.m3g.Transform;
import javax.microedition.m3g.TriangleStripArray;
import javax.microedition.m3g.VertexArray;
import javax.microedition.m3g.VertexBuffer;


public class Snakecube3D {
short[] vert={
0,0,0, 0,5,0, -5,0,0, -5,5,0,


0,0,-5, 0,5,-5, 0,0,0, 0,5,0 ,


0,5,0, 0,5,-5, -5,5,0, -5,5,-5 ,


-5,0,0, -5,5,0, -5,0,-5, -5,5,-5 ,


-5,0,-5, -5,5,-5, 0,0,-5, 0,5,-5 ,


};
byte[] norm = {
0, 0, 127, 0, 0, 127, 0, 0, 127, 0, 0, 127,
0, 127, 0, 0, 127, 0, 0, 127, 0, 0, 127, 0,
0, 127, 0, 0, 127, 0, 0, 127, 0, 0, 127, 0,
-127, 0, 0, -127, 0, 0, -127, 0, 0, -127, 0, 0,
0, 0,-127, 0, 0,-127, 0, 0,-127, 0, 0,-127,
};
private int [] stripLen={4,4,4,4,4};
private Appearance iAppearancecube;
private VertexBuffer iVbcube;
private VertexArray verticeArray;
private IndexBuffer iIbcube;
private VertexArray normArray;
private Material iMaterial;
private Transform transform;
private Fog fm;
private int color=0xFF0000;
public Snakecube3D() {
init();
}
public Snakecube3D(short index,int color) {
for() {
vert[i]=(short)(vert[i]+ 5*index);
}


this.color=color;
init();
}
public void init() {
transform = new Transform();
transform.postTranslate(0.0f,0.0f,0.0f);
verticeArray=new VertexArray(vert.length/3,3,2);
verticeArray.set(0,vert.length/3,vert);
normArray = new VertexArray(norm.length / 3, 3, 1);
normArray.set(0, norm.length/3, norm);
iVbcube=new VertexBuffer();
iVbcube.setPositions(verticeArray,1.0f,null);
iVbcube.setNormals(normArray);
iIbcube=new TriangleStripArray(0,stripLen);
iAppearancecube= new Appearance();
iMaterial=new Material();
iMaterial.setColor(Material.DIFFUSE,color);
iMaterial.setShininess(10.0f);




iAppearancecube.setMaterial(iMaterial);


}




public void increaseX() {


for() {
vert[i]=(short)(vert[i]+5);
}
newVertexarr();
}
public void decreaseX() {


for(s) {
vert[i]=(short)(vert[i]-5);
}
newVertexarr();
}
public void increaseZ() {


for() {
vert[i]=(short)(vert[i]+5);
}
newVertexarr();
}
public void decreaseZ() {


for() {
vert[i]=(short)(vert[i]-5);
}
newVertexarr();
}


public void newVertexarr() {


verticeArray=new VertexArray(vert.length/3,3,2);
verticeArray.set(0,vert.length/3,vert);
iVbcube=new VertexBuffer();
iVbcube.setPositions(verticeArray,1.0f,null);
iVbcube.setNormals(normArray);


}
public boolean getCheckBound(short dir) {


switch(dir) {
case 1: return vert[35]<=-50; case 2: return vert[26]>=50;
case 3:return vert[33]>=50;
case 4:return vert[24]<=-50; } return false; } public short getVertat(short index) { return vert[index]; } public boolean getCheckEat(short dir,short x,short z) { switch(dir) { case 1: case 3: return vert[33]==x&&vert[35]==z; case 2: return vert[27]==x&&vert[29]==z; case 4:return vert[24]==x&&vert[26]==z; } return false; } public void setVertix(short[] newver) { for() { vert[i]=newver[i]; } newVertexarr(); } public boolean getCheckBodyCollision(short dir,Snakecube3D bodypart,int i) { switch(dir) { case 1: case 4: return (vert[33]==bodypart.getVertat((short)33)&&vert[35]==bodypart.getVertat((short)35)); case 2: case 3:return (vert[24]==bodypart.getVertat((short)24)&&vert[26]==bodypart.getVertat((short)26)); } return false; } public void setIVbcube(VertexBuffer iVbcube) { this.iVbcube = iVbcube; } public void setIIbcube(IndexBuffer iIbcube) { this.iIbcube = iIbcube; } public short[] getVert() { return vert; } public VertexBuffer getIVbcube() { return iVbcube; } public Appearance getIAppearancecube() { return iAppearancecube; } public Transform getTransform() { return transform; } public IndexBuffer getIIbcube() { return iIbcube; } }


Ø   SnakeFood.java merupakan bagian pembuatan game yang digunakan untuk membuat makanan yang akan dimakan snake, makanan tersebut berbentuk kubus 3D. kita Deklarasikan vertex-vertex yang akan membentu kubus. berikut adalah code program dari class SnakeFood3D.





import java.io.IOException;
import java.util.Random;
import javax.microedition.lcdui.Image;
import javax.microedition.m3g.Appearance;
import javax.microedition.m3g.Fog;
import javax.microedition.m3g.Image2D;
import javax.microedition.m3g.IndexBuffer;
import javax.microedition.m3g.Material;
import javax.microedition.m3g.PolygonMode;
import javax.microedition.m3g.Texture2D;
import javax.microedition.m3g.Transform;
import javax.microedition.m3g.TriangleStripArray;
import javax.microedition.m3g.VertexArray;
import javax.microedition.m3g.VertexBuffer;




public class SnakeFood {
short[] vert={
0,0,0, 0,5,0, -5,0,0, -5,5,0,
0,0,-5, 0,5,-5, 0,0,0, 0,5,0 ,
0,5,0, 0,5,-5, -5,5,0, -5,5,-5 ,
-5,0,0, -5,5,0, -5,0,-5, -5,5,-5 ,
-5,0,-5, -5,5,-5, 0,0,-5, 0,5,-5 ,




};
short[] verttemp={
0,0,0, 0,5,0, -5,0,0, -5,5,0,
0,0,-5, 0,5,-5, 0,0,0, 0,5,0 ,
0,5,0, 0,5,-5, -5,5,0, -5,5,-5 ,
-5,0,0, -5,5,0, -5,0,-5, -5,5,-5 ,
-5,0,-5, -5,5,-5, 0,0,-5, 0,5,-5 ,




};
byte[] norm = {
0, 0, 127, 0, 0, 127, 0, 0, 127, 0, 0, 127,
0, 127, 0, 0, 127, 0, 0, 127, 0, 0, 127, 0,
0, 0, 127, 0, 0, 127, 0, 0, 127, 0, 0, 127,
-127, 0, 0, -127, 0, 0, -127, 0, 0, -127, 0, 0,
0, 0,-127, 0, 0,-127, 0, 0,-127, 0, 0,-127,
};
private boolean sign;
private short factor=5;
private short x;
private short z;


private int [] stripLen={4,4,4,4,4};
private Appearance iAppearancecube;
private VertexBuffer iVbcube;
private VertexArray verticeArray;
private IndexBuffer iIbcube;
private Transform transform;
private VertexArray normArray;
private Material iMaterial;
private Fog fm;


private Random myrand=new Random();
private boolean eaten;
public SnakeFood() {
transform = new Transform();
transform.postTranslate(0.0f,0.0f,0.0f);//No Transpostion
verticeArray=new VertexArray(vert.length/3,3,2);
verticeArray.set(0,vert.length/3,vert);
normArray = new VertexArray(norm.length / 3, 3, 1);
normArray.set(0, norm.length/3, norm);


iIbcube=new TriangleStripArray(0,stripLen);
iAppearancecube= new Appearance();
iMaterial=new Material();
iMaterial.setColor(Material.DIFFUSE,0x0000FF);


iMaterial.setShininess(100.0f);




iAppearancecube.setMaterial(iMaterial);
generateFood();


}


public IndexBuffer getIIbcube() {
return iIbcube;
}


public VertexBuffer getIVbcube() {
return iVbcube;
}


public Appearance getIAppearancecube() {
return iAppearancecube;
}


public Transform getTransform() {
return transform;
}
public void update(Snakecube3D head ,short dir) {


switch(dir) {
case 2:
case 4:eaten=head.getCheckEat(dir,vert[24],vert[26]);break;
case 1:
case 3:eaten=head.getCheckEat(dir,vert[33],vert[35]);break;
}


}


public void setEaten(boolean eaten) {
this.eaten = eaten;
}


public boolean checkEaten() {
return eaten;
}
public void generateFood() {




x=(short)((myrand.nextInt(19)*factor)-45);
z =(short)((myrand.nextInt(16)*factor)-40);






for() {
vert[i]=verttemp[i];
}


for() {
vert[i]+=x;
vert[i+2]+=z;


}


verticeArray=new VertexArray(vert.length/3,3,2);
verticeArray.set(0,vert.length/3,vert);
iVbcube=new VertexBuffer();


iVbcube.setPositions(verticeArray,1.0f,null);
iVbcube.setNormals(normArray);


}




}





Ø  Ground.java merupakan bagian yang digunakan untuk mendefinisikan vertex-vertex yang membentuk tekstur gambar 2D.berikut adalah code program dari class Ground.



import java.io.IOException;
import javax.microedition.lcdui.Image;
import javax.microedition.m3g.Appearance;
import javax.microedition.m3g.Fog;
import javax.microedition.m3g.Image2D;
import javax.microedition.m3g.IndexBuffer;
import javax.microedition.m3g.Material;
import javax.microedition.m3g.PolygonMode;
import javax.microedition.m3g.Texture2D;
import javax.microedition.m3g.Transform;
import javax.microedition.m3g.TriangleStripArray;
import javax.microedition.m3g.VertexArray;
import javax.microedition.m3g.VertexBuffer;


public class Ground {


short[] vert={
50,0,45, 50,0,-45, -50,0,45, -50,0,-45
};
byte[] norm = {


0, 0, 127, 0, 0, 127, 0, 0, 127, 0, 0, 127,


};
private int [] stripLen={4};
private Appearance iAppearancegd;
private Texture2D texture;
private Image2D image2D;
private VertexBuffer iVbgd;
private VertexArray verticeArray;
private IndexBuffer iIbgd;
private Transform transform;
private VertexArray normArray;
private Material iMaterial;
private Fog fm;
public Ground() {
transform = new Transform();
transform.postTranslate(0.0f,0.0f,0.0f);//No Transpostion
verticeArray=new VertexArray(vert.length/3,3,2);


verticeArray.set(0,vert.length/3,vert);
VertexArray normArray = new VertexArray(norm.length / 3, 3, 1);
normArray.set(0, norm.length/3, norm);
iVbgd=new VertexBuffer();
iVbgd.setPositions(verticeArray,1.0f,null);


iVbgd.setNormals(normArray);






iIbgd=new TriangleStripArray(0,stripLen);






iAppearancegd= new Appearance();
iMaterial=new Material();
iMaterial.setColor(Material.DIFFUSE,0x99CCFF);
iMaterial.setShininess( 100.0f);






fm=new Fog();
fm.setColor(0xffffff);
fm.setMode(Fog.LINEAR);
fm.setLinear(1,200);
fm.setDensity(0.5f);
iAppearancegd.setMaterial(iMaterial);
iAppearancegd.setFog(fm);


}


public short[] getVert() {
return vert;
}


public IndexBuffer getIIbgd() {
return iIbgd;
}


public Appearance getIAppearancegd() {
return iAppearancegd;
}


public VertexBuffer getIVbgd() {
return iVbgd;
}


public void setVert(short[] vert) {
this.vert = vert;
}
public int getLenght() {
return vert.length;
}


public Transform getTransform() {
return transform;
}




}



Ø  GameLoop.java berperan sebagai lapisan antarmuka aplikasi bagi pengguna dalam permainan Snake 3D. Kelas ini menangani tampilan grafis, menggunakan API low-level untuk menampilkan tampilan snake 3D nya, pointer pemain dengan animasi pergerakannya. API low-level juga digunakan untuk menangkap input penekanan tombol keyboard untuk mengendalikan permainan. API high-level berupa objek Command, digunakan sebagai akses keluar dari permainan yang sedang berlangsung.berikut adalah code program dari class GameLoop.





import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.m3g.Background;
import javax.microedition.m3g.Camera;
import javax.microedition.m3g.Graphics3D;
import javax.microedition.m3g.Light;
import javax.microedition.m3g.Transform;


public class GameLoop extends Canvas{


private Graphics3D iG3D;
private Camera iCamera;
private Light iLight;
private float iAngle=-45.0f;
private Background iBackground= new Background();
private Ground myg;
private SnakeBody mybody;
private Snakecube3D[] cubarr;
private SnakeFood skfood;
private boolean gameMode;
private Transform transform;
private boolean gameStarted;
private String[] choices=new String[]{"Easy","Normal","Hard"};
private short ch;
private myThread gameThread;


public GameLoop() {
transform = new Transform();


transform.postTranslate(0.0f,10.0f,0.0f);
transform.postRotate(-35.0f,1.0f,0.0f,0.0f);


setCommandListener(new CommandListener() {
public void commandAction(Command command, Displayable displayable) {
if(command.getCommandType()==command.EXIT){
if(!gameMode)
MIDLetMain.quitApp();
else {
mybody.GameOver=true;
}
}


}
});
try{
addCommand(new Command("Exit",Command.EXIT,1));
} catch(Exception e){
e.printStackTrace();
}
}






protected void paint(Graphics g) {
if(gameMode) {


if(mybody.GameOver) {


gameMode=false;


}
iG3D.bindTarget(g,true,Graphics3D.TRUE_COLOR | Graphics3D.DITHER);






Transform camtans = new Transform();


iG3D.resetLights();


iG3D.clear(iBackground);
iG3D.addLight(iLight,transform);




camtans.postTranslate(mybody.getXcamera(),mybody.getYcamera(),mybody.getZcamera());
camtans.postRotate(iAngle,1.0f,0.0f,0.0f);
iG3D.setCamera(iCamera,camtans);






iG3D.render(myg.getIVbgd(),myg.getIIbgd(),myg.getIAppearancegd(),myg.getTransform());


if(!mybody.isGamePause()&&gameStarted)
mybody.update(skfood);




for() {
iG3D.render(cubarr[i].getIVbcube(),cubarr[i].getIIbcube(),cubarr[i].getIAppearancecube(),cubarr[i].getTransform());
}
if(!skfood.checkEaten())
iG3D.render(skfood.getIVbcube(),skfood.getIIbcube(),skfood.getIAppearancecube(),skfood.getTransform());






iG3D.releaseTarget();
drawHeader(g);


if(!gameMode) {
gameStarted=false;
try {


Thread.sleep(1000);


gameThread.setGamemode(false);






gameThread=null;
} catch (InterruptedException ex) {


}
}




} else {
drawList(g);
}
}
public void drawList(Graphics g) {
g.fillRect(0,0,300,300);


g.setColor(0xFF0000);
g.fillRect(40,100+(ch*20),50,15);
g.setColor(0xFFFFFF);
for(int i=0;i0)
ch-=1;


} else if(action==DOWN) {

if(ch<2) ch+=1; } else if(action==FIRE) { { gameMode=true; gameStarted=false; SnakeBody.GameOver=false; SnakeBody.canChange=true; SnakeBody.GamePause=false; mybody=new SnakeBody(); skfood=new SnakeFood(); cubarr=mybody.getMyBody(); iG3D=Graphics3D.getInstance(); iCamera= new Camera(); iCamera.setPerspective(100.0f,(float)getWidth()/(float)getHeight(),1.0f,1500.0f); iLight=new Light(); iLight.setColor(0xFFFFFFFF); iLight.setIntensity(1.20f); myg=new Ground(); iBackground.setColor(0x000000); gameThread=new myThread((short)(230-(ch*70))); gameThread.start(); mybody.setValue((short)(2*(ch+1))); } } repaint(); } } class myThread extends Thread { private short sleeptime; private boolean gamemode; myThread(short time) { sleeptime=time; gamemode=true; } public void run() { while(gamemode) { try { repaint(); Thread.sleep(sleeptime); } catch (InterruptedException ex) { } } } public void setGamemode(boolean gamemode) { this.gamemode = gamemode; } } }



Berikutnya, Langkah apa nih yang mesti dilakukan?
            Pertama, kita membuka software Wireless ToolKit yang telah diinstal. Berikut tampilan awal Wireless ToolKit.


Kemudian kita klik New project, untuk membuat Project game Snake 3D. Selanjutnya ni yeh, kita masukkin nama Project dan Nama class MIDLet dari project tersebut. Seperti tampilan dibawah ini.

Kemudian Klik Create Project, maka akan masuk pada tampilan berikutnya.

Kemudian Klik OK saja. Maka akan tampil report, bahwa telah dibuat patch Project dengan nama MIDletMain. Dengan demikian, maka langkah selanjutnya kita menuju Patch Project tersebut untuk memasukkan code program game snake 3D ini. Berikut adalah report dan lokasi patch project pada komputer saya.


Kemudian , barulah kita mengetikkan code program yang telah kita bahas sebelumnya sebanyak 6 class yang kita buat. Untuk mengetikkan code tersebut, berikut cara mengetikkan code. Kita mengetikkan code program pada editor yang telah kita install, yaitu notepad++. Setelah kita ketikkan code program, kemudian kita simpan dengan nama sesuai dengan class. Berikut salah satu class yang telah dibuat. Class dibawah ini merupakan class utama dari class yang lainnya nama class ini yaitu MIDletMain.


Hal yang sama juga dilakukan untuk kelima class lainnya. Dan disimpan pada satu folder yang sama sesuai dengan patch project itu disimpan. Untuk lokasi code program ini disimpan yaitu sebagai berikut.
Setelah selesai kita mengetikkan dan menyimpan code program tersebut, maka langkah selanjutnya kita akan memproses code tersebut, apakah code program yang kita ketikkan tersebut masih terjadi kesalahan atau tidak? Proses ini biasa disebut kompile. Untuk mengkompile serta menjalankan code tersebut, kita harus membuka aplikasi WTK (Wireless ToolKit). Berikut cara memproses code program tersebut.
Buka WTKèkemudian pilih Open Project è pilih project MIDletMain è klik Open è Klik Built pada WTK  dan akan tampil sebagai berikut.

Jika tidak terjadi kesalahan code program, maka kita klik run dan akan tampil sebagai berikut:

    Tampilan diatas merupakan output dari program yang telah kita buat . Demikian, Langkah - langkah untuk membuat game Snake 3D pada J2ME. mohon maaf kalau banyak Salah kata atau kurang baik dalam penyampaiannya. Jika Anda mempunyai kritik atau ada saran untuk pengembangan project ini , saya terima dengan senang hati. Terima kasih . Wassalam.

Fans..

Google Translate

Jam

Date and Time


 

Blogger Templates