prak game ular tangga

21
 Praktikum Pemrograman Lanjut Politeknik Elektronika Negeri Surabaya Game Ular Tangga Sederhana Tujuan Praktikum :  Mahasiswa dapat menggunakan class GameCanvas.  Mahasiswa dapat menggunakan class Sprite, TiledLayer, LayerManager.  Mahasiswa dapat menggunakan Mobile Media API. Pada praktikum ini mahasiswa membuat aplikasi Game Ular Tangga (UT) sederhana dengan jumlah pemain 2 orang. Terdapat papan permainan yang terdiri dari 8 baris dan 11 kolom (baris dan kolom dapat ditentukan sendiri), pada papan permainan tersebut terdapat gambar ular dan tangga. Terdapat sebuah dadu yang diacak untuk menentukan  berapa langkah pemain. Langkah pemain ini akan melewati atau mengenai tepat g ambar ular tangga. Jika pemain mengenai tepat gambar ular, maka posisi pemain akan turun  berdasarkan baris, sedangkan jika pemain mengenai tepat gambar tangga maka posisi  pemain naik berdasarkan baris. Jika pemain sudah mencapai finish maka pemain tersebut dinyatakan sebagai pemenang. start end  pemain ular tangga Langkah pemain Gambar 1 Papan Game UT Output dari aplikasi ini, pertama kali akan muncul splash screen (gambar 2), selanjutnya menu utama (gambar 3) dengan dua pilihan yaitu untuk memulai game (new game) dan menu untuk menampilkan si pembuat game (gambar 6). Papan permainan dari game UT ditunjukkan pada gambar 4. Untuk melakukan pengacakan dadu untuk setiap pemain tekan button “FIRE”. Jumlah dadu(1-6) menentukan berapa langkah pemain (gambar 7). Pemain yang terdahulu mencapai finish dinyatakan sebagai pemenang (gambar 8). Untuk kembali ke menu utama tekan “LEFT”. 1

Upload: iskandar-lois

Post on 18-Jul-2015

366 views

Category:

Documents


0 download

TRANSCRIPT

5/15/2018 Prak Game Ular Tangga - slidepdf.com

http://slidepdf.com/reader/full/prak-game-ular-tangga-55ab4ebd4319a 1/21

Praktikum Pemrograman Lanjut

Politeknik Elektronika Negeri Surabaya

Game Ular Tangga Sederhana

Tujuan Praktikum :

•  Mahasiswa dapat menggunakan class GameCanvas.

•  Mahasiswa dapat menggunakan class Sprite, TiledLayer, LayerManager.

•  Mahasiswa dapat menggunakan Mobile Media API.

Pada praktikum ini mahasiswa membuat aplikasi Game Ular Tangga (UT) sederhanadengan jumlah pemain 2 orang. Terdapat papan permainan yang terdiri dari 8 baris dan

11 kolom (baris dan kolom dapat ditentukan sendiri), pada papan permainan tersebut

terdapat gambar ular dan tangga. Terdapat sebuah dadu yang diacak untuk menentukanberapa langkah pemain. Langkah pemain ini akan melewati atau mengenai tepat gambar

ular tangga. Jika pemain mengenai tepat gambar ular, maka posisi pemain akan turun

berdasarkan baris, sedangkan jika pemain mengenai tepat gambar tangga maka posisipemain naik berdasarkan baris. Jika pemain sudah mencapai finish maka pemain tersebut

dinyatakan sebagai pemenang.

start

end

pemain

ular

tangga

Langkah pemain

Gambar 1 Papan Game UT

Output dari aplikasi ini, pertama kali akan muncul splash screen (gambar 2), selanjutnya

menu utama (gambar 3) dengan dua pilihan yaitu untuk memulai game (new game) dan

menu untuk menampilkan si pembuat game (gambar 6). Papan permainan dari game UTditunjukkan pada gambar 4. Untuk melakukan pengacakan dadu untuk setiap pemain

