Buku Tamu

//—-Kode Buku Tamu anda di sini—–

Game Sederhana J2ME

Tidak ada komentar
Selamat malam sahabat blogku yang setia, apa kabarnya? semoga baik -  baik aja. rasanya sudah lama sahabat, saya ndak posting "sesuatu" di blog ini. nah...,sekarang saya mau memberikan sesuatu kepada sahabat blog tentang permainan di java mobile. udah gak sabar ya, sekarang kita langsung aja ke TKP.
untuk membuat suatu game kita memerlukan
1. skenario
2. source code
3. testing

kebetulan kemarin saya nemu diinternet game sederhana tentang J2ME. yang kurang lebih begini nih tampilannya....,















berikut source codenya :
1. Principal.java

/**
 * @author rodrigo.silva
 */
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.midlet.*;

public class Principal extends MIDlet implements CommandListener {

    private Command sairC;
    private Command iniciarC;
    Principal pri;
    Display dis;
    Jogo canvas;
    Intro introducao;

    public Principal() {
        this.canvas = new Jogo();
        this.introducao = new Intro();
        sairC = new Command("Sair", Command.EXIT, 0);
        iniciarC = new Command("Iniciar", Command.OK, 1);
    }

    public void startApp() {
        this.dis = Display.getDisplay(this);
        this.introducao.addCommand(sairC);
        this.introducao.addCommand(iniciarC);
        this.introducao.setCommandListener(this);
        dis.setCurrent(introducao);
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
        notifyDestroyed();
    }

    public void commandAction(Command c, Displayable d) {
        if (d == introducao) {
            if (c == sairC) {
                destroyApp(true);
            }
            if (c == iniciarC) {
                novoGame();
            }
        }
        if (d == canvas) {
            if (c == sairC) {
                dis.setCurrent(introducao);
            }
            if (c == iniciarC) {
                novoGame();
            }
        }
    }

    public void novoGame() {
        canvas = new Jogo();
        this.canvas.addCommand(sairC);
        this.canvas.addCommand(iniciarC);
        this.canvas.setCommandListener(this);
        dis.setCurrent(canvas);
    }
}


2. Game.java
/**
 *
 * @author Rodrigo Caetano Silva
 */
import java.util.Random;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;

public class Game extends Canvas {

    public  boolean colisao(Personagem v, Personagem p) {
        boolean colision = false;
        colision = (v.getY2() >= p.getY()) && (v.getY() < p.getY2()) ? !((v.getX() > p.getX2()) || (v.getX2() < p.getX())) ? true : false : false;
        return colision;
    }

    public int randomize(int min, int max) {
        int randomize = 0;
        int f = -1;
        while (f < min) {
            Random r = new Random();
            f = ((r.nextInt() & 0xffff) * 180) >> 16;
            randomize = f > 20 ? f : 0;
        }
        return randomize;
    }

    public void desenha(Graphics g, int x, int y, int larg, int alt, Image imagem) {
        g.drawImage(imagem, x, y, Graphics.VCENTER | Graphics.RIGHT);
    }

    protected void paint(Graphics g) {
       
    }

  
}


3. Intro.java

import java.io.IOException;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;

public class Intro extends Canvas implements Runnable {

