www.pudn.com > jbombman.rar > BoardView.java
package example.jbombman;
import javax.microedition.lcdui.*;
public class BoardView extends Canvas {
private Board oBoard;
private Player oPlayer;
private Enemy oEnemy;
private final int BackgroundColor = 0xffffff;
private final int iCellSize = 20;
private final int iLeft = 10;
private final int iTop = 10;
public BoardView( Board board ) {
oBoard = board;
}
public void setPlayer( Player player ) {
oPlayer = player;
}
public void setEnemy( Enemy enemy ) {
oEnemy = enemy;
}
public void paint( Graphics g ) {
synchronized( g ) {
if( oBoard.isGameOver )
paintGameOver( g );
else if( oBoard.isWin )
paintWin( g );
else
paintBoard( g );
}
}
private void paintGameOver( Graphics g ) {
g.drawImage( Img.imgGameOver, 60, 100, Graphics.LEFT|Graphics.TOP );
}
private void paintWin( Graphics g ) {
g.drawImage( Img.imgCongratulation, 60, 100, Graphics.LEFT|Graphics.TOP );
}
private void paintFrame( Graphics g ) {
g.drawRect( 0, 0, 239, 239 );
g.drawRect( 1, 1, 237, 237 );
g.drawRect( 2, 2, 235, 235 );
g.drawRect( 3, 3, 233, 233 );
g.drawRect( 7, 7, 225, 225 );
g.drawRect( 8, 8, 223, 223 );
}
private void paintBoard( Graphics g ) {
if( g.getClipX() == 0 )
paintFrame( g );
int x = ( g.getClipX() - iLeft ) / iCellSize;
int y = ( g.getClipY() - iTop ) / iCellSize;
int w = g.getClipWidth() / iCellSize;
int h = g.getClipHeight() / iCellSize;
//System.out.println( "paint: x=" + x + ", y=" + y
// + ", w=" + w + ", h=" + h );
if( h>oBoard.iRows )
h = oBoard.iRows;
for( int i=x; i= oBoard.iCols )
x = oBoard.iCols - 1;
if( x + w > oBoard.iCols )
w = oBoard.iCols - x;
if( y < 0 )
y = 0;
if( y >= oBoard.iRows )
y = oBoard.iRows - 1;
if( y + h > oBoard.iRows )
h = oBoard.iRows - y;
repaint( iLeft + x*iCellSize, iTop + y*iCellSize,
w*iCellSize, h*iCellSize );
}
}