tekan button “FIRE”. Jumlah dadu(1-6) menentukan berapa langkah pemain (gambar 7).Pemain yang terdahulu mencapai finish dinyatakan sebagai pemenang (gambar 8). Untuk 

kembali ke menu utama tekan “LEFT”.

1

5/15/2018 Prak Game Ular Tangga - slidepdf.com

http://slidepdf.com/reader/full/prak-game-ular-tangga-55ab4ebd4319a 2/21

Praktikum Pemrograman Lanjut

Politeknik Elektronika Negeri Surabaya

Untuk membuat aplikasi game UT

Nama File Kegunaan

Pemain.java Class yang merepresentasikan objek pemain.

DataUlarTangga.java Untuk menentukan posisi tangga dan ular berdasarkan baris dan

kolom.

MainKu.java Aplikasi midlet untuk game UT.

Splash.java Canvas untuk menampilkan splash screen.

MenuUtama.java Canvas untuk menampilkan menu utama

GameCanvasKu.java GameCanvas untuk menampilkan game UT.

Menu About.java Canvas untuk menampilkan pembuat dari aplikasi

Gambar 2 Splash Screen game UT

2

5/15/2018 Prak Game Ular Tangga - slidepdf.com

http://slidepdf.com/reader/full/prak-game-ular-tangga-55ab4ebd4319a 3/21

Praktikum Pemrograman Lanjut

Politeknik Elektronika Negeri Surabaya

Gambar 3 Menu Utama game UT dengan pilihan New Game

Gambar 4 Papan Permainan Game UT

3

5/15/2018 Prak Game Ular Tangga - slidepdf.com

http://slidepdf.com/reader/full/prak-game-ular-tangga-55ab4ebd4319a 4/21

Praktikum Pemrograman Lanjut

Politeknik Elektronika Negeri Surabaya

Gambar 5 Menu Utama game UT dengan pilihan About

Gambar 6 Pembuat dari game UT

4

5/15/2018 Prak Game Ular Tangga - slidepdf.com

http://slidepdf.com/reader/full/prak-game-ular-tangga-55ab4ebd4319a 5/21

Praktikum Pemrograman Lanjut

Politeknik Elektronika Negeri Surabaya

Gambar 7 Posisi pemain pada saat bermain game UT

Gambar 8 Pemain 2 memenangkan game UT

5

5/15/2018 Prak Game Ular Tangga - slidepdf.com

http://slidepdf.com/reader/full/prak-game-ular-tangga-55ab4ebd4319a 6/21

Praktikum Pemrograman Lanjut

Politeknik Elektronika Negeri Surabaya

Posisi awal pemain di baris 7 dan kolom 0 (awal baris dan kolom adalah 0). Untuk menggambar di gamecanvas baris menyatakan posisi y dan kolom menyatakan posisi x.

Setiap perpindahan baris (keatas) maka posisi x dikurangi 16. Setiap perpindahan kolom

kekanan posisi x ditambah dengan 16. Konversi sebagai berikut :

Baris = 7

posisi y = 160Kolom = 0 posisi x = 0

Baris = 0 posisi y = 160 – 7 * 16 = 48

Kolom = 2 posisi x = 2 * 16 = 32

File – file yang digunakan untuk membuat aplikasi :

Pemain.java

Terdapat instance variabel :

baris : posisi baris pemain berhubungan dengan posY (penjelasan diatas).kolom : posisi kolom pemain berhubungan dengan posX.

maxKolom : maksimal kolom dari papan permainan game UT yaitu 11

win : bernilai true jika pemain menang, beri default dengan nilai false.play : bernilai true jika pemain sedang bermain, bernilai false, jika lawan yang

bermain.Posisi awal

