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

📄 matrix.java.svn-base

📁 拼图游戏的手机源码 有三种不同难度的选择
💻 SVN-BASE
字号:
package jigsawpuzzle;

import javax.microedition.lcdui.*;
import java.util.*;

public class Matrix {

    public static final int UP = 0;
    public static final int DOWN = 1;
    public static final int LEFT = 2;
    public static final int RIGHT = 3;
    private Image picture;
    private int m;
    private int n;
    private int blockWidth;
    private int blockHeight;
    private Block[][] blocks;
    private int hiddenI;
    private int hiddenJ;

    public Matrix(Image picture, int m, int n, int startX, int startY) {
        this.picture = picture;
        this.m = m;
        this.n = n;
        init(m, n, startX, startY);
        breakUp();
    }

    public void init(int m, int n, int startX, int startY) {
        blockWidth = picture.getWidth() / m;
        blockHeight = picture.getHeight() / n;

        blocks = new Block[m][n];
        for (int i = 0; i < m; i++) {
            blocks[i] = new Block[n];
            for (int j = 0; j < n; j++) {
                blocks[i][j] = new Block();
            }
        }

        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                blocks[i][j].setKey(i * m + j);
                blocks[i][j].setStartX(startX);
                blocks[i][j].setStartY(startY);
            }
        }

        hiddenI = m - 1;
        hiddenJ = n - 1;
    }

    public void breakUp() {
        Random rand = new Random();
        for (int i = 0; i < 255; i++) {
            moveTo((rand.nextInt() >>> 1) % 4);
        }

        for (int i = 0; i < getM(); i++) {
            moveTo(Matrix.LEFT);
            if (i == 0) {
                for (int j = 0; j < getN(); j++) {
                    moveTo(Matrix.UP);
                }
            }
        }

        if (isFinish()) {
            breakUp();
        }
    }

    public void moveTo(int direction) {
        switch (direction) {
            case Matrix.UP:
                if (getHiddenJ() < getN() - 1) {
                    blocks[getHiddenI()][getHiddenJ()].setStartY(blocks[getHiddenI()][getHiddenJ()].getStartY() + getBlockHeight());
                    blocks[getHiddenI()][getHiddenJ() + 1].setStartY(blocks[getHiddenI()][getHiddenJ() + 1].getStartY() - getBlockHeight());

                    Block temp = blocks[getHiddenI()][getHiddenJ()];
                    blocks[hiddenI][hiddenJ] = blocks[getHiddenI()][getHiddenJ() + 1];
                    blocks[hiddenI][hiddenJ + 1] = temp;

                    hiddenJ++;
                }
                break;
            case Matrix.DOWN:
                if (getHiddenJ() > 0) {
                    blocks[getHiddenI()][getHiddenJ()].setStartY(blocks[getHiddenI()][getHiddenJ()].getStartY() - getBlockHeight());
                    blocks[getHiddenI()][getHiddenJ() - 1].setStartY(blocks[getHiddenI()][getHiddenJ() - 1].getStartY() + getBlockHeight());

                    Block temp = blocks[getHiddenI()][getHiddenJ()];
                    blocks[hiddenI][hiddenJ] = blocks[getHiddenI()][getHiddenJ() - 1];
                    blocks[hiddenI][hiddenJ - 1] = temp;

                    hiddenJ--;
                }
                break;
            case Matrix.LEFT:
                if (getHiddenI() < getM() - 1) {
                    blocks[getHiddenI()][getHiddenJ()].setStartX(blocks[getHiddenI()][getHiddenJ()].getStartX() + getBlockWidth());
                    blocks[getHiddenI() + 1][getHiddenJ()].setStartX(blocks[getHiddenI() + 1][getHiddenJ()].getStartX() - getBlockWidth());

                    Block temp = blocks[getHiddenI()][getHiddenJ()];
                    blocks[hiddenI][hiddenJ] = blocks[getHiddenI() + 1][getHiddenJ()];
                    blocks[hiddenI + 1][hiddenJ] = temp;

                    hiddenI++;
                }
                break;
            case Matrix.RIGHT:
                if (getHiddenI() > 0) {
                    blocks[getHiddenI()][getHiddenJ()].setStartX(blocks[getHiddenI()][getHiddenJ()].getStartX() - getBlockWidth());
                    blocks[getHiddenI() - 1][getHiddenJ()].setStartX(blocks[getHiddenI() - 1][getHiddenJ()].getStartX() + getBlockWidth());

                    Block temp = blocks[getHiddenI()][getHiddenJ()];
                    blocks[hiddenI][hiddenJ] = blocks[getHiddenI() - 1][getHiddenJ()];
                    blocks[hiddenI - 1][hiddenJ] = temp;

                    hiddenI--;
                }
                break;
        }
    }

    public boolean isFinish() {
        for (int i = 0; i < getM(); i++) {
            for (int j = 0; j < getN(); j++) {
                if (blocks[i][j].getKey() != (i * getM() + j)) {
                    return false;
                }
            }
        }
        return true;
    }

    public Image getPicture() {
        return picture;
    }

    public int getM() {
        return m;
    }

    public int getN() {
        return n;
    }

    public int getBlockWidth() {
        return blockWidth;
    }

    public int getBlockHeight() {
        return blockHeight;
    }

    public Block getBlockAt(int i, int j) {
        return blocks[i][j];
    }

    public int getHiddenI() {
        return hiddenI;
    }

    public int getHiddenJ() {
        return hiddenJ;
    }
}

⌨️ 快捷键说明

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