Anda di halaman 1dari 23

UNIVERSITAS GUNADARMA

Nama Kelompok : Ibnu Fadhil Ramdan (52417793)


Sakhta Busyra (55417457)
Yoga Prasetio (57417275)
Kelompok 10 : Pembuatan Program Game J2ME Hiburan
BAB I

I. Design Program

a. Pertama design visual midlet pada netbeans terlebih dahulu seperti gambar di
bawah ini.

Tambahkan form baru untuk membuat splashscreen, main menu yang


berisi play, help, about, dan exit lalu help form dan about form seperti
gambar di atas. Lalu arahkan tanda panah untuk memberi petunjuk kemana
pilihan selanjutnya jika kita memilih command atau form-form di atas seperti
gambar di atas.
Pada saat tampilan awal mobile device kita akan langsung menuju ke
splashscreen seperti tanda panah yang sudah kita arahkan di atas. Dari
splashscreen kita akan memasukin MainMenu dimana terdapat 4 Menu yaitu
play untuk memulai game, Help untuk menuju ke helpform, about untuk
menuju ke about form dan juga exit untuk keluar dari main Menu.
Selanjutnya kita akan mendesign karakter pada game design untuk
memasukkan karakter yang kita inginkan ke dalam game.
b. Kedua kita akan mendesign karakter pada platform game design.

Untuk mendesign karakter yang ingin kita masukan ke dalam game


sediakan terlebih dahulu karakter yang ingin kita gunakan. Pada game kali
ini saya menggunakan gambar laba-laba, bola, wadah, dan juga background
untuk layer dan juga splashscreen.

Gambar di atas untuk mengisi background, karakter laba-laba, bola, dan juga
wadah pada saat game akan di mainkan, perhatikan nama pada gambar
tersebut karena berhubungan pada saat penggunaan variable di dalam
program nanti. Selanjutnya kita akan masuk ke tahap pemrograman.
c. Ketiga tahap memasukan program game pada kelas java.

Pada saat pemrograman ada beberapa tahapan yang harus kita lewati
dalam pembuatan program game. Pertama kita akan meloading semua
karakter sprite ke dalam screen, kedua menggerakan sprite laba-laba, ketiga
mengabil, membawa dan menyatukan bola sesuai warna, keempat
penilaian, dan yang kelima countdown dan notifikasi menang/kalah.
Langsung saja ke tahap yang pertama yaitu program untuk meloading
semua karakter sprite ke dalam screen.
package hello;

import java.io.IOException;
import java.util.Random;

import javax.microedition.lcdui.Graphics; ini adalah import pada


import javax.microedition.lcdui.game.GameCanvas; untuk menyediakan
import javax.microedition.lcdui.game.LayerManager; penggunaan pada variable.
import javax.microedition.lcdui.game.Sprite;
import javax.microedition.lcdui.game.TiledLayer;

public class Game extends GameCanvas implements Runnable{


Sprite sprite_laba;

Sprite sprite_bola[] = new Sprite[8]; ( ini adalah array untuk menginput bola yang kita
masukan tadi)
String nama_bola[] =
{"biru","Coklat","Hijau","Hitam","Kuning","Merah","Orange","Ungu"};

Sprite sprite_lingkaran[] = new Sprite[8]; ( begitu juga dengan lingkaran)


String nama_lingkaran[] =
{"biru","Coklat","Hijau","Hitam","Kuning","Merah","Orange","Ungu"};

TiledLayer background;
LayerManager layer_manager;
GameDesign game_design;

Random r = new Random(); (ini adalah variable untuk merandom bola dan lingkaran)
public Game(){
super(false);
try{
game_design = new GameDesign(); (ini adalah penambahan variable game design)
sprite_laba = game_design.getLabalaba(); (ini penambahan variable sprite laba-laba)
layer_manager = new LayerManager(); (ini untuk variable layer manager)

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


sprite_bola[i] = new Sprite(game_design.getBola());
sprite_bola[i].setFrame(i);
layer_manager.append(sprite_bola[i]);
}

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


sprite_lingkaran[i] = new Sprite(game_design.getLingkaran());
sprite_lingkaran[i].setFrame(i);
layer_manager.append(sprite_lingkaran[i]);
}

background = game_design.getBackground();
game_design.updateLayerManagerForScene(layer_manager);
}catch(IOException ex){}
acakBolaDanLingkaran();
start();
}

public int getRandomNumber(int maks){ (ini adalah perintah untuk merandom bola
dan lingkaran)
int a = r.nextInt()%maks;
if(a<0)
a*=-1;
return a;
}
public void acakBolaDanLingkaran(){
for(int i=0; i<sprite_bola.length;i++){
int x = getRandomNumber(background.getWidth());
int y = getRandomNumber(background.getHeight());
sprite_bola[i].setPosition(x, y);
}
for(int i=0; i<sprite_lingkaran.length;i++){
int x = getRandomNumber(background.getWidth());
int y = getRandomNumber(background.getHeight());
sprite_lingkaran[i].setPosition(x, y);
}
}

public void start(){


Thread t = new Thread(this);
t.start();
}
public void run() {
Graphics g = getGraphics();
drawScreen(g);
}
public void drawScreen(Graphics g){
layer_manager.paint(g, 0, 0);
}

}
Setelah program di atas selesai kita baru saja merandom bola dan
lingkaran pada screen. Selanjutnya kita akan melaju ke tahap berikutnya
yaitu menggerakan laba-laba, mengambil dan menyatukan warna bola dan
wadah, penilaian, dan countdown serta hasil win/lose.

package hello;

import java.io.IOException;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.LayerManager;
import javax.microedition.lcdui.game.Sprite;
import javax.microedition.lcdui.game.TiledLayer;

public class Game extends GameCanvas implements Runnable{


Sprite sprite_laba;
Sprite sprite_bola[] = new Sprite[8];
String nama_bola[] =
{"biru","Coklat","Hijau","Hitam","Kuning","Merah","Orange","Ungu"};

Sprite sprite_lingkaran[] = new Sprite[8];


String nama_lingkaran[] =
{"biru","Coklat","Hijau","Hitam","Kuning","Merah","Orange","Ungu"};

TiledLayer background;
LayerManager layer_manager;
GameDesign game_design;

Random r = new Random();

boolean is_play;
int last_direction;

boolean is_bringing_theball = false;


int index_bola_yg_dibawa;
int index_lingkaran_yg_tersedia;
int score;
int time;
Timer timer;
public Game(){
super(false);
try{
game_design = new GameDesign();
sprite_laba = game_design.getLabalaba();
layer_manager = new LayerManager();

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


sprite_bola[i] = new Sprite(game_design.getBola());
sprite_bola[i].setFrame(i);
layer_manager.append(sprite_bola[i]);
}

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


sprite_lingkaran[i] = new Sprite(game_design.getLingkaran());
sprite_lingkaran[i].setFrame(i);
layer_manager.append(sprite_lingkaran[i]);
}

background = game_design.getBackground();
game_design.updateLayerManagerForScene(layer_manager);
}catch(IOException ex){}
acakBolaDanLingkaran();
start();
}

public int getRandomNumber(int maks){


int a = r.nextInt()%maks;
if(a<0)
a*=-1;
return a;
}

public void acakBolaDanLingkaran(){


for(int i=0; i<sprite_bola.length;i++){
int x = getRandomNumber(background.getWidth());
int y = getRandomNumber(background.getHeight());
sprite_bola[i].setPosition(x, y);
}
for(int i=0; i<sprite_lingkaran.length;i++){
int x = getRandomNumber(background.getWidth());
int y = getRandomNumber(background.getHeight());
sprite_lingkaran[i].setPosition(x, y);
}
}

public void start(){


startTimer();
is_play = true;
Thread t = new Thread(this);
t.start();
}