pemain

 package com;

 public class Pemain {

private int baris = 7 ,kolom = 0 ;

private int posX=0, posY=160 ;

private int maxKolom = 11 ;

private boolean play ;

private boolean win = false ;

 public boolean isWin() {

return win;

}

 public void setWin(boolean win) {

this.win = win;

}

 public int getBaris() {

return baris;

}

 public int getKolom() {

return kolom;

}

 public void setBaris(int baris) {

this.baris = baris;

//tentukan posY

}

6

5/15/2018 Prak Game Ular Tangga - slidepdf.com

http://slidepdf.com/reader/full/prak-game-ular-tangga-55ab4ebd4319a 7/21

Praktikum Pemrograman Lanjut

Politeknik Elektronika Negeri Surabaya

 public void setKolom(int kolom) {

this.kolom = kolom;

//tentukan posX 

}

 public int getMaxKolom() {

return maxKolom;

}

 public boolean isPlay() {

return play;

}

 public void setPlay(boolean play) {

this.play = play;

}

 public int getPosX() {

return posX;

}

 public int getPosY() {

return posY;

}

//fungsi ini digunakan oleh pemain untuk menentukan 1 langkah

 public boolean main(){

if (baris >= 0 && kolom >= 0) {

//jika pemain jalan maju dari kolom 0 sampai kolom 10

if (baris % 2 != 0) {

//disi sendiri

} else {

//jika pemain jalan mundur

if (kolom == 0) {

//jika telah mencapai finish

if (baris == 0) return true ;

//disi sendiri

} else {

//disi sendiri

}

}

}

return false ;

}

}

Class DataUlarTangga untuk menyimpan informasi letak ular dan tangga sebagai contoh:

Tangga 1Posisi awal

barisAwal : 3 kolomAwal : 9

Posisi akhirbarisAkhir : 1 kolomAkhir : 7

7

5/15/2018 Prak Game Ular Tangga - slidepdf.com

http://slidepdf.com/reader/full/prak-game-ular-tangga-55ab4ebd4319a 8/21

Praktikum Pemrograman Lanjut

Politeknik Elektronika Negeri Surabaya

Ular 1 :

Posisi awal

barisAwal : 6 kolomAwal : 9Posisi akhir

barisAkhir : 7 kolomAkhir: 8.

Posisi akhir Tangga 1

Posisi awal Tangga 1

Posisi awal Ular 1

Posisi akhir Ular 1

Gambar 9 Posisi Ular dan Tangga

DataUlarTangga.java

package com;

 public class DataUlarTangga {

 private int barisAwal,kolomAwal,barisAkhir,kolomAkhir;

 public DataUlarTangga(int barisAwal, int kolomAwal, int barisAkhir,

int kolomAkhir) {

this.barisAwal = barisAwal;

this.kolomAwal = kolomAwal;

this.barisAkhir = barisAkhir;

}this.kolomAkhir = kolomAkhir;

public int getBarisAkhir() {

return barisAkhir;

}

public void setBarisAkhir(int barisAkhir) {

this.barisAkhir = barisAkhir;

}

public int getBarisAwal() {

return barisAwal;

}

public void setBarisAwal(int barisAwal) {

8

5/15/2018 Prak Game Ular Tangga - slidepdf.com

http://slidepdf.com/reader/full/prak-game-ular-tangga-55ab4ebd4319a 9/21

Praktikum Pemrograman Lanjut

Politeknik Elektronika Negeri Surabaya

this.barisAwal = barisAwal;

}

public int getKolomAkhir() {

return kolomAkhir;

}

public void setKolomAkhir(int kolomAkhir) {

this.kolomAkhir = kolomAkhir;

}

public int getKolomAwal() {

return kolomAwal;

}

public void setKolomAwal(int kolomAwal) {

this.kolomAwal = kolomAwal;

}

//lakukan overriding pada fungsi equals(Object), dua buah objek

//dikatakan sama jika letak baris Awal dan KolomAwal sama.

 public boolean equals(Object obj) {

}

}

 MainKu.java

 package com;

import java.io.InputStream;

import javax.microedition.lcdui.AlertType;

import javax.microedition.lcdui.Display;

import javax.microedition.media.Manager;import javax.microedition.media.Player;

