Upload
arief-radcliffe
View
1.302
Download
5
Embed Size (px)
DESCRIPTION
ini adalah cara membuat gae labirin sederhana
Citation preview
MAKALAH
TENTANG CARA PEMBUATAN GAMESP
LABIRIN
Nama : Arif Safrudin
Kelas : 3 c
Nim : 11040016
POLITEKNIK HARAPAN BERSAMA TEGAL
Jl.Mataram 09 Tegal
2
KATA PENGANTAR
Dengan nama Allah yang Maha Pengasih lagi Maha Penyayang. Segala puji bagi Allah semata,
seraya memanjatkan puji syukur kehadirat Allah SWT atas limpahan anugerah dan rahmat- Nya,
saya selaku penulis dapat melaksanakan Tugas pemrograman berorientasi objek 2 sesuai dengan
yang bapak berikan. Tentunya saya selaku penulis telah berupaya semaksimal mungkin
kemampuan saya kerahkan dalam pengerjaan soal tersebut, namun saya menyadari tidak ada
yang sempurna di dunia ini. Selanjutnya saya mengharap adanya saran dan kritik yang
membangun sekaligus ucapan terima kasih pada semua pihak yang telah membantu
terlaksananya tugas ini. Dan pada akhirnya saya menyadari tiada yang sempurna dan besar di
hadapan Allah SWT, namun sekecil apapun amal shaleh yang kita kerjakan pasti diperhitungkan-
Nya dengan pahala yang besar, Amin
3
DAFTAR ISI
BAB I PENDAHULUAN ……………………………………………………………… 4
RUMUSAN MASALAH ………………………………………………………. 5
BAB II PEMBAHASAN ………………………………………………………………. 6
BAB III PENUTUP ……………………………………………………………………. 30
4
PENDAHULUAN Puji syukur penyusun panjatkan ke hadirat Allah Subhanahu wata΄ala, karena berkat rahmat-Nya
saya bisa menyelesaikan makalah yang berjudul “cara membuat game menggunakan Visual
MIDlet”. Makalah ini diajukan guna memenuhi tugas mata kuliah Pemrograman berorientasi 2.
saya mengucapkan terima kasih kepada semua pihak yang telah membantu sehingga makalah ini
dapat diselesaikan tepat pada waktunya. Makalah ini masih jauh dari sempurna, oleh karena itu,
kritik dan saran yang bersifat membangun sangat kami harapkan demi sempurnanya makalah ini
Semoga makalah ini memberikan informasi bagi masyarakat dan bermanfaat untuk
pengembangan wawasan dan peningkatan ilmu pengetahuan bagi kita semua.
5
RUMUSAN MASLAH
Pengertian J2ME
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.
Mobile Information Device Profile (MIDP)
MIDP atau Mobile Information Device Profile adalah spesifikasi untuk sebuah profil J2ME.
MIDP memilik lapisan diatas CLDC, API tambahan untuk daur hidup aplikasi, antar muka,
jaringan, dan pemyimpanan persisten. Pada saat ini terdapat MIDP 1.0 dan MIDP 2.0. Fitur
tambahan pada MIDP 2.0 dibandingkan MIDP 1.0 adalah API untuk multimedia. Pada MIDP 2.0
terdapat dukunagan memainkan tone, tone sequence, dan file WAV walaupun tanpa adanya
Mobile Media API (MMAPI).
MIDlet
MIDlet adalah aplikasi yang ditulis untuk MIDP. Aplikasi MIDlet adalah bagian dari class
javax.microedition.midlet.MIDlet yang didefinisikan pada MIDP. MIDlet berupa sebuah class
abstrak yang merupakan subclass dari bentuk dasar aplikasi sehingga antarmuka antara aplikasi
J2ME dan aplikasi manajemen pada perangkat bias terbentuk.
• Daur hidup MIDlet
MIDlet terdiri dari beberapa method yang harus ada, yaitu contructor(), protected void startApp()
throws MIDletStateChangeException, protected void pauseApp(), protected void destroyApp
(Boolean unconditional) throws MIDletStateChangeException
Ketika MIDlet dijalankan maka akan diinisialisasi dengan kondisi pause dan dijalankan
pauseApp(), kondisi berikutnya adalah fungsi MIDlet dijalankan, yaitu pada startApp(). Metode
yang ada tersebut diimplementasikan sebagai protected, hal ini dimaksudkan agar MIDlet lain
tidak dapat memanggil method tersebut. Pada saat pemakai keluar dari MIDlet, maka method
destroyApp() akan dijalankan sebelum MIDlet benar-benar tidak berjalan lagi. Method
notifyDestroyed() akan dipanggil sebelum MIDlet benar-benar tidak berjalan lagi, DestroyApp()
akan memanggil notifyDestroyed(), dan notifyDestroyed() akan memberi tahu platform untuk
menterminasi MIDlet dan membersihkan semua sember daya yang mengacu pada MIDlet
Berikut adalah skema hidup MIDlet :
6
BAB II PEMBAHASAN
Cara cara untuk membuat game menggunakan java visual MIDlet
yang pertama buka netbeans
,klik new project,
pilih jenis project kemudian klik next
7
,tulis nama project,
klik browse untuk memeilih dimana anda akan menyimpan dan centang set as main project dan
hilangkan centang pada Hello create MIDlet
8
pada emulator platform biarkan saja, jangan di ubah – ubah
pada device pilih clamshellCldcPhone2
pada CLDC dan MIDP pilih CLDC-1.1,MIDP-2.0
kemudian klik next,pilih Finish
9
klik kanan source package pilih new java package
ketik nama paket anda kemudian tekan finish(buatlah 2 nama packages yang berbeda karena kita
akan masukkan 2 packages yang berbeda).contoh nama packages : Image dan apps
kemudian di packages yang bernama image kita isi dengan gambar – gambar,cara
memasukkannya di windows explorer,cari gambar yang akan masukkan,blok semua gambar
kemudian copy atau tekan ctrl+c.kemudian pastekan di packages image. Caranya klik kanan
packages image,paste.dengan sendirinya gambar telah masuk di packages image.
Setelah mengisi packages image kita akan mengisi packages apps dengan cara klik kanan
packages source pilih new game design,visual MIDlet kemudian java class “ bagian java class
kita buat 3 class yaitu dengan nama counter,mainkan,music”setelah semuanya sudah di buat
maka akan muncul kotak dialog seperti ini :
10
Kita akan memulai dengan VisualMIDlet pilih vvisual MIDlet
Ini adalah tampilan awal visual MIDlet
Klik kanan pada are kerja Visual MIDlet pilih new Splash Screen, maka akan tampil seperti ini
11
Kemudian klik kanan dan pilih list,mainkan,alert”pada alert kita buat dua alert dan kita beri nama
petunjuk dan tentang”
Atur arah aliran program agar setiap kali dijalankan, splash screen adalah bagian pertama yang
ditampilkan dengan cara memberikan panah dari mobile device ke splash screen.cara untuk
mengatur ialah klik dan tahan pada mobile device dan lepaskan pada splashScreen dan lanjutkan
pada semua program sampai program menjadi seperti ini
12
Atur properties splash screen agar ditampilkan selama 2 detik. Pengaturan ini terletak pada
bagian Timeout.
Beri gambar pada splash screen kita dengan gambar yang kita telah siapkan. Masuk pada bagian
screen ,klik dua kali pada <Image not specified>.
13
Klik tombol Add untuk menambah gambar sehingga image1 akan muncul. Klik tombol Browse
untuk mencari lokasi gambar yang akan ditampilkan.
Buka folder src dikarenakan kita ingin menampilkan gambar yang sudah kita persiapkan di
proyek kita.
Buka folder image yang berisi gambar-gambar yang telah kita persiapkan.
Contoh gunakan gambar background.png untuk kita gunakan sebagai gambar splash screen kita.
Klik tombol Ok untuk menerima semua perubahan yang baru saja kita buat.
Tampilan splash screen kita setelah ditambahkan gambar kepadanya
Setelah kita buat Visual MIDletnya, kita buka Game Design, ini adalah tampilan utama Game design
14
Pertama tama kita buat dulu tiled layer dengan nama Dinding dan tanah, pertama kita klik create tiled
layer, masukkan nama dan pilh gambar yang akan menjadi dinding,
Setelah memasukkan nama dan memilih gambar kemudian klik OK.
ini adalah tampilan utama dinding anda, buatlah dinding anda dengan cara memilih gambar kemudian
15
tekan mouse / pointer anda pada lembar dinding yang akan kita buat, jika kita ingin menambah lembar
dinding kita, kita bias klik kanan dan pilih append column, ini adalah contoh dinding yang sudah jadi,
Kemudian kita buatlah lagi tiled layer dengan nama tanah, caranya pun sama seperti saat kita membuat
dinding, ini adalah tampilan tanah yang sudah jadi
16
Setelah dinding dan tanah kita sudah jadi kita akan buat actor atau pemain dari game ini, dengan cara
klik create sprite masukkan nama sprite dan pilih gambar sprites aturlah gambar actor sampai menjadi
seperti ini :
Ini adalah tampilan utama saat kita mengklik OK.
17
Pada aktorseq001 kita buang satu frame dengan cara klik kanan remove frame lalu kita ubah namanya
dengan cara klik kanan rename sequence dan kita beri nama actormaju, pilih gambar agar bisa jalan
seirama ketika diplay, kita ulangi sampai kita buat actor mundur,akorkiri,aktorkanan,dengan caraseperti
saat kita buat actor maju, sampai seperti ini
Setelah kita membuat actor kita akan buat harta dengan caraseperti kita membuat actor tetapi hanya
ada 1 sequnce saja, contoh sperti ini
18
Setelah semua bahan sudah kita buat gabungkan semuanya, dengan cara klik create scene dan kita beri
nama layer, ini adalah tampilan utama layer
Untuk menambahkan dinding,tanah klik kanan pada lembar layer dan pilih tiled layer dan untuk
menmbahkan ,actor dan harta klik kanan dan pilih sprite layer, atur tanah dan dinding pada angka X dan
19
Y adalah 0, taruh actor dan di tanah tetapi jangan mepet sama dinding, kemudian taruh harta berjauhan
dengan actor agar game menarik, contoh :
Setelah kita buat game design kita akan buat class mainkan dengan cara:
Kita buka class Mainkan
Tampilan awal class Mainkan.
20
Masukkan kode program class Mainkan.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package apps;
import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.LayerManager;
import javax.microedition.lcdui.game.Sprite;
21
import javax.microedition.lcdui.game.TiledLayer;
/**
*
* @author chun_chun
*/
public class Mainkan extends GameCanvas implements Runnable{
private static final int SPEED =3;
private static final int MIN__BUFFER =20;
private int viewPortx =0;
private int viewPorty =0;
private byte lastDirection =-1;
private int kecepatan =3;
private boolean interrupted = true;
private VisualMIDlet midlet;
private GameDesign gd;
private LayerManager lm;
private Timer timer;
private TiledLayer Tanah, Dinding;
private Sprite Aktor, harta,harta2,harta3;
private SpriteAnimationTask Aktorgerak,animator;
private int score =0;
private Counter c;
private Image Gimeover,Menang;
Music music = new Music();
public Mainkan (VisualMIDlet midlet){
22
super(true);
try {
music.PlayWaveMidi("/Image/Music1.mid");
daftardesign();
} catch (Exception ex) {
ex.printStackTrace();
}
c = new Counter();
c.setActive(true);
c.setInc(-1);
c.setCount(100);
timer.scheduleAtFixedRate(c, 1000, 1000);
this.setFullScreenMode(true);
new Thread(this).start();
}
private void daftardesign() throws IOException {
this.timer = new Timer();
gd = new GameDesign();
lm =new LayerManager();
gd.updateLayerManagerForLayer(lm);
Tanah =gd.getTanah();
Dinding =gd.getDinding();
harta =gd.getHarta();
harta2 = gd.getHarta2();
23
harta3 = gd.getHarta3();
this.Aktor = gd.getAktor();
this.Aktor.defineReferencePixel(6, 6);
this.Aktorgerak = new SpriteAnimationTask(this.Aktor,false);
this.timer.scheduleAtFixedRate(this.Aktorgerak, 0, gd.AktorMajuDelay);
}
public boolean spriteCollides(Sprite sprite){
return sprite.collidesWith(
sprite==this.Aktor ? this.harta :this.Aktor, true)
|| sprite.collidesWith(this.Dinding, true)
|| sprite.getX() <0 || sprite.getY()<0
|| sprite.getX() > (this.Tanah.getWidth()-sprite.getWidth())
|| sprite.getY() >(this.Tanah.getHeight()-sprite.getHeight());
}
void stopPlaying(){
}
private void adjustViewport(int x, int y ){
int sx =this.Aktor.getX();
int sy = this.Aktor.getY();
int xmin = this.viewPortx + MIN__BUFFER;
int xmax = this.viewPortx + this.getWidth() - this.Aktor.getWidth() -MIN__BUFFER;
int ymin = this.viewPorty + MIN__BUFFER;
int ymax = this.viewPorty + this.getHeight() - this.Aktor.getHeight() -MIN__BUFFER;
24
if(sx >= xmin && sx<= xmax && sy >= ymin && sy <= ymax){
return;
}
if(this.lastDirection == LEFT && sx >= xmin){
return;
}
if(this.lastDirection == RIGHT && sx <= xmax){
return;
}
if(this.lastDirection == UP && sy >=ymin){
return;
}
if(this.lastDirection == DOWN && sy <= ymax){
return;
}
if(x < this.Tanah.getX()){
this.viewPortx = this.Tanah.getX();
}else if ( x >this.Tanah.getX() + this.Tanah.getWidth() - this.getWidth())
{ this.viewPortx = this.Tanah.getX() + this.getWidth() - this.getWidth();
}else{
this.viewPortx =x;
}
if (y <this.Tanah.getY()){
this.viewPorty = this.Tanah.getY();
}else if (y>this.Tanah.getY()+this.Tanah.getHeight()-this.getHeight()){
this.viewPorty = this.Tanah.getY()+ this.Tanah.getCellHeight()- this.getHeight();
25
}else{
this.viewPorty =y;
}
this.lm.setViewWindow(this.viewPortx,this.viewPorty, this.getWidth(),this.getHeight());
}
public void run(){
Graphics g = getGraphics();
while (interrupted) {
int KeyState = getKeyStates();
if ((KeyState & LEFT_PRESSED) !=0) {
if(this.lastDirection != LEFT){
this.lastDirection = LEFT;
this.Aktor.setFrameSequence(gd.AktorKanan);
this.Aktor.setTransform(Sprite.TRANS_MIRROR);
continue;
}
this.Aktorgerak.forward();
this.Aktor.move(-SPEED, 0);
if(this.spriteCollides(this.Aktor)){
this.Aktor.move(SPEED, 0);
continue;
}
this.adjustViewport(this.viewPortx - SPEED, this.viewPorty);
}else if ((KeyState & RIGHT_PRESSED) !=0){
26
if(this.lastDirection !=RIGHT){
this.lastDirection = RIGHT;
this.Aktor.setFrameSequence(gd.AktorKanan);
this.Aktor.setTransform(Sprite.TRANS_NONE);
continue;
}
this.Aktorgerak.forward();
this.Aktor.move(SPEED, 0);
if (this.spriteCollides(this.Aktor)){
this.Aktor.move(-SPEED, 0);
continue;
}
this.adjustViewport(this.viewPortx + SPEED, this.viewPorty);
}else if ((KeyState & UP_PRESSED) !=0){
if(this.lastDirection !=UP){
this.lastDirection =UP;
this.Aktor.setFrameSequence(gd.AktorMundur);
this.Aktor.setTransform(Sprite.TRANS_NONE);
continue;
}
this.Aktorgerak.forward();
this.Aktor.move(0, -SPEED);
if(this.spriteCollides(this.Aktor)){
this.Aktor.move(0, SPEED);
continue;
}
27
this.adjustViewport(this.viewPortx,this.viewPorty - SPEED);
}else if ((KeyState & DOWN_PRESSED) !=0){
if(this.lastDirection !=DOWN){
this.lastDirection =DOWN;
this.Aktor.setFrameSequence(gd.AktorMaju);
this.Aktor.setTransform(Sprite.TRANS_NONE);
continue;
}
this.Aktorgerak.forward();
this.Aktor.move(0, SPEED);
if(this.spriteCollides(this.Aktor)){
this.Aktor.move(0, -SPEED);
continue;
}
this.adjustViewport(this.viewPortx, this.viewPorty + SPEED);
}else{
this.Aktorgerak.setMoving(false);
}
this.lm.paint(g, 0, 0);
g.setColor(0, 255, 255);
g.drawString("Score:"+ score,5 ,5,0);
g.drawString("Waktu:"+ c.getCount(),165 ,5 ,0);
if(c.getCount()<=0){
stopPlaying();
Kalah();
if (c.getCount()<= 0) {
28
music.stopMusik();
if (c.getCount() <= 0) {
Aktor.setVisible(false);
}
}
}
if(score>= 30){
Menang();
if(score >=30){
music.stopMusik();
}
}
flushGraphics(0, 0, this.getWidth(), this.getHeight());
Nilai();
try{
Thread.sleep(20);
} catch(InterruptedException ex){
ex.printStackTrace();
}
}
}
29
private void Kalah(){
Graphics g = getGraphics();
this.lm.paint(g, 0, 0);
g.setColor(0, 0, 255);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(255, 255, 255);
g.drawString("TAMAT", 10, 100, 0);
g.setColor(255, 255, 0);
g.drawString("SKOR ANDA ADALAH :" +score,10, 130, 0);
}
private void Nilai(){
if (Aktor.collidesWith(harta, true)){
harta.setVisible(false);
score += 10;
c.getCount();
}
if (Aktor.collidesWith(harta2, true)){
harta2.setVisible(false);
score += 10;
} if (Aktor.collidesWith(harta3, true)){
harta3.setVisible(false);
score += 10;
}
}
30
private void Menang(){
Graphics g = getGraphics();
this.lm.paint(g, 0, 0);
g.setColor(0, 0, 0);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(0, 255, 0);
g.drawString("SELAMAT ANDA MENANG", 10, 100, 0);
g.setColor(0, 255, 0);
g.drawString("SKOR ANDA ADALAH :"+score ,10, 130, 0);
g.setColor(255, 255, 255);
g.drawString("POLITEKNIK TEGAL" , 10, 150, 0);
g.drawString("CREATED BY : WINDHIANI" , 10, 170,0);
g.drawString("3A 11040096", 10, 190,0);
}
public class SpriteAnimationTask extends TimerTask{
private boolean moving = false;
private boolean forward = false;
private Sprite sprite;
private Image image;
public SpriteAnimationTask(Sprite sprite, boolean forward){
this.sprite =sprite;
this.forward = forward;
}
public void run(){
31
if(!this.moving){
}
if(this.forward){
this.sprite.nextFrame();
}else{
this.sprite.prevFrame();
}
}
public void forward(){
this.forward = true;
this.moving = true;
}
public void backward(){
this.forward = false;
this.moving = true;
}
public void setMoving(boolean isMoving){
this.moving = isMoving;
}
}
}
Kemudian kita buka class Music, ini adalah tampilan utama class Music
32
Kita masukkan script program class music
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package apps;
import javax.microedition.media.Manager;
import javax.microedition.media.MediaException;
import javax.microedition.media.Player;
import javax.microedition.media.PlayerListener;
import javax.microedition.media.control.VolumeControl;
/**
*
* @author chun_chun
33
*/
public class Music implements PlayerListener{
private static Player player;
private VolumeControl vc;
public void playerUpdate( Player player, String event, Object evenData){
}
void PlayWaveMidi(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(100);
}
player.start();
}
public void stopMusik(){
try {
player.stop();
} catch (MediaException ex) {
ex.printStackTrace();
}
}
34
}
Setelah kita buat class Music kemudian kita buka class counter, ini adalah tampilan utama class
counter
Maskkan Code program class Counter
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package apps;
import java.util.TimerTask;
/**
*
35
* @author chun_chun
*/
public class Counter extends TimerTask {
private int inc = 1;
private int count;
private boolean active;
public void run() {
if (active) {
count += inc;
}
}
public void setActive(boolean active) {
this.active = active;
}
public void setCount(int count) {
this.count = count;
}
public void setInc(int inc) {
this.inc = inc;
}
36
public int getCount() {
return count;
}
}
kemudian setelah program di buat coba anda jalankan .
37
PENUTUP
Demikian yang dapat saya paparkan mengenai cara pembuatan game java yang menjadi pokok
bahasan dalam makalah ini, tentunya masih banyak kekurangan dan kelemahannya, kerena
terbatasnya pengetahuan dan kurangnya rujukan atau referensi yang ada hubungannya dengan
judul makalah ini.
Penulis banyak berharap para pembaca yang budiman dusi memberikan kritik dan saran yang
membangun kepada penulis demi sempurnanya makalah ini dan dan penulisan makalah di
kesempatan-kesempatan berikutnya. Semoga makalah ini berguna bagi penulis pada khususnya
juga para pembaca yang budiman pada umumnya.