您的位置:首页 > 其它

J2ME 拼图游戏 快速开发 全过程 (三)——新游戏界面

2012-04-14 13:28 225 查看
代码:

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);

}

}



}

运行时显示:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