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;
}
}
}
Rabu, 07 Maret 2012
Langganan:
Komentar (Atom)