import javax.microedition.midlet.*;

 public class MainKu extends MIDlet {

private Display display ;

private Splash sp ;

private MenuUtama menuUtama ;

private MenuAbout menuAbout ;

private GameCanvasKu gameUT ;

private Player player;

 public MainKu() {

//create objek sp dari class Splash() sp.setFullScreenMode(true);

//create objek menuUtama dari class MenuUtama

//create objek menuAbout dari class MenuAbout

//create objek gameUT dari class GameCanvasKu 

}

 public void startApp() {

display = Display.getDisplay(this) ;

9

5/15/2018 Prak Game Ular Tangga - slidepdf.com

http://slidepdf.com/reader/full/prak-game-ular-tangga-55ab4ebd4319a 10/21

Praktikum Pemrograman Lanjut

Politeknik Elektronika Negeri Surabaya

//menampilkan objek sp pada layar

try {

Thread.sleep(3000);

} catch (InterruptedException ex) {

ex.printStackTrace();

}

//menampilkan objek menuUtama pada layar 

}

 public void bunyi(){

AlertType.ERROR.playSound(Display.getDisplay(this));

}

 public void backSoundStart(){

try{

InputStream is =

getClass().getResourceAsStream("/suara/Attraction.mid");

player = Manager.createPlayer(is, "audio/midi");

player.start();

}catch(Exception e){

}}

 public void backSoundStop(){

try{

player.stop();

}catch(Exception e){

}

}

 public void gantiDisplay(int pilih){

switch(pilih){

case 0 :

//menginisialisasi dua pemain dengan memanggil objek

//gameUT

//menampilkan pada layer objek gameUT 

break ;

case 1 :

//menampilkan objek menuAbout pada layar

break ;

case 2 :

//menampilkan objek menuUtama pada layar 

break ;

}

}

public void pauseApp() {

}

public void destroyApp(boolean unconditional) {

}

 public void exitMIDlet() {

notifyDestroyed();

}

}

10

5/15/2018 Prak Game Ular Tangga - slidepdf.com

http://slidepdf.com/reader/full/prak-game-ular-tangga-55ab4ebd4319a 11/21

Praktikum Pemrograman Lanjut

Politeknik Elektronika Negeri Surabaya

 MenuUtama.java

 package com;

import javax.microedition.lcdui.Canvas;import javax.microedition.lcdui.Command;

import javax.microedition.lcdui.CommandListener;

import javax.microedition.lcdui.Displayable;

import javax.microedition.lcdui.Font;

import javax.microedition.lcdui.Graphics;

import javax.microedition.lcdui.Image;

 public class MenuUtama extends Canvas implements CommandListener{

private MainKu mid ;

private Image bgImage ;

private String menu[] = {"New Game", "About"};

private int pil = 0;

private Command pilih,exit ;

 public MenuUtama(MainKu mid) {

this.mid = mid ;

//panggil fungsi backSoundStart() pada objek mid.

try {

//create bgImage

} catch (Exception e) {

System.out.println("Error creating Background Image :: " + e);

}

//create Command pilih

//create Command exit

//tambahkan Command pada canvas//aktifkan Command

}

 protected void keyPressed(int keyCode) {

int gameAction = getGameAction(keyCode);

switch(gameAction){

//jika user memilih DOWN

case DOWN :

repaint();

break;

//jika user memilih Up case UP :

repaint();

break ;

}

}

//tampilkan objek

 public void paint(Graphics g) {

//beri background layar

11

5/15/2018 Prak Game Ular Tangga - slidepdf.com

http://slidepdf.com/reader/full/prak-game-ular-tangga-55ab4ebd4319a 12/21

Praktikum Pemrograman Lanjut

Politeknik Elektronika Negeri Surabaya

// Draw Background Image

// menampilkan menu

}

 public void commandAction(Command c, Displayable d) {

//jika user memilih command pilih

if (c == pilih){

//menampilkan pada layer sesuai dengan menu

//backSound di stop.

}else if (c == exit){

//memanggil fungsi exitMIDlet() pada objek mid

}

}

}

MenuAbout.java bisa dilihat pada praktikum penanganan event pada low level

GameCanvasKu.java

 package com;

class GameCanvasKu extends GameCanvas implements Runnable {

private MainKu mid ;

private int bilAcak ;

private boolean stop = false;

// Sprite untuk pemain 1 dan pemain 2

private Sprite playerSprite1,playerSprite2 ;

//TiledLayerprivate TiledLayer bg ;

// Layer Manager

private LayerManager layerManager;

//objek Vector untuk menyimpan posisi dari ular dan tangga

private Vector data ;

private Pemain p1, p2 ;

 public GameCanvasKu (MainKu mid) {

super(true);

this.mid = mid ;

//create objek data dari Vector

//simpan posisi ular dan tangga pada objek data

//lakukan inisialisasi Pemain

// Load Images to Sprites

try {

//create Image playerImage1

//create Image playerImage2

12

5/15/2018 Prak Game Ular Tangga - slidepdf.com

http://slidepdf.com/reader/full/prak-game-ular-tangga-55ab4ebd4319a 13/21

Praktikum Pemrograman Lanjut

Politeknik Elektronika Negeri Surabaya

//Create objek playerSprite1 dari playerImage1

//Create objek playerSprite2 dari playerImage2

//panggil fungsi initBackground(), simpan pada objek bg 

}

catch (Exception e) {

e.printStackTrace();

}

//create objek layerManager

//pada layerManager tambahkan playerSprite1, playerSprite2 dan

//objek bg

Thread t = new Thread(this);

t.start();

}

 public void inisialisasiPemain(){

//crete objek Pemain p1 (bermain duluan sehingga play = true)

//beri nilai var instance play = true, kolom = 0, baris = 7,

//win = false

//crete objek Pemain p2

//beri nilai var instance play = false, kolom = 0, baris = 7,

//win = false

}

 public void run() {

Graphics g = getGraphics();

while(!stop) {

input(g);

drawScreen(g);

try {

Thread.sleep(1000); //sleep 100 ms

}

catch (InterruptedException e) {

e.printStackTrace();

}

}

}

 private void input(Graphics g) {

int keyStates = getKeyStates();

if ((keyStates & this.LEFT_PRESSED) != 0){

//kembali ke menu utama

}

else if ((keyStates & this.FIRE_PRESSED) != 0) {

Random r = new Random();

//Jika Pemain p1 yang bermain atau pemain p2 yang bermain

//random bilAcak

int temp = bilAcak ;

13

5/15/2018 Prak Game Ular Tangga - slidepdf.com

http://slidepdf.com/reader/full/prak-game-ular-tangga-55ab4ebd4319a 14/21

Praktikum Pemrograman Lanjut

Politeknik Elektronika Negeri Surabaya

while(temp>0){

try {

Thread.sleep(500);

} catch (InterruptedException ex) {

ex.printStackTrace();

}

//jika p1 yang sedang bermain

if (p1.isPlay() == true){

//cek apakah p1 menang (panggil fungsi main(),

hasil berupa boolean jika true berarti menang)

//jika menang maka

//tentukan Pemain p1 sebagai pemenang

//set nilai play dengan false

temp = 0 ;

bilAcak = 0 ;

}

}

else{

//jika p2 yang sedang bermain

//cek apakah p2 menang (panggil fungai main(),

//hasil berupa boolean jika true berarti menang)//jika menang maka

//tentukan Pemain p2 sebagai pemenang

//set nilai play dengan false 

temp = 0 ;

bilAcak = 0 ;

}

}

mid.bunyi();

drawScreen(g);

//jika sudah langkah terakhir maka cek apakah berada

//tepat pada posisi ular dan tangga

if (temp == 1){

DataUlarTangga posAkhirUT ;

//jika p1 sedang bermain

//create posAkhirUT dari class DataUlarTangga

yang //menyatakan posisi akhir pemain p1

//jika tidak (pemain 2 sedang bermain)

//create posAkhirUT dari class DataUlarTangga

yang //menyatakan posisi akhir pemain p1 

//cek apakah ada pada vector

//jika ada

//maka dapatkan posisi akhir dari ular dan

//tangga untuk menentukan posisi akhir pemain

//jika p1 yang sedang bermain//ubah posisi baris pemain p1

//ubah posisi kolom pemain p1

//jika tidak (p2 sedang bermain)

//ubah posisi baris pemain p2

//ubah posisi kolom pemain p2

}

bilAcak = 0 ;

drawScreen(g);

14

5/15/2018 Prak Game Ular Tangga - slidepdf.com

http://slidepdf.com/reader/full/prak-game-ular-tangga-55ab4ebd4319a 15/21

Praktikum Pemrograman Lanjut

Politeknik Elektronika Negeri Surabaya

}

