代码:
package cn.edu.xtu.tilepuzzle.ui;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Graphics;
import cn.edu.xtu.tilepuzzle.GameDB;
import cn.edu.xtu.tilepuzzle.contorller.MainUIController;
import cn.edu.xtu.tilepuzzle.model.BoardModel;
public class BoardUI extends Canvas{
MainUIController mainUIController;
BoardModel boardModel;
// cell geometry in pixels
public int cellWidth;// 方格的宽
public int cellHeight;// 方格的高
// grid origin in pixels
public int gridWidth;// 所有方格的宽
public int gridHeight;// 所有方格的高
private Display dpy;
public BoardUI(MainUIController mainUIController,BoardModel boardModel,Display dpy,Displayable db) {
this.boardModel=boardModel;
this.mainUIController=mainUIController;
this.dpy=dpy;
}
public void init(){
this.setFullScreenMode(true);
this.gridWidth = getWidth();
this.gridHeight = getHeight();
//System.out.println(gridWidth+","+gridHeight);
}
public void setBoardModel(BoardModel boardModel){
this.boardModel=boardModel;
}
protected void paint(Graphics g) {
//设置绘制颜色
g.setColor(0xffffff);
//绘制一个手机全屏幕填充颜色的矩形
g.fillRect(0,0,getWidth(),getHeight());
//设置下列显示画面的颜色
g.setColor(0);
// g.translate(gridWidth, gridHeight);
g.drawRect(0, 0, boardModel.rows * cellWidth, boardModel.columns * cellHeight);
// grid[2][2].paint(g);
for (int j = 0; j <boardModel.columns ; j++) {
for (int k = 0; k < boardModel.rows; k++) {
boardModel.grid[j][k].paint(g);
}
}
if (boardModel.gameState == GameDB.WON) {
//boardModel.all[(boardModel.rows * boardModel.columns) - 1].paint(g);
//System.out.println("paint 显示。。。。。。。");
// g.translate(-g.getTranslateX(), -g.getTranslateY());
}
}
public void keyPressed(int code) {
//System.out.println("游戏界面按键:"+code);
//回到原来的界面时,要暂停计时
if(code==-7 || code==7){
//暂停计时
boardModel.sumTime+=System.currentTimeMillis()-boardModel.starTime;
boardModel.starTime=0;
dpy.setCurrent(mainUIController.mainMenuUI);
mainUIController.mainMenuUI.repaint();
//System.out.println("回到原来的界面");
return;
}
if (boardModel.gameState != GameDB.PLAYING) {
return;
}
int game = getGameAction(code);
int swapx = boardModel.blankp.x; //所在行
int swapy = boardModel.blankp.y; //所在列
int direction = (boardModel.mainUIController.gameSetUI.reversed ? (-1) : 1);
switch (game) {
case Canvas.UP:
swapx += direction;
break;
case Canvas.DOWN:
swapx -= direction;
break;
case Canvas.LEFT:
swapy += direction;
break;
case Canvas.RIGHT:
swapy -= direction;
break;
default:
return;
}
//System.out.println("======="+(boardModel.blankp.x+1)+","+(boardModel.blankp.y+1)+","+(swapx+1)+","+(swapy+1));
if ((swapx < 0) || (swapx >= boardModel.columns) || (swapy < 0) || (swapy >= boardModel.rows)) {
return;
}
boardModel.moveBlank(swapx, swapy);
repaint();
if (boardModel.isSolved()) {
boardModel.sumTime+=System.currentTimeMillis()-boardModel.starTime;
boardModel.starTime=0;
boardModel.setGameState(GameDB.WON);
}
}
}
运行时显示: