user activity trackinguser activity tracking Java Mobile: 2012

Rabu, 07 Maret 2012

Lagu mbanuada kawan! try click it if you are nias! dai-dai wo klik kawan abakha he!

WORKSHOP APLIKASI GAME BERBASIS MOBILE

MODUL 1

MainMidlet.java
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import javax.microedition.lcdui.*;


public class MainMidlet extends MIDlet {

public MainMidlet() {
// TODO Auto-generated constructor stub
}

protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
// TODO Auto-generated method stub

}

protected void pauseApp() {
// TODO Auto-generated method stub

}

protected void startApp() throws MIDletStateChangeException {
// TODO Auto-generated method stub
//System.out.println("Hello world!");
Form form = new Form( "First Program" );
form.append( "Hello World" );
Display.getDisplay(this).setCurrent( form );
}

}

MODUL 2

MainMidlet.java
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;


public class MainMidlet extends MIDlet {
public MainCanvas canvas;


public MainMidlet() {
canvas = new MainCanvas(this);
}

protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
// TODO Auto-generated method stub

}

protected void pauseApp() {
// TODO Auto-generated method stub

}

protected void startApp() throws MIDletStateChangeException {
//System.out.println("Hello world!");

Display display = Display.getDisplay(this);
display.setCurrent(canvas);
canvas.start();
}

}

MainCanvas.java
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.midlet.MIDlet;