temp-- ;

}

//jika pemain yang sedang bermain sudah selesai maka

//gantian lawannya yang bermain.

if (temp == 0){

//jika belum ada yang menang

if (!p1.isWin() && !p2.isWin()){

//jika p1 yang bermain

if (p1.isPlay() == true && p2.isPlay() == false){

//maka tentukan pemain p2 yang akan bermain

}

//jika p2 yang bermain

else if (p1.isPlay()==false && p2.isPlay()==true){

//maka tentukan pemain p1 yang akan bermain

}

}

}

}}

 private void drawScreen(Graphics g) {

//beri warna putih pada layar

//tentukan posisi x dan y pada playerSprite1 dan playerSprite2

layerManager.paint(g, 0, 0);

//tentukan warna dan jenis font.

//jika p1 yang sedang bermain

//tulis Player 1 : bilAcak

//jika tidak (p2 yang sedang bermain)

//tulis Player 2 : bilAcak

//tentukan warna dan jenis font.

//jika p1 dan p2 sudah tidak bermain lagi (sudah ada pemenang)

//jika p1 sebagai pemenang

//Tulis pemenang p1

//jika tidak (p2 sebagai pemenang)

//Tulis pemenang p2

flushGraphics();

}

 public TiledLayer initBackground() throws java.io.IOException {TiledLayer Papan1=null;

Image tileImages = Image.createImage("/images/semuanya.png");

if (Papan1 == null) {

Papan1 = new TiledLayer(11, 13, tileImages, 16, 16);

int[][] tiles = {

{ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 },

{ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51 },

{ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62 },

15

5/15/2018 Prak Game Ular Tangga - slidepdf.com

http://slidepdf.com/reader/full/prak-game-ular-tangga-55ab4ebd4319a 16/21

Praktikum Pemrograman Lanjut

Politeknik Elektronika Negeri Surabaya

{ 85, 17, 1, 1, 1, 1, 1, 1, 1, 1, 1 },

{ 1, 15, 1, 1, 1, 1, 1, 12, 14, 1, 1 },

{ 1, 1, 1, 1, 25, 27, 1, 13, 11, 14, 1 },

{ 1, 8, 7, 1, 26, 24, 27, 1, 13, 10, 1 },

{ 1, 5, 9, 1, 1, 26, 23, 1, 1, 1, 1 },

{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },

{ 1, 1, 4, 1, 1, 1, 1, 1, 21, 20, 1 },

{ 85, 1, 2, 1, 1, 1, 1, 1, 18, 22, 1 },

{ 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73 },

{ 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84 }

};

// write mid-init user code here

for (int row = 0; row < 13; row++) {

for (int col = 0; col < 11; col++) {

Papan1.setCell(col, row, tiles[row][col]);

}

}

}

// write post-init user code here

return Papan1;

}}

Persiapan Praktikum

Pengunaan LayerManager

With so many layers to control, the LayerManager class comes in handy.

This class provides methods to add, remove, or insert layers from a

game, and also provides a single method to paint all of these layers to

