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