    private Image roccaImg;
    private Image fundoImg;
    boolean intro;
    Personagem rocca;
    Personagem fundo;
    int alt;
    int larg;
    int vilaoX;
    int vilaoY;
    public Intro() {
        vilaoX = 20;
        vilaoY = 0;
        intro = true;
        larg = getWidth();
        alt = getHeight();
        try {
            this.roccaImg = Image.createImage("/imagem/logo.png");
            this.fundoImg = Image.createImage("/imagem/rocket.png");
            rocca = new Personagem(120, 100, 70, 25, roccaImg);
            fundo = new Personagem(180, 100, 100, 0, fundoImg);
            rocca.setImg(roccaImg);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        new Thread(this).start();
    }

    protected void paint(Graphics g) {
        fundo.desenha(g);
        rocca.desenha(g);
    }

    public void run() {
        int velX = 2;
        int velY = 2;
        while (intro) {
            try {
                Thread.sleep(50);
                rocca.setAll(rocca.getX()+velX,rocca.getY()+velY);
                if ((rocca.getX() + 1) > larg || (rocca.getX() < 70)) {
                    velX = -velX;
                }
                if ((rocca.getY() + 30) > alt || (rocca.getY()< 10)) {
                    velY = -velY;
                }
               
                repaint();
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
        }
    }
}


4. Jogo.java

/**
 *
 * @author Rodrigo Caetano Silva
 */
import java.io.IOException;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;

public class Jogo extends Game implements Runnable {

    Personagem heroi;
    Personagem vilao;
    Personagem tiroEsq;
    Personagem tiroDir;
    Personagem fundo;
    int dir;
    int vida;
    int tiroDirY;
    int tiroDirX;
    int tiroEsqY;
    int tiroEsqX;
    boolean efetuouDisparo;
    public int larg;
    boolean statusTiroDir;
    boolean statusTiroEsq;
    int velVilaoX;
    int velVilaoY;
    private boolean controle;
    private boolean game;
    public int alt;
    public int pontos;
    public int pontosIncre;
    public int nivel;
    private Image alienImg;
    private Image balaImg;
    private Image heroiImg;
    private Image fundoImg;

    public Jogo() {
        vida =3;
        velVilaoX = 5;
        velVilaoY = 5;
        efetuouDisparo = false;
        statusTiroDir = false;
        game = true;
        larg = getWidth();
        alt = getHeight();
        pontosIncre = 100;
        pontos = 0;
        nivel = 0;
        imagens("/imagem/alien.png", "/imagem/tiro.png", "/imagem/fundo.png", "/imagem/fog.png");
        fundo = new Personagem(180, 100, 100, 0, fundoImg);
        heroi = new Personagem(larg - 120, alt - 50, 20, 20, heroiImg);
        vilao = new Personagem(100, 0, 20, 30, alienImg);
        tiroDir = new Personagem(heroi.getX() + 5, heroi.getY(), 20, 20, balaImg);
        tiroEsq = new Personagem(heroi.getX() - 15, heroi.getY(), 10, 10, balaImg);
        new Thread(this).start();
    }

    protected void paint(Graphics g) {
        fundo.desenha(g);
        atualizaPersonagens(g);
        nivel();
        infoGame(g);
        disparo(g);
        heroi.desenha(g);
        vilao.desenha(g);
        tiroDir.desenha(g);
        tiroEsq.desenha(g);
        statusGame(g);
    }

    private void atualizaPersonagens(Graphics g) {
        vida = colisao(vilao, heroi)?vida=vida-1:vida;
        game = vida<=0?false:true;
        if (colisao(vilao, tiroDir) || colisao(vilao, tiroEsq)) {
            vilao.setAll(randomize(30, 160), 0);
            pontos = pontos + pontosIncre;
        }
        velocidadeNiveis();
        vilao.setAll(vilao.getY() > 220 ? randomize(20, 180) : vilao.getX(), vilao.getY() > 220 ? 0 : vilao.getY());
        tiroDir.setAll(heroi.getX() + 3, heroi.getY());
        tiroEsq.setAll(heroi.getX() - 15, heroi.getY());
    }

    private void velocidadeNiveis() {
        if (nivel == 0) {
            velVilaoY = 2;
            vilao.setY(vilao.getY() + velVilaoY);
        }
        if (nivel == 1) {
            velVilaoY = 3;
            vilao.setY(vilao.getY() + velVilaoY);
        }
        if (nivel == 2) {
            velVilaoY = 5;
            vilao.setY(vilao.getY() + velVilaoY);
        }
        if(nivel == 3){
            defineComoCair(5, 5, 0, 0);
        }
        if(nivel == 4){
            defineComoCair(5, 5, 0, 0);
        }
    }

    private void defineComoCair(int x, int y, int p, int z) {
        if ((vilao.getX() + x) > larg || (vilao.getX() - 20 < p)) {
            velVilaoX = -velVilaoX;
        }
        if ((vilao.getY() + y) > alt || (vilao.getY() < z)) {
            velVilaoY = -velVilaoY;
        }
        vilao.setAll(vilao.getX() + velVilaoX, vilao.getY() + velVilaoY);
    }

    public void run() {
        while (game) {
            try {
                Thread.sleep(50);
                if (controle) {
                    switch (dir) {
                        case UP:
                            heroi.setY(heroi.getY() < 0 ? 200 : heroi.getY() - 15);
                            break;
                        case DOWN:
                            heroi.setY(heroi.getY() > 200 ? 0 : heroi.getY() + 15);
                            break;
                        case LEFT:
                            heroi.setX(heroi.getX() < 15 ? 180 : heroi.getX() - 15);
                            break;
                        case RIGHT:
                            heroi.setX(heroi.getX() > 180 ? 15 : heroi.getX() + 15);
                            break;
                        case FIRE:
                            efetuouDisparo = true;
                    }
                }
                repaint();
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
        }
    }

    private void imagens(String imgAlien, String imgBala, String imgFundo, String imgHeroi) {
        try {
            if (!imgAlien.equals("")) {
                this.alienImg = Image.createImage(imgAlien);
                if (vilao != null) {
                    vilao.setImg(this.alienImg);
                }
            }
            if (!imgBala.equals("")) {
                this.balaImg = Image.createImage(imgBala);
            }
            if (!imgFundo.equals("")) {
                this.fundoImg = Image.createImage(imgFundo);
                if (fundo != null) {
                    fundo.setImg(this.fundoImg);
                }
            }
            if (!imgHeroi.equals("")) {
                this.heroiImg = Image.createImage(imgHeroi);
                if (heroi != null) {
                    heroi.setImg(this.heroiImg);
                }
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }

    }

    public void nivel() {
        this.nivel = this.nivel == -1 ? 0 : this.nivel;
        this.pontos = this.nivel == -1 ? 0 : this.pontos;
        this.nivel = this.pontos > 2000 ? 1 : this.nivel;
        this.nivel = this.pontos > 5000 ? 2 : this.nivel;
        this.nivel = this.pontos > 10000 ? 3 : this.nivel;
        this.nivel = this.pontos > 25000 ? 4 : this.nivel;
        if (this.nivel == 0) {
            pontosIncre = 100;
            imagens("/imagem/alien.png", "/imagem/tiro.png", "/imagem/fundo.png", "/imagem/fog.png");
        }
        if (this.nivel == 1) {
            pontosIncre = 200;
            imagens("/imagem/alienNivel2.png", "/imagem/tiro.png", "/imagem/fundo1.png", "/imagem/fog.png");
        }
        if (this.nivel == 2) {
            pontosIncre = 300;
            imagens("/imagem/alienNivel3.png", "/imagem/tiro.png", "/imagem/fundo2.png", "/imagem/fog.png");
        }
        if (this.nivel == 3) {
            pontosIncre = 500;
            imagens("/imagem/alienNivel4.png", "/imagem/tiro.png", "/imagem/fundo5.png", "/imagem/fog.png");
        }
        if (this.nivel == 4) {
            pontosIncre = 500;
            imagens("/imagem/logo.png", "", "/imagem/rocket.png", "/imagem/fog.png");
        }
    }

    private void infoGame(Graphics g) {
        g.setColor(0xFFFAFA);
        g.drawString("Nivel : " + nivel, 0, 0, Graphics.LEFT | Graphics.TOP);
        g.drawString("Pontos : " + pontos, 0, 10, Graphics.LEFT | Graphics.TOP);
        g.drawString("Vida : " + vida, 0, 20, Graphics.LEFT | Graphics.TOP);
    }

    private void disparo(Graphics g) {
        if (efetuouDisparo) {
            if (!statusTiroDir) {
                tiroDirY = tiroDir.getY();
                tiroDirX = tiroDir.getX();
                statusTiroDir = true;
            } else {
                if (!statusTiroEsq) {
                    tiroEsqY = tiroEsq.getY();
                    tiroEsqX = tiroEsq.getX();
                    statusTiroEsq = true;
                }
            }
            efetuouDisparo = false;
        }
        if (statusTiroDir) {
            if (tiroDirY < 0) {
                tiroDirY = tiroDir.getY();
                tiroDirX = tiroDir.getX();
                statusTiroDir = false;
            }

            tiroDirY = tiroDirY - 15;
            tiroDir.setAll(tiroDirX, tiroDirY);
        }
        if (statusTiroEsq) {
            if (tiroEsqY < 0) {
                tiroEsqY = tiroEsq.getY();
                tiroEsqX = tiroEsq.getX();
                statusTiroEsq = false;
            }
            tiroEsqY = tiroEsqY - 15;
            tiroEsq.setAll(tiroEsqX, tiroEsqY);
        }
    }

    public void statusGame(Graphics g) {
        if (!game) {
            game = false;
            controle = false;
            g.setColor(0xFFFAFA);
            g.drawString("YOU LOSE", 50, 100, Graphics.LEFT | Graphics.TOP);
        } else {
            if (nivel == 4) {
                vida = 999;
                g.setColor(0x000000);
                g.drawString("CONGRATULATIONS", 30, 90, Graphics.LEFT | Graphics.TOP);
                g.drawString("YOU WIN", 50, 100, Graphics.LEFT | Graphics.TOP);
            }
        }
    }

    public void keyPressed(int key) {
        dir = getGameAction(key);
        controle = true;
    }

    public void keyReleased(int key) {
        controle = false;
        dir = -999;
    }
}


5. Personagem.java
/**
 *
 * @author Rodrigo Caetano Silva
 */
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;

public class Personagem {

    int x, y, x2, y2, tamX, tamY;
    Image img;

    public Personagem(int x, int y, int tamX, int tamY, Image img) {
        this.x = x;
        this.y = y;
        this.tamX = tamX;
        this.tamY = tamY;
        this.img = img;
        this.x2 = x + tamX;
        this.y2 = y + tamY;
    }

    Personagem(int i, int i0, int i1, int i2, String string) {
        throw new UnsupportedOperationException("Not yet implemented");
    }

    public int getTamX() {
        return tamX;
    }

    public void setTamX(int tamX) {
        this.tamX = tamX;
    }

    public int getTamY() {
        return tamY;
    }

    public void setTamY(int tamY) {
        this.tamY = tamY;
    }

    public Image getImg() {
        return img;
    }

    public void setImg(Image img) {
        this.img = img;
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
        this.x2 = x + tamX;
    }

    public int getX2() {
        return x2;
    }

    public void setX2(int x2) {
        this.x2 = x2;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
        this.y2 = y + tamY;
    }

    public int getY2() {
        return y2;
    }

    public void setY2(int y2) {
        this.y2 = y2;
    }

    public void setAll(int x, int y) {
        this.x = x;
        this.y = y;
        this.x2 = x + tamX;
        this.y2 = y + tamY;
    }

    protected void desenha(Graphics g) {
        g.drawImage(this.img, x, y, Graphics.VCENTER | Graphics.RIGHT);
    }
}


semoga bermanfaat :)

untuk source code lengkapnya klik disini

Tidak ada komentar :

Posting Komentar