the underlying Graphics object. This means that you don't need to

individually call the paint() method of each of the layers of a game.

An instance of LayerManager is created using its no-args constructor.

Layers are then added, removed, or inserted into it by using the

methods append(Layer layer), remove(Layer layer), and insert(Layer l,

int index), respectively. The order in which layers are added is

important, because this order determines which layer is painted first,

as this becomes the z-order index. The layer at index 0 is painted on

top of all the other layers, and hence, is closest to the user, and so

on.

In our game, the start() method now needs to be modified, as shown

here:

// creates the layermanager

manager = new LayerManager();

// and adds layers to it

manager.append(coupleSprite);

// creates the game background

createBackground();

manager.append(background);

16

5/15/2018 Prak Game Ular Tangga - slidepdf.com

http://slidepdf.com/reader/full/prak-game-ular-tangga-55ab4ebd4319a 17/21

Praktikum Pemrograman Lanjut

Politeknik Elektronika Negeri Surabaya

As you can see, the coupleSprite layer will be closest to the user and

the background layer will be farthest back, based on their indices.

import javax.microedition.midlet.*;

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

import java.util.*;

class AnimationGCanvas extends GameCanvas implements Runnable {

final static int DISP = 5;

int width = getWidth();

int height = getHeight();

int m_x = width/2;

int m_y = height/2;

int v_x = 0;

int background_w = 0;

boolean stop = false;

Random generator = new Random();

// Sprites to be used

private Sprite playerSprite;

private Sprite backgroundSprite;

// Layer Manager

private LayerManager layerManager;

public AnimationGCanvas () {

17

5/15/2018 Prak Game Ular Tangga - slidepdf.com

http://slidepdf.com/reader/full/prak-game-ular-tangga-55ab4ebd4319a 18/21

Praktikum Pemrograman Lanjut

Politeknik Elektronika Negeri Surabaya

super(true);

// Load Images to Sprites

try {

Image playerImage = Image.createImage("/face.png");

playerSprite = new Sprite (playerImage,20,20);

Image backgroundImage =

Image.createImage("/background.png");

backgroundSprite = new Sprite(backgroundImage);

background_w = backgroundImage.getWidth();

System.out.println("background_w : " + background_w );

System.out.println("width : " + width );

}

catch (Exception e) {

e.printStackTrace();

}

layerManager = new LayerManager();

layerManager.append(playerSprite);layerManager.append(backgroundSprite);

Thread t = new Thread(this);

t.start();

}

public void run() {

Graphics g = getGraphics();

while(!stop) {

drawScreen(g);

try {

Thread.sleep(100); //sleep 100 ms

}

catch (InterruptedException e) {

e.printStackTrace();

}

}

}

// Method to Display Graphics

private void drawScreen(Graphics g) {

//g.setColor(0x00C000);

g.setColor(0xffffff);

g.fillRect(0, 0, getWidth(), getHeight());

g.setColor(0x0000ff);

m_x += DISP;

m_y += DISP - generator.nextInt()%(DISP*2);

System.out.println("m_x : " + m_x);

System.out.println("m_y : " + m_y);

if (m_y < 0) {

m_y += height;

System.out.println("m_y : " + m_y);

}

18

5/15/2018 Prak Game Ular Tangga - slidepdf.com

http://slidepdf.com/reader/full/prak-game-ular-tangga-55ab4ebd4319a 19/21

Praktikum Pemrograman Lanjut

Politeknik Elektronika Negeri Surabaya

if (m_y > height) {

m_y -= height;

System.out.println("m_y : " + m_y);

}

// updating player sprite position

playerSprite.setPosition(m_x, m_y);

v_x += DISP;

System.out.println("v_x : " +v_x);

// display all layers

layerManager.setViewWindow(v_x, 0, width, height);

layerManager.paint(g, 0, 0);

flushGraphics();

if (v_x >= background_w - width)

stop = true;

}

}

 public class ExampleLayerManagerMidlet extends MIDlet {

public void startApp() {

Displayable d = new AnimationGCanvas();

d.addCommand(new Command("Exit", Command.EXIT, 0));

d.setCommandListener(new CommandListener() {

public void commandAction(Command c, Displayable s) {

notifyDestroyed();

}

} );

Display.getDisplay(this).setCurrent(d);

}

public void pauseApp() { }

public void destroyApp(boolean unconditional) { }

}

TUTORIAL TENTANG TILED LAYER 1

Building a J2ME Game: Creating Backgrounds Using the TiledLayer Class

In this section, you will add some color to the game by providing a

background using the TiledLayer class. The game is divided into three

sections: the top section can be thought of as the sky, the middle

section in which the couple jump is the earth, and the bottom section

is the sea. These three sections can be filled easily using three

colored images of the size 32 by 32 pixels each, one for each section.

However, each section is bigger than 32 by 32 pixels, and the

TiledLayer class is used to define large areas like these with small

images.

19

5/15/2018 Prak Game Ular Tangga - slidepdf.com

http://slidepdf.com/reader/full/prak-game-ular-tangga-55ab4ebd4319a 20/21

Praktikum Pemrograman Lanjut

Politeknik Elektronika Negeri Surabaya

To start, divide the game screen into squares of 32 by 32 each and

number each row and column, starting with an index of 0. This is shown

in Figure 4 and results in a 5-by-5-cell background.

Thus, cells (0, 0) to (1, 4) are to painted with a sky image; cells (2,

0) to (2, 4) are to be painted with an earth image, and cells (3, 0) to

(4, 4) are to be painted with a sea image. You will do this with the

image shown in Figure 5.

The first 32 by 32 cell represents the earth image, the second

represents the sea, and the last represents the sky. When you use the

TiledLayer class, these images are numbered starting from index 1 (not

0; therefore, earth is 1, sea is 2, and sky is 3). The TiledLayer class

will take this one image and divide it into three separate images used

for rendering the game background. In our case, we want the TiledLayerclass to render a 5-by-5-cell background using cells of 32 by 32 pixels

each. This is achieved by the following code:

// load the image

backgroundImg = Image.createImage("/tiledLayer1.gif");

// create the tiledlayer background

background = new TiledLayer(5, 5, backgroundImg, 32, 32);

As you can see, the first two parameters to the TiledLayer constructor

represent the total background size, the next parameter represents the

image, and the last two parameters represents the size of each cell.

This size will be used by the TiledLayer class to carve the image into

its individual background cells.

All that is now left is to set each cell with its respective image. The

full code to create the background is listed below in a method called

createBackground(). You will need to add a call to this method from the

start() method of the MyGameCanvas class. Once this is done, add a call

to paint this background using background.paint(g) at the end of the

buildGameScreen() method, which will render it to screen.

// creates the background using TiledLayer

private void createBackground() throws IOException {

20

5/15/2018 Prak Game Ular Tangga - slidepdf.com

http://slidepdf.com/reader/full/prak-game-ular-tangga-55ab4ebd4319a 21/21

Praktikum Pemrograman Lanjut

Politeknik Elektronika Negeri Surabaya

// load the image

backgroundImg = Image.createImage("/tiledlayer1.gif");

// create the tiledlayer background

background = new TiledLayer(5, 5, backgroundImg, 32, 32);

// array that specifies what image goes where

int[] cells = {

3, 3, 3, 3, 3, // sky

3, 3, 3, 3, 3, // sky

1, 1, 1, 1, 1, // earth

2, 2, 2, 2, 2, // sea

2, 2, 2, 2, 2 // sea

};

// set the background with the images

for (int i = 0; i < cells.length; i++) {

int column = i % 5;

int row = (i - column)/5;

background.setCell(column, row, cells[i]);}

// set the location of the background

background.setPosition(GAME_ORIGIN_X, GAME_ORIGIN_Y);

}

The final result will look like Figure 6.

************ Selamat Mengerjakan ************* 

21