public class MainCanvas extends GameCanvas implements Runnable {
public MIDlet mainMidlet;
public Graphics g;
public static int SLEEP_TIME = 1000/30;

protected MainCanvas(MIDlet midlet) {
super(false);
mainMidlet = midlet;
this.setFullScreenMode(true);
}

public void start(){
//buat thread baru untuk menjalankan canvas
Thread runner = new Thread(this);
runner.start();
}

public void run() {
g = getGraphics();
while(true){
//set warna jadi hitam
g.setColor(0x000000);
//buat kotak dengan warna yang sudah diset sebelumnya
//kotak yang dibuat dari (0,0), sampai (width,height)
g.fillRect(0, 0, getWidth(), getHeight());
try {
//panggil fungsi sleep agar update tidak memberatkan device mobile
Thread.sleep(SLEEP_TIME);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

MODUL 3

MainCanvas.java
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.midlet.MIDlet;


public class MainCanvas extends GameCanvas implements Runnable {
public MIDlet mainMidlet;
public Graphics g;
public static int SLEEP_TIME = 1000/30;

protected MainCanvas(MIDlet midlet) {
super(false);
mainMidlet = midlet;
this.setFullScreenMode(true);
}

public void start(){
//buat thread baru untuk menjalankan canvas
Thread runner = new Thread(this);
runner.start();
}

public void run() {
g = getGraphics();
while(true){
//set warna jadi hitam
g.setColor(0x000000);
//buat kotak dengan warna yang sudah diset sebelumnya
//kotak yang dibuat dari (0,0), sampai (width,height)
g.fillRect(0, 0, getWidth(), getHeight());
//gambar lingkaran pertama
drawCircle(50, 50, 40, 0xff0000);
//gambar lingkaran kedua
drawCircle(60, 60, 20, 0x00ff00);
/*CATATAN: gambar yang digambar pertama akan tertimpa gambar yang
* digambar berikutnya
*/
try {
//panggil fungsi sleep agar update tidak memberatkan device mobile
Thread.sleep(SLEEP_TIME);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void drawCircle(int x, int y, int diameter, int color){
g.setColor(color);
g.fillArc(x-diameter/2, y-diameter/2, diameter, diameter, 0, 360);
}
}

MODUL 4

MainCanvas.java
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.midlet.MIDlet;


public class MainCanvas extends GameCanvas implements Runnable {
public MIDlet mainMidlet;
public Graphics g;
public static int SLEEP_TIME = 1000/30;
public int ballx;
public int bally;

protected MainCanvas(MIDlet midlet) {
super(false);
mainMidlet = midlet;
this.setFullScreenMode(true);
}

public void start(){
//buat thread baru untuk menjalankan canvas
Thread runner = new Thread(this);
runner.start();
}

public void run() {
g = getGraphics();

ballx = 60;
bally = 60;

while(true){
input();

//set warna jadi hitam
g.setColor(0x000000);
//buat kotak dengan warna yang sudah diset sebelumnya
//kotak yang dibuat dari (0,0), sampai (width,height)
g.fillRect(0, 0, getWidth(), getHeight());
//gambar lingkaran pertama
drawCircle(50, 50, 40, 0xff0000);
//gambar lingkaran kedua
drawCircle(ballx, bally, 20, 0x00ff00);
/*CATATAN: gambar yang digambar pertama akan tertimpa gambar yang
* digambar berikutnya
*/
//panggil flushgraphics untuk mengupdate gambar dengan yang paling baru
flushGraphics();

try {
//panggil fungsi sleep agar update tidak memberatkan device mobile
Thread.sleep(SLEEP_TIME);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void drawCircle(int x, int y, int diameter, int color){
g.setColor(color);
g.fillArc(x-diameter/2, y-diameter/2, diameter, diameter, 0, 360);
}
public void input(){
int keyState = getKeyStates();

if((keyState & UP_PRESSED) !=0){
bally-=1;
System.out.println("UP pressed " + bally);
}else if((keyState & DOWN_PRESSED) !=0){
bally+=1;
System.out.println("DOWN pressed " + bally);
}else if((keyState & RIGHT_PRESSED) !=0){
ballx+=1;
System.out.println("RIGHT pressed "+ballx);
}else if((keyState & LEFT_PRESSED) !=0){
ballx-=1;
System.out.println("LEFT pressed "+ballx);
}else if((keyState & FIRE_PRESSED) !=0){
System.out.println("FIRE pressed");
}
}
}

MODUL 5

MainCanvas.java
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.midlet.MIDlet;


public class MainCanvas extends GameCanvas implements Runnable {
public MIDlet mainMidlet;
public Graphics g;
public static int SLEEP_TIME = 1000/30;
public static int NUMBER_OF_MENU=4;

public int mainMenuState;

private boolean upButtonHolded;
private boolean downButtonHolded;

protected MainCanvas(MIDlet midlet) {
super(false);
mainMidlet = midlet;
this.setFullScreenMode(true);
}

public void start(){
//buat thread baru untuk menjalankan canvas
Thread runner = new Thread(this);
runner.start();
}

public void run() {
g = getGraphics();

mainMenuState=0;

while(true){
input();

//set warna jadi hitam
g.setColor(0x000000);
//buat kotak dengan warna yang sudah diset sebelumnya
//kotak yang dibuat dari (0,0), sampai (width,height)
g.fillRect(0, 0, getWidth(), getHeight());

if(mainMenuState==0)
drawMenuItem("PLAY", 100, 150, 100, 25, 0x00ff00, true);
else
drawMenuItem("PLAY", 100, 150, 100, 25, 0x00ff00, false);
if(mainMenuState==1)
drawMenuItem("TUTORIAL",100, 180, 100, 25, 0x00ff00, true);
else
drawMenuItem("TUTORIAL",100, 180, 100, 25, 0x00ff00, false);
if(mainMenuState==2)
drawMenuItem("ABOUT", 100, 210, 100, 25, 0x00ff00, true);
else
drawMenuItem("ABOUT", 100, 210, 100, 25, 0x00ff00, false);
if(mainMenuState==3)
drawMenuItem("EXIT", 100, 240, 100, 25, 0x00ff00, true);
else
drawMenuItem("EXIT", 100, 240, 100, 25, 0x00ff00, false);

//panggil flushgraphics untuk mengupdate gambar dengan yang paling baru
flushGraphics();
try {
//panggil fungsi sleep agar update tidak memberatkan device mobile
Thread.sleep(SLEEP_TIME);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void drawCircle(int x, int y, int diameter, int color){
g.setColor(color);
g.fillArc(x-diameter/2, y-diameter/2, diameter, diameter, 0, 360);
}
public void drawText(String text, int x, int y, int color){
g.setColor(color);
g.drawString(text, x, y, 0);
}

public void drawMenuItem(String text, int x, int y, int width, int height, int color, boolean selected){
drawText(text, x, y, color);
if(selected){
g.setColor(color);
g.drawRect(x, y, width, height);
}

}
private void previousMenu(){
mainMenuState-=1;
if(mainMenuState<0){ mainMenuState=NUMBER_OF_MENU-1; } } private void nextMenu(){ mainMenuState+=1; if(mainMenuState>=NUMBER_OF_MENU){
mainMenuState=0;
}
}

public void input(){
int keyState = getKeyStates();

if((keyState & UP_PRESSED) !=0){
//System.out.println("UP pressed ");
if(!upButtonHolded){
previousMenu();
upButtonHolded=true;
}
}else if((keyState & DOWN_PRESSED) !=0){
//System.out.println("DOWN pressed ");
if(!downButtonHolded){
nextMenu();
downButtonHolded=true;
}
}else if((keyState & RIGHT_PRESSED) !=0){
//System.out.println("RIGHT pressed ");
}else if((keyState & LEFT_PRESSED) !=0){
//System.out.println("LEFT pressed ");
}else if((keyState & FIRE_PRESSED) !=0){
//System.out.println("FIRE pressed");
System.err.println("Menu " + mainMenuState + " chosen.");
}else{
if(upButtonHolded)
upButtonHolded=false;
if(downButtonHolded)
downButtonHolded=false;
}
}
}


MODUL 6

MainCanvas.java
import java.io.IOException;

import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.midlet.MIDlet;


public class MainCanvas extends GameCanvas implements Runnable {
public MIDlet mainMidlet;
public Graphics g;
public static int SLEEP_TIME = 1000/30;
public static int NUMBER_OF_MENU=4;

public int mainMenuState;

private boolean upButtonHolded;
private boolean downButtonHolded;
private boolean fireButtonHolded;

private Image mainMenuBackground;
private int screenState;
private static int MAIN_MENU_SCREEN = 0;
private static int IN_GAME_SCREEN = 1;
private static int CREDITS_SCREEN = 2;

private int ballx;
private int bally;
private static int BALL_X_SPEED = 1;
private static int BALL_Y_SPEED = 3;

protected MainCanvas(MIDlet midlet) {
super(false);
mainMidlet = midlet;
this.setFullScreenMode(true);
}

public void start(){
//buat thread baru untuk menjalankan canvas
Thread runner = new Thread(this);
runner.start();
}

public void run() {
initialize();

while(true){
input();
//periksa screen mana yang perlu kita tampilkan
if(screenState==0){
//tampilkan main menu
drawMenu();
}else if(screenState==1){
//tampilkan game
updateGame();
drawInGame();
}else if(screenState==2){
//tampilkan credits screen
drawCredits();
}


//panggil flushgraphics untuk mengupdate gambar dengan yang paling baru
flushGraphics();
try {
//panggil fungsi sleep agar update tidak memberatkan device mobile
Thread.sleep(SLEEP_TIME);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void initialize(){
g = getGraphics();

mainMenuState=0;
screenState=0;

//load file menjadi objek image; HARUS ada di dalam blok try-catch
try {
mainMenuBackground = Image.createImage("/background.png");
} catch (IOException e1) {
e1.printStackTrace();
}
}
public void updateGame(){
ballx+=BALL_X_SPEED;
if(ballx>getWidth())ballx=0;
bally+=BALL_Y_SPEED;
if(bally>getHeight())bally=0;
}
public void drawMenu(){
//tampilkan background. (objek image, posisi x, posisi y, alignment)
g.drawImage(mainMenuBackground, 0, 0, 0);
//tulis judul game
drawText("SPACE IN VADER", 50, 50, 0xffff00);
//tampilkan menu
if(mainMenuState==0) drawMenuItem("PLAY", 100, 150, 100, 25, 0x00ff00, true);
else drawMenuItem("PLAY", 100, 150, 100, 25, 0x00ff00, false);
if(mainMenuState==1) drawMenuItem("TUTORIAL",100, 180, 100, 25, 0x00ff00, true);
else drawMenuItem("TUTORIAL",100, 180, 100, 25, 0x00ff00, false);
if(mainMenuState==2) drawMenuItem("ABOUT", 100, 210, 100, 25, 0x00ff00, true);
else drawMenuItem("ABOUT", 100, 210, 100, 25, 0x00ff00, false);
if(mainMenuState==3) drawMenuItem("EXIT", 100, 240, 100, 25, 0x00ff00, true);
else drawMenuItem("EXIT", 100, 240, 100, 25, 0x00ff00, false);
}
public void drawInGame(){
g.setColor(0x000000);
g.fillRect(0, 0, getWidth(), getHeight());

drawCircle(ballx, bally, 10, 0x00ffff);

//drawText("Press FIRE to go back", 50, 250, 0xffffff);
}
public void drawCredits(){
g.setColor(0x000000);
g.fillRect(0, 0, getWidth(), getHeight());
drawText("This game is created", 50, 50, 0x00ff00);
drawText("in Mobile Game Workshop", 50, 100, 0x00ff00);

drawText("Press FIRE to go back", 50, 250, 0xffffff);
}

public void drawCircle(int x, int y, int diameter, int color){
g.setColor(color);
g.fillArc(x-diameter/2, y-diameter/2, diameter, diameter, 0, 360);
}
public void drawText(String text, int x, int y, int color){
g.setColor(color);
g.drawString(text, x, y, 0);
}

public void drawMenuItem(String text, int x, int y, int width, int height, int color, boolean selected){
drawText(text, x, y, color);
if(selected){
g.setColor(color);
g.drawRect(x, y, width, height);
}

}
private void previousMenu(){
mainMenuState-=1;
if(mainMenuState<0){ mainMenuState=NUMBER_OF_MENU-1; } } private void nextMenu(){ mainMenuState+=1; if(mainMenuState>=NUMBER_OF_MENU){
mainMenuState=0;
}
}
private void changeScreen(int screenCode){
screenState = screenCode;
}

public void input(){
int keyState = getKeyStates();

if((keyState & UP_PRESSED) !=0){
//System.out.println("UP pressed ");
if(!upButtonHolded){
previousMenu();
upButtonHolded=true;
}
}else if((keyState & DOWN_PRESSED) !=0){
//System.out.println("DOWN pressed ");
if(!downButtonHolded){
nextMenu();
downButtonHolded=true;
}
}else if((keyState & RIGHT_PRESSED) !=0){
//System.out.println("RIGHT pressed ");
}else if((keyState & LEFT_PRESSED) !=0){
//System.out.println("LEFT pressed ");
}else if((keyState & FIRE_PRESSED) !=0){
//System.out.println("FIRE pressed");
//System.err.println("Menu " + mainMenuState + " chosen.");
if(!fireButtonHolded){
//pertama cek kita berada di screen mana
if(screenState==0){
//main menu
//periksa menu yang dipilih pemain
if(mainMenuState==0){
//masuk ke game
changeScreen(IN_GAME_SCREEN);
}else if(mainMenuState==1){
//tutorial
}else if(mainMenuState==2){
//credits
changeScreen(CREDITS_SCREEN);
}else if(mainMenuState==3){
//keluar dari game
}
}else if(screenState==1){
//in game
changeScreen(MAIN_MENU_SCREEN);
}else if(screenState==2){
//credits
changeScreen(MAIN_MENU_SCREEN);
}
fireButtonHolded=true;
}
}else{
if(upButtonHolded)
upButtonHolded=false;
if(downButtonHolded)
downButtonHolded=false;
if(fireButtonHolded)
fireButtonHolded=false;
}
}
}

MODUL 7

MainCanvas.java
import java.io.IOException;

import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.midlet.MIDlet;


public class MainCanvas extends GameCanvas implements Runnable {
public MIDlet mainMidlet;
public Graphics g;
public static int SLEEP_TIME = 1000/30;
public static int NUMBER_OF_MENU=4;

public int mainMenuState;

private boolean upButtonHolded;
private boolean downButtonHolded;
private boolean fireButtonHolded;

private Image mainMenuBackground;
private int screenState;
private static int MAIN_MENU_SCREEN = 0;
private static int IN_GAME_SCREEN = 1;
private static int CREDITS_SCREEN = 2;

private int ballx;
private int bally;
private int BALL_X_SPEED = 1;
private int BALL_Y_SPEED = 3;

private int paddlex;
private int paddley;
private int PADDLE_WIDTH;
private int PADDLE_HEIGHT;

protected MainCanvas(MIDlet midlet) {
super(false);
mainMidlet = midlet;
this.setFullScreenMode(true);
}

public void start(){
//buat thread baru untuk menjalankan canvas
Thread runner = new Thread(this);
runner.start();
}

public void run() {
initialize();

while(true){
//periksa screen mana yang perlu kita tampilkan
if(screenState==0){
//tampilkan main menu
inputMenu();
drawMenu();
}else if(screenState==1){
//tampilkan game
inputGame();
updateGame();
drawInGame();
}else if(screenState==2){
//tampilkan credits screen
inputCredits();
drawCredits();
}


//panggil flushgraphics untuk mengupdate gambar dengan yang paling baru
flushGraphics();
try {
//panggil fungsi sleep agar update tidak memberatkan device mobile
Thread.sleep(SLEEP_TIME);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void initialize(){
BALL_X_SPEED = 1;
BALL_Y_SPEED = 3;
bally=50;
ballx=50;
paddlex = 100;
paddley = 290;
PADDLE_WIDTH=40;
PADDLE_HEIGHT=20;

g = getGraphics();

mainMenuState=0;
screenState=0;

//load file menjadi objek image; HARUS ada di dalam blok try-catch
try {
mainMenuBackground = Image.createImage("/background.png");
} catch (IOException e1) {
e1.printStackTrace();
}
}
public void updateGame(){
ballx+=BALL_X_SPEED;
if(ballx>getWidth()){
//ballx=0;
BALL_X_SPEED*=-1;
}else if(ballx<0){ BALL_X_SPEED*=-1; } bally+=BALL_Y_SPEED; if(bally>getHeight()){
//bally=0;
BALL_Y_SPEED*=-1;
}else if(bally<0){ BALL_Y_SPEED*=-1; } if(isInsideRectangle(ballx, bally, paddlex, paddley, PADDLE_WIDTH, PADDLE_HEIGHT)){ BALL_Y_SPEED= Math.abs(BALL_Y_SPEED) * -1; } } public void drawMenu(){ //tampilkan background. (objek image, posisi x, posisi y, alignment) g.drawImage(mainMenuBackground, 0, 0, 0); //tulis judul game drawText("SPACE IN VADER", 50, 50, 0xffff00); //tampilkan menu if(mainMenuState==0) drawMenuItem("PLAY", 100, 150, 100, 25, 0x00ff00, true); else drawMenuItem("PLAY", 100, 150, 100, 25, 0x00ff00, false); if(mainMenuState==1) drawMenuItem("TUTORIAL",100, 180, 100, 25, 0x00ff00, true); else drawMenuItem("TUTORIAL",100, 180, 100, 25, 0x00ff00, false); if(mainMenuState==2) drawMenuItem("ABOUT", 100, 210, 100, 25, 0x00ff00, true); else drawMenuItem("ABOUT", 100, 210, 100, 25, 0x00ff00, false); if(mainMenuState==3) drawMenuItem("EXIT", 100, 240, 100, 25, 0x00ff00, true); else drawMenuItem("EXIT", 100, 240, 100, 25, 0x00ff00, false); } public void drawInGame(){ g.setColor(0x000000); g.fillRect(0, 0, getWidth(), getHeight()); drawCircle(ballx, bally, 10, 0x00ffff); drawPaddle(paddlex, paddley, PADDLE_WIDTH, PADDLE_HEIGHT); drawText("Press FIRE to go back", 50, 250, 0xffffff); } public void drawCredits(){ g.setColor(0x000000); g.fillRect(0, 0, getWidth(), getHeight()); drawText("This game is created", 50, 50, 0x00ff00); drawText("in Mobile Game Workshop", 50, 100, 0x00ff00); drawText("Press FIRE to go back", 50, 250, 0xffffff); } public void drawCircle(int x, int y, int diameter, int color){ g.setColor(color); g.fillArc(x-diameter/2, y-diameter/2, diameter, diameter, 0, 360); } public void drawText(String text, int x, int y, int color){ g.setColor(color); g.drawString(text, x, y, 0); } public void drawMenuItem(String text, int x, int y, int width, int height, int color, boolean selected){ drawText(text, x, y, color); if(selected){ g.setColor(color); g.drawRect(x, y, width, height); } } public void drawPaddle(int x, int y, int width, int height){ g.setColor(0xffffff); g.fillRect(x, y, width, height); } private void previousMenu(){ mainMenuState-=1; if(mainMenuState<0){ mainMenuState=NUMBER_OF_MENU-1; } } private void nextMenu(){ mainMenuState+=1; if(mainMenuState>=NUMBER_OF_MENU){
mainMenuState=0;
}
}
private void changeScreen(int screenCode){
screenState = screenCode;
}

private boolean isInsideRectangle(int px, int py, int x, int y, int width, int height){
if( (px>x) &&
(px<=(x+width)) && (py>y) &&
(py<=y+height)) return true; else return false; } private void inputMenu(){ int keyState = getKeyStates(); if((keyState & UP_PRESSED) !=0){ //System.out.println("UP pressed "); if(!upButtonHolded){ previousMenu(); upButtonHolded=true; } }else if((keyState & DOWN_PRESSED) !=0){ //System.out.println("DOWN pressed "); if(!downButtonHolded){ nextMenu(); downButtonHolded=true; } }else if((keyState & RIGHT_PRESSED) !=0){ //System.out.println("RIGHT pressed "); }else if((keyState & LEFT_PRESSED) !=0){ //System.out.println("LEFT pressed "); }else if((keyState & FIRE_PRESSED) !=0){ //System.out.println("FIRE pressed"); //System.err.println("Menu " + mainMenuState + " chosen."); if(!fireButtonHolded){ if(mainMenuState==0){ changeScreen(IN_GAME_SCREEN); }else if(mainMenuState==1){ //tutorial }else if(mainMenuState==2){ changeScreen(CREDITS_SCREEN); }else if(mainMenuState==3){ //exit } fireButtonHolded=true; } }else{ if(upButtonHolded) upButtonHolded=false; if(downButtonHolded) downButtonHolded=false; if(fireButtonHolded) fireButtonHolded=false; } } private void inputGame(){ int keyState = getKeyStates(); if((keyState & UP_PRESSED) !=0){ }else if((keyState & DOWN_PRESSED) !=0){ }else if((keyState & RIGHT_PRESSED) !=0){ paddlex+=1; }else if((keyState & LEFT_PRESSED) !=0){ paddlex-=1; }else if((keyState & FIRE_PRESSED) !=0){ if(!fireButtonHolded){ changeScreen(MAIN_MENU_SCREEN); fireButtonHolded=true; } }else{ /*if(upButtonHolded) upButtonHolded=false; if(downButtonHolded) downButtonHolded=false;*/ if(fireButtonHolded) fireButtonHolded=false; } } private void inputCredits(){ int keyState = getKeyStates(); if((keyState & FIRE_PRESSED) !=0){ if(!fireButtonHolded){ changeScreen(MAIN_MENU_SCREEN); fireButtonHolded=true; } }else{ if(fireButtonHolded) fireButtonHolded=false; } } } MODUL 8 MainCanvas.java import java.io.IOException; import javax.microedition.lcdui.Graphics; import javax.microedition.lcdui.Image; import javax.microedition.lcdui.game.GameCanvas; import javax.microedition.midlet.MIDlet; public class MainCanvas extends GameCanvas implements Runnable { public MIDlet mainMidlet; public Graphics g; public static int SLEEP_TIME = 1000/30; public static int NUMBER_OF_MENU=4; public int mainMenuState; private boolean upButtonHolded; private boolean downButtonHolded; private boolean fireButtonHolded; private Image mainMenuBackground; private int screenState; private static int MAIN_MENU_SCREEN = 0; private static int IN_GAME_SCREEN = 1; private static int CREDITS_SCREEN = 2; private static int GAME_OVER_SCREEN = 3; private int ballx; private int bally; private int BALL_X_SPEED = 1; private int BALL_Y_SPEED = 3; private int paddlex; private int paddley; private int PADDLE_WIDTH; private int PADDLE_HEIGHT; private int playerScore; private int highestcombo; private int combo; private int playerLife; protected MainCanvas(MIDlet midlet) { super(false); mainMidlet = midlet; this.setFullScreenMode(true); } public void start(){ //buat thread baru untuk menjalankan canvas Thread runner = new Thread(this); runner.start(); } public void run() { initialize(); while(true){ //periksa screen mana yang perlu kita tampilkan if(screenState==MAIN_MENU_SCREEN){ //tampilkan main menu inputMenu(); drawMenu(); }else if(screenState==IN_GAME_SCREEN){ //tampilkan game inputGame(); updateGame(); drawInGame(); }else if(screenState==CREDITS_SCREEN){ //tampilkan credits screen inputCredits(); drawCredits(); }else if(screenState==GAME_OVER_SCREEN){ inputGameOver(); drawGameOver(); } //panggil flushgraphics untuk mengupdate gambar dengan yang paling baru flushGraphics(); try { //panggil fungsi sleep agar update tidak memberatkan device mobile Thread.sleep(SLEEP_TIME); } catch (InterruptedException e) { e.printStackTrace(); } } } public void initialize(){ BALL_X_SPEED = 1; BALL_Y_SPEED = 3; bally=50; ballx=50; paddlex = 100; paddley = 290; PADDLE_WIDTH=40; PADDLE_HEIGHT=20; playerScore=0; highestcombo=0; combo=0; playerLife=3; g = getGraphics(); mainMenuState=0; screenState=0; //load file menjadi objek image; HARUS ada di dalam blok try-catch try { mainMenuBackground = Image.createImage("/background.png"); } catch (IOException e1) { e1.printStackTrace(); } } public void updateGame(){ ballx+=BALL_X_SPEED; if(ballx>getWidth()){
BALL_X_SPEED*=-1;
}else if(ballx<0){ BALL_X_SPEED*=-1; } bally+=BALL_Y_SPEED; if(bally>getHeight()){
//BALL_Y_SPEED*=-1;
goal();
}else if(bally<0){ BALL_Y_SPEED*=-1; } if(isInsideRectangle(ballx, bally, paddlex, paddley, PADDLE_WIDTH, PADDLE_HEIGHT)){ BALL_Y_SPEED= Math.abs(BALL_Y_SPEED) * -1; BALL_X_SPEED+=1; BALL_Y_SPEED-=1; playerScore++; combo++; if(combo>highestcombo)
highestcombo=combo;
}
}
public void drawMenu(){
//tampilkan background. (objek image, posisi x, posisi y, alignment)
g.drawImage(mainMenuBackground, 0, 0, 0);
//tulis judul game
drawText("SPACE IN VADER", 50, 50, 0xffff00);
//tampilkan menu
if(mainMenuState==0) drawMenuItem("PLAY", 100, 150, 100, 25, 0x00ff00, true);
else drawMenuItem("PLAY", 100, 150, 100, 25, 0x00ff00, false);
if(mainMenuState==1) drawMenuItem("TUTORIAL",100, 180, 100, 25, 0x00ff00, true);
else drawMenuItem("TUTORIAL",100, 180, 100, 25, 0x00ff00, false);
if(mainMenuState==2) drawMenuItem("ABOUT", 100, 210, 100, 25, 0x00ff00, true);
else drawMenuItem("ABOUT", 100, 210, 100, 25, 0x00ff00, false);
if(mainMenuState==3) drawMenuItem("EXIT", 100, 240, 100, 25, 0x00ff00, true);
else drawMenuItem("EXIT", 100, 240, 100, 25, 0x00ff00, false);
}
public void drawInGame(){
g.setColor(0x000000);
g.fillRect(0, 0, getWidth(), getHeight());
drawText("Score: " + playerScore, 10, 10, 0xffffff);
drawText("Combo: " + highestcombo, 10, 30, 0xffffff);
drawText("Press FIRE to go back", 50, 250, 0xffffff);

drawCircle(ballx, bally, 10, 0x00ffff);

drawPaddle(paddlex, paddley, PADDLE_WIDTH, PADDLE_HEIGHT);

}
public void drawCredits(){
g.setColor(0x000000);
g.fillRect(0, 0, getWidth(), getHeight());
drawText("This game is created", 50, 50, 0x00ff00);
drawText("in Mobile Game Workshop", 50, 100, 0x00ff00);

drawText("Press FIRE to go back", 50, 250, 0xffffff);
}
public void drawGameOver(){
g.setColor(0x000000);
g.fillRect(0, 0, getWidth(), getHeight());
drawText("GAME OVER", 50, 50, 0xff0000);

drawText("Press FIRE to go back", 50, 250, 0xffffff);
}
public void drawCircle(int x, int y, int diameter, int color){
g.setColor(color);
g.fillArc(x-diameter/2, y-diameter/2, diameter, diameter, 0, 360);
}
public void drawText(String text, int x, int y, int color){
g.setColor(color);
g.drawString(text, x, y, 0);
}
public void drawMenuItem(String text, int x, int y, int width, int height, int color, boolean selected){
drawText(text, x, y, color);
if(selected){
g.setColor(color);
g.drawRect(x, y, width, height);
}

}
public void drawPaddle(int x, int y, int width, int height){
g.setColor(0xffffff);
g.fillRect(x, y, width, height);
}
private void previousMenu(){
mainMenuState-=1;
if(mainMenuState<0){ mainMenuState=NUMBER_OF_MENU-1; } } private void nextMenu(){ mainMenuState+=1; if(mainMenuState>=NUMBER_OF_MENU){
mainMenuState=0;
}
}
private void changeScreen(int screenCode){
screenState = screenCode;
}

private boolean isInsideRectangle(int px, int py, int x, int y, int width, int height){
if( (px>x) &&
(px<=(x+width)) && (py>y) &&
(py<=y+height)) return true; else return false; } private void inputMenu(){ int keyState = getKeyStates(); if((keyState & UP_PRESSED) !=0){ //System.out.println("UP pressed "); if(!upButtonHolded){ previousMenu(); upButtonHolded=true; } }else if((keyState & DOWN_PRESSED) !=0){ //System.out.println("DOWN pressed "); if(!downButtonHolded){ nextMenu(); downButtonHolded=true; } }else if((keyState & RIGHT_PRESSED) !=0){ //System.out.println("RIGHT pressed "); }else if((keyState & LEFT_PRESSED) !=0){ //System.out.println("LEFT pressed "); }else if((keyState & FIRE_PRESSED) !=0){ //System.out.println("FIRE pressed"); //System.err.println("Menu " + mainMenuState + " chosen."); if(!fireButtonHolded){ if(mainMenuState==0){ changeScreen(IN_GAME_SCREEN); resetGame(); }else if(mainMenuState==1){ //tutorial }else if(mainMenuState==2){ changeScreen(CREDITS_SCREEN); }else if(mainMenuState==3){ //exit } fireButtonHolded=true; } }else{ if(upButtonHolded) upButtonHolded=false; if(downButtonHolded) downButtonHolded=false; if(fireButtonHolded) fireButtonHolded=false; } } private void inputGame(){ int keyState = getKeyStates(); if((keyState & UP_PRESSED) !=0){ }else if((keyState & DOWN_PRESSED) !=0){ }else if((keyState & RIGHT_PRESSED) !=0){ paddlex+=3; }else if((keyState & LEFT_PRESSED) !=0){ paddlex-=3; }else if((keyState & FIRE_PRESSED) !=0){ if(!fireButtonHolded){ changeScreen(MAIN_MENU_SCREEN); fireButtonHolded=true; } }else{ /*if(upButtonHolded) upButtonHolded=false; if(downButtonHolded) downButtonHolded=false;*/ if(fireButtonHolded) fireButtonHolded=false; } } private void inputCredits(){ int keyState = getKeyStates(); if((keyState & FIRE_PRESSED) !=0){ if(!fireButtonHolded){ changeScreen(MAIN_MENU_SCREEN); fireButtonHolded=true; } }else{ if(fireButtonHolded) fireButtonHolded=false; } } private void goal(){ combo=0; BALL_X_SPEED=1; BALL_Y_SPEED=3; ballx=50; bally=50; playerLife--; if(playerLife<=0) changeScreen(GAME_OVER_SCREEN); } private void resetGame(){ BALL_X_SPEED=1; BALL_Y_SPEED=3; ballx=50; bally=50; playerScore=0; highestcombo=0; combo=0; playerLife=3; } private void inputGameOver(){ int keyState = getKeyStates(); if((keyState & FIRE_PRESSED) !=0){ if(!fireButtonHolded){ changeScreen(MAIN_MENU_SCREEN); fireButtonHolded=true; } }else{ if(fireButtonHolded) fireButtonHolded=false; } } }