prak game ular tangga
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