?? document.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 + -