public void run() {


Graphics g = getGraphics();
while(is_play == true){
input();
if(is_bringing_theball){
sprite_bola[index_bola_yg_dibawa].setPosition(sprite_laba.getX(),
sprite_laba.getY());

}
adjustScreen();
drawScreen(g);
if(time<0){
is_play = false;
timer.cancel();
}
try{
Thread.sleep(30);
}catch(InterruptedException ex){
ex.printStackTrace();
}
}
}
public void drawScreen(Graphics g){
g.setColor(255, 255, 255);
g.fillRect(0, 0, getWidth(), getHeight());
layer_manager.paint(g, 0, 0);
g.setColor(0, 0, 0);
g.drawString("Score: "+score, getWidth(), 0, Graphics.RIGHT | Graphics.TOP);
g.drawString("Time left: "+time, 0, 0, Graphics.LEFT | Graphics.TOP);
flushGraphics();
}
public void moveCharacter(int direction){
if(last_direction != direction){
switch(direction){
case UP:
sprite_laba.setFrameSequence(game_design.labalaba_top);
break;
case DOWN:
sprite_laba.setFrameSequence(game_design.labalaba_bottom);
break;
case LEFT:
sprite_laba.setFrameSequence(game_design.labalaba_left);
break;
case RIGHT:
sprite_laba.setFrameSequence(game_design.labalaba_right);
break;

}
last_direction = direction;
}
switch(direction){
case UP:
if (sprite_laba.getY()-2>0){
sprite_laba.move(0, -2);
}
break;
case DOWN:
if(sprite_laba.getX()+2 < background.getHeight()){
sprite_laba.move(0, 2);
}
break;
case LEFT:
if(sprite_laba.getX()-2>0){
sprite_laba.move(-2, 0);

}
break;
case RIGHT:
if(sprite_laba.getX()+2 < background.getWidth()){
sprite_laba.move(2, 0);
}
break;
}
sprite_laba.nextFrame();
}
public void input(){
int states = getKeyStates();
if((states & UP_PRESSED)!=0){
moveCharacter(UP);
}
if((states & DOWN_PRESSED)!=0){
moveCharacter(DOWN);
}
if((states & LEFT_PRESSED)!=0){
moveCharacter(LEFT);
}
if((states & RIGHT_PRESSED)!=0){
moveCharacter(RIGHT);
}
}
public void adjustScreen(){
int xmax = getWidth()-40;
int ymax = getHeight() - 40;
int xmin = 20;
int ymin = 20;
int viewX = 20;
int viewY = 20;

if(sprite_laba.getX()>viewX+xmax){
viewX = sprite_laba.getX()-xmax;
if(viewX+getWidth()>background.getWidth()){
viewX = background.getWidth()-getWidth();
}
}
if(sprite_laba.getY()>viewY+ymax){
viewY = sprite_laba.getY()-ymax;
if(viewY+getHeight()>background.getHeight()){
viewY = background.getHeight()-getHeight();

}
if(sprite_laba.getX()<viewX+xmax){
viewX = sprite_laba.getX()-xmin;
if(viewX < 0){
viewX = 0;
}
}
if(sprite_laba.getY()<viewY+ymin){
viewY = sprite_laba.getY()-ymin;
if(viewY<0){
viewY = 0;
}
}
layer_manager.setViewWindow(viewX, viewY, getWidth(), getHeight());

}
public void keyPressed(int keyCode){
int action = getGameAction(keyCode);
if(action == FIRE){
if(is_bringing_theball == false){
for(int i = 0; i<sprite_bola.length;i++){
if(sprite_laba.collidesWith(sprite_bola[i], true)){
index_bola_yg_dibawa = i;
index_lingkaran_yg_tersedia = i;
is_bringing_theball = true;
break;
}
}
}else{
if(is_bringing_theball == true){
if(action == FIRE){

if(sprite_bola[index_bola_yg_dibawa].collidesWith(sprite_lingkaran[index_lingkaran_y
g_tersedia], true)){
sprite_bola[index_bola_yg_dibawa].setVisible(false);
sprite_lingkaran[index_lingkaran_yg_tersedia].setVisible(false);
score += 10;
}
else{
score -= 10;
}
}
is_bringing_theball = false;
}
}
}
}
public void startTimer(){
time = 120;
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask(){

public void run() {


time --;
}

}, 1000, 1000);
}
public void drawOverScreen(Graphics g){
g.setColor(255, 255, 255);
g.fillRect(0, 0, getWidth(), getHeight());
g.setFont(Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_BOLD |
Font.STYLE_UNDERLINED, Font.SIZE_LARGE));
if(score == 80){
g.setColor(0, 255, 0);
g.drawString("YOU WIN", getWidth()/2, getHeight()/2,Graphics.HCENTER
| Graphics.BOTTOM);

}else{
g.setColor(255, 0, 0);
g.drawString("You LOSE", getWidth()/2, getHeight()/2, Graphics.HCENTER
| Graphics.BOTTOM);
}
flushGraphics();
}
}

Ini adalah program akhir pada saat pembuatan game.

Untuk menggerakan bola kita perlu perintah sebagai berikut :

public void moveCharacter(int direction){


if(last_direction != direction){
switch(direction){
case UP:
sprite_laba.setFrameSequence(game_design.labalaba_top);
break;
case DOWN:
sprite_laba.setFrameSequence(game_design.labalaba_bottom);
break;
case LEFT:
sprite_laba.setFrameSequence(game_design.labalaba_left);
break;
case RIGHT:
sprite_laba.setFrameSequence(game_design.labalaba_right);
break;

}
last_direction = direction;
}
switch(direction){
case UP:
if (sprite_laba.getY()-2>0){
sprite_laba.move(0, -2);
}
break;
case DOWN:
if(sprite_laba.getX()+2 < background.getHeight()){
sprite_laba.move(0, 2);
}
break;
case LEFT:
if(sprite_laba.getX()-2>0){
sprite_laba.move(-2, 0);

}
break;
case RIGHT:
if(sprite_laba.getX()+2 < background.getWidth()){
sprite_laba.move(2, 0);
}
break;
}
sprite_laba.nextFrame();
}
public void input(){
int states = getKeyStates();
if((states & UP_PRESSED)!=0){
moveCharacter(UP);
}
if((states & DOWN_PRESSED)!=0){
moveCharacter(DOWN);
}
if((states & LEFT_PRESSED)!=0){
moveCharacter(LEFT);
}
if((states & RIGHT_PRESSED)!=0){
moveCharacter(RIGHT);
}
}

