[fontfamily=courier,fontsize=\relsize{-3},frame=single] /** * Referencia al TetrisMidlet donde se incluye este MiCanvas */ TetrisMidlet tetrisMidlet; /** * Número de pixeles del ancho y alto de cada celda de * este tablero de juego */ private int anchoCelda = -1;
[fontfamily=courier,fontsize=\relsize{-3},frame=single] public class TetrisMidlet extends MIDlet implements javax.microedition.lcdui.CommandListener { MiCanvas miCanvas; Rejilla rejilla; Figura figura=null;
[fontfamily=courier,fontsize=\relsize{-3},frame=single] public TetrisMidlet() { miCanvas = new MiCanvas(this); rejilla = new Rejilla(12,22); }
[fontfamily=courier,fontsize=\relsize{-3},frame=single] /** * Obtiene una referencia a la Rejilla del juego * @return una referencia a la Rejilla del juego */ public Rejilla getRejilla(){ return rejilla; } /** * Obtiene una referencia a la Figura que cae actualmente en el juego * @return una referencia a la Figura actual */ public Figura getFigura(){ return figura; }
[fontfamily=courier,fontsize=\relsize{-3},frame=single] /** * Dibuja los bordes del tablero de juego y las celdas ocupadas por trozos * de figura ya colocadas en el tablero * @param g el Graphics donde se dibujará */ public void dibujaRejilla(Graphics g){ int i,j; Rejilla rejilla=tetrisMidlet.getRejilla(); int xoffset=(getWidth()-rejilla.getAnchura()*anchoCelda)/2; for(i=0;i<rejilla.getAnchura();i++){ for(j=0;j<rejilla.getAltura();j++){ if(rejilla.getTipoCelda(i,j) == Rejilla.BLOQUE){ g.setColor(0,0,0); g.drawRect(xoffset+i*anchoCelda,j*anchoCelda,anchoCelda, anchoCelda); } else if(rejilla.getTipoCelda(i,j) == Rejilla.PIEZA){ g.setColor(255,255,0); g.fillRect(xoffset+i*anchoCelda,j*anchoCelda,anchoCelda, anchoCelda); g.setColor(255,0,0); g.drawRect(xoffset+i*anchoCelda,j*anchoCelda,anchoCelda, anchoCelda); } } } } /** * Dibuja la Figura fig en el Graphics g pasado como parámetro * (normalmente el asociado a este Canvas) * @param fig la Figura a dibujar * @param g el Graphics donde se dibujará */ void dibujaFigura(Figura fig,Graphics g){ if (fig!=null){ Elemento elemento; Rejilla rejilla=tetrisMidlet.getRejilla(); int xoffset=(getWidth()-rejilla.getAnchura()*anchoCelda)/2+ fig.getXOrigen()*anchoCelda; int yoffset=fig.getYOrigen()*anchoCelda; for(int i=0;i<fig.getNElements();i++){ elemento=fig.getElementAt(i); g.setColor(255,255,0); g.fillRect(xoffset+elemento.getColumna()*anchoCelda, yoffset+elemento.getFila()*anchoCelda,anchoCelda, anchoCelda); g.setColor(255,0,0); g.drawRect(xoffset+elemento.getColumna()*anchoCelda, yoffset+elemento.getFila()*anchoCelda,anchoCelda, anchoCelda); } } }
[fontfamily=courier,fontsize=\relsize{-3},frame=single] /** * paint */ public void paint(Graphics g) { //g.drawString("Sample Text",0,0,Graphics.TOP|Graphics.LEFT); if(anchoCelda==-1){ anchoCelda=Math.min(getWidth()/tetrisMidlet.getRejilla().getAnchura(), (getHeight()-10)/tetrisMidlet.getRejilla().getAltura()); } g.setColor(255,255,255); g.fillRect(0,0,getWidth(),getHeight()); g.setColor(0,0,0); g.translate(0,12); dibujaRejilla(g); dibujaFigura(tetrisMidlet.getFigura(),g); g.translate(0,-12); }
Lo único que nos falta es hacer que aparezca la figura en el tablero de juego, y que ésta vaya cayendo hacia abajo. Esto lo haremos en la siguiente sección.