现在的位置: 首页 > 综合 > 正文

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

2013年09月04日 ⁄ 综合 ⁄ 共 3231字 ⁄ 字号 评论关闭

代码:

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

运行时显示:

抱歉!评论已关闭.