Untuk perintah mengambil dan membawa bola sesuai warna kita perlu
ketikan program berikut :

public void keyPressed(int keyCode){


int action = getGameAction(keyCode);
if(action == FIRE){
if(is_bringing_theball == false){
for(int i = 0; i<sprite_bola.length;i++){
if(sprite_laba.collidesWith(sprite_bola[i], true)){
index_bola_yg_dibawa = i;
index_lingkaran_yg_tersedia = i;
is_bringing_theball = true;
break;
}
}
}else{
if(is_bringing_theball == true){
if(action == FIRE){

Untuk penilaian kita menambahkan program berikut:

if(sprite_bola[index_bola_yg_dibawa].collidesWith(sprite_lingkaran[index_lingkara
n_yg_tersedia], true)){
sprite_bola[index_bola_yg_dibawa].setVisible(false);
sprite_lingkaran[index_lingkaran_yg_tersedia].setVisible(false);
score += 10;
}
else{
score -= 10;
}
}
Untuk countdown dan notifikasi menang/kalah kita masukkan program
berikut:

public void startTimer(){


time = 120;
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask(){

public void run() {


time --;
}

}, 1000, 1000);
}
public void drawOverScreen(Graphics g){
g.setColor(255, 255, 255);
g.fillRect(0, 0, getWidth(), getHeight());
g.setFont(Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_BOLD |
Font.STYLE_UNDERLINED, Font.SIZE_LARGE));
if(score == 80){
g.setColor(0, 255, 0);
g.drawString("YOU WIN", getWidth()/2, getHeight()/2,Graphics.HCENTER
| Graphics.BOTTOM);

}else{
g.setColor(255, 0, 0);
g.drawString("You LOSE", getWidth()/2, getHeight()/2, Graphics.HCENTER
| Graphics.BOTTOM);
Setelah semua program di ketikkan selanjut nya kita menambahkan form
game yang sudah kita buat ke dalam visual midlet seperti gambar di atas tadi
untuk mengarahkan jika kita memilih tombol play pada mainmenu.

Perhatikan tanda panah dari form main menu play kea rah game yang
sudah kita buat programnya di atas. Setelah semua di set dengan benar
jalankan program game tersebut.
BAB II

II. Flatform/ Flowchart (Building)

Lanjutan dari bab 1 flatform yang digunakan adalah visual midlet, game
builder, dan juga java class yang berisikan program. Berikut adalah
flowchart pada saat visual midlet untuk mendesign tampilan awal platform
J2ME di jalankan :

Started Moblie Device Flowchart game design pada visual


midlet

Variabel :

SplashScreen

Main Menu

Help Form

About FOrm

C SplashScreen

Play
Yes Help
IF
D Main About
Menu
Exit
N
O

A
C
A

Yes
IF
Play Game

B
N
O

Yes
IF
Help Help Form

N Command Back
O
D

Yes
IF
About About Form

Command Back
N
O

D
B
Exit

End
Barikutnya adalah Flowchart dari program java class game :

Game Start

Flowchart Program java class game

Variabel :
Laba-Laba
Bola
Wadah
Score
Time

Mulai Game
B

If laba Yes
memba
Masukkan ke dalam wadah
wa bola

N
O

Cari bola Hitung Score

B A
A

Yes
If score WIN
> 80

N
O

Lose END
BAB III

III. Cara Menjalankan Aplikasi (Manual Book)

Setelah kita selesai membuat program game cara menjalakannya sebagai


berikut:

1. Compile Program pada netbeans dan run dengan menekan F5


2. Akan muncul tampilan splaschscreen lalu tekan tombol enter
3. Setelah itu akan muncul tampilan MainMenu yang berisi Play, Help,
About, dan Exit.
4. Tekan Play untuk memainkan game.
5. Tekan Help untuk menuju ke form help yang berisi cara memainkan
game.
6. Tekan About untuk mengetahui tentang apa isi game.
7. Dan Tombol Exit untuk keluar dan kembail ke SplashScreen

Jika kita memainkan game membutuhkan score di atas 80 untuk


memenangkan game tersebut, jika waktu habis dan score kurang dari 80
maka kita akan kalah. Selamat mencoba.
Daftar Pustaka :
en.wikipedia.org/wiki/Game_programming

www.scribd.com/.../Pemrograman-Mobile-Mobile-Game
netbeans.org/community/releases/36/J2ME_Support.html

https://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-
javase6-419409.html

Anda mungkin juga menyukai