cara membuat game sederhana menggunakan neatbeans

Preview:

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.