⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 document.java

📁 JAVAME Core technology and best practices_mingjava.rar
💻 JAVA
字号:

package com.j2medev.chapter7;

import javax.microedition.lcdui.Image;

public class Document {
    
    // 游戏状态定义
    public static final int PUZZLE_STATE = 0;
    public static final int IMAGE_STATE  = 1;
    public static final int FINISH_STATE = 2;
    
    // 视图
    private Updatable updatable;
    // 当前状态
    private int state = PUZZLE_STATE;
    private Image[] images;
    //图片数组的索引
    private int[][] current = new int[3][3];
    private int hiddenX, hiddenY;
    private int steps = 0;
    
    public Document(Updatable updatable, Image[] images, int hiddenX, int hiddenY) {
        //检查参数
        if(images.length!=9)
            throw new IllegalArgumentException("Image array must contain 9 images.");
        if(hiddenX<0 || hiddenX>2)
            throw new IllegalArgumentException("Hidden image X index must be 0,1,2.");
        if(hiddenY<0 || hiddenY>2)
            throw new IllegalArgumentException("Hidden image Y index must be 0,1,2.");

        this.updatable = updatable;
        this.images = images;
        this.hiddenX = hiddenX;
        this.hiddenY = hiddenY;
        // 打乱
        int[][] puzzle = {
            {2, 7, 5, 1, 0, 6, 4, 3, 8},
            {1, 6, 7, 5, 2, 3, 4, 0, 8},
            {1, 6, 0, 3, 2, 7, 5, 4, 8},
            {2, 5, 0, 6, 4, 7, 3, 1, 8}
        };
        int n = (int)(System.currentTimeMillis() % 4);
        for(int x=0; x<3; x++) {
            for(int y=0; y<3; y++) {
                current[x][y] = puzzle[n][3*x+y];
            }
        }
    }
    
    public int getState() {
        return state;
    }
    //设置游戏状态
    public void setState(int _state){
        if(state==FINISH_STATE)
            return;
        state = _state;
        updatable.update();
    }
    
    public Image getImage(int x, int y) {
        if(state==PUZZLE_STATE) {
            if( (x==hiddenX) && (y==hiddenY) )
                return null;
            return images[current[x][y]];
        }
        return images[3*x+y];
    }
    
    private boolean isFinish() {
        for(int i=0; i<3; i++) {
            for(int j=0; j<3; j++) {
                if(current[i][j]!=(i*3+j))
                    return false;
            }
        }
        return true;
    }
    
    public void move(int x, int y) {
        if(state!=PUZZLE_STATE)
            return;
        boolean moved = false;
        // 确定隐藏单元格
        if(Math.abs(x-hiddenX)+Math.abs(y-hiddenY)==1){
            sweep(x,y);
            moved = true;
        }
        if(moved) {
            steps++;
            if(isFinish()) {
                //完成
                state = FINISH_STATE;
            }
            updatable.update();
        }
    }
    
    // 交换the (x,y) 和 (hiddenX, hiddenY)的位置:
    private void sweep(int x, int y) {
        int temp = current[x][y];
        current[x][y] = current[hiddenX][hiddenY];
        current[hiddenX][hiddenY] = temp;
        hiddenX = x;
        hiddenY = y;
    }
    
    public int getSteps() {
        return steps;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -