Desenvolva seu primeiro jogo utilizando MIDP

Provavelmente, quando se desenvolve um jogo, uma das coisas mais importantes é a interface desse jogo. Para isso, o pacote javax.microedition.lcdui facilita bastante o desenvolvimento de muitos desenhos na tela do dispositivo. Canvas,Graphics e Image são as classes principais utilizadas para desenvolvimento de gráficos.

Abaixo está um exemplo básico de um jogo que cria e desenha uma imagem, e permite que esta imagem seja movimentada com os eventos do teclado do dispositivo.

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.util.*;

public class GameMidlet extends MIDlet {
    
    public GameMidlet() {
    }
    
    protected void startApp() throws MIDletStateChangeException {
        Display display = Display.getDisplay( this );
        display.setCurrent( new GameMidletScreen() );
    }
    
    protected void destroyApp( boolean unconditional ) throws 
            MIDletStateChangeException {
    }
    
    protected void pauseApp(){}
    
    class GameMidletScreen extends Canvas implements Runnable {
        
        Random generator;
        Graphics g1;
        Image img1;
        Image img2;
        int X;
        int Y;
        int Direction;
        
        public GameMidletScreen() {
            loadImages();
            X = getWidth()/2;
            Y = getHeight()/2;
            new Thread( this ).start();
        }
        
        public void loadImages() {
            try {
                if( !isDoubleBuffered() ) {
                    img1 = Image.createImage( getWidth(), getHeight() );
                    g1 = img1.getGraphics();
                }
                img2 = Image.createImage("/game.png");
            catch( Exception e ) {
                e.printStackTrace();
            }
        }
        
        public void run() {
            whiletrue ) {
                int loopDelay = 1000 10;
                long loopStartTime = System.currentTimeMillis();
                doSomething();
                long loopEndTime  = System.currentTimeMillis();
                int loopTime = (int)(loopEndTime - loopStartTime);
                if( loopTime < loopDelay ) {
                    try {
                        Thread.sleep( loopDelay - loopTime );
                    catch( Exception e ){}
                    
                }
            }
        }
        
        public void doSomething() {
            int ImageSpeed = 4;
            switch( Direction ) {
                case LEFT:
                    X-=ImageSpeed;
                    break;
                case RIGHT:
                    X+=ImageSpeed;
                    break;
                case UP:
                    Y-=ImageSpeed;
                    break;
                case DOWN:
                    Y+=ImageSpeed;
                    break;
            }
            repaint();
            serviceRepaints();
        }
        
        protected void paint( Graphics g ) {
            Graphics original = g;
            if( !isDoubleBuffered() ) {
                g = g1;
            }
            g.fillRect( 00this.getWidth(), this.getHeight() );
            g.drawImage( img2, X, Y, Graphics.VCENTER | Graphics.HCENTER );
            
            if( !isDoubleBuffered() ) {
                original.drawImage( img1, 00, Graphics.TOP | 
                        Graphics.LEFT );
            }
        }
        
        protected void keyPressed( int keyCode ) {
            int gameAction = getGameAction( keyCode );
            switch( gameAction ) {
                case LEFT:
                    //Move imagem para esquerda
                    Direction = LEFT;
                    break;
                case RIGHT:
                    //Move imagem para direita
                    Direction = RIGHT;
                    break;
                case UP:
                    //Move imagem para cima
                    Direction = UP;
                    break;
                case DOWN:
                    //Move imagem para baixo
                    Direction = DOWN;
                    break;
            }
        }
        
        protected void keyReleased( int keyCode ) {
            Direction = 0;
        }
    }
}