?? mycanvas.java
字號:
package phone.mediaSound.game.jigsaw;
import java.io.IOException;
import java.util.Date;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
import java.util.Vector;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.LayerManager;
import javax.microedition.lcdui.game.TiledLayer;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
public class MyCanvas extends GameCanvas implements Runnable, CommandListener {
private Form form;
private Command cmdBack;
private Display display;
private Image image;
private TiledLayer tilerd;
private Vector vc;
private Graphics g;
private LayerManager manager;
private int data[][];// 用來表示每一網格的狀態的數組,每個元素的只是 圖像tilerd的序號
private int x, y;
private int count = 0;
private JigsawMain pt;
public MyCanvas(JigsawMain pt, Display display) {
super(true);
this.pt = pt;
this.display = display;
cmdBack = new Command("back", Command.BACK, 1);
data = new int[4][4];
g = this.getGraphics();
manager = new LayerManager();
vc = new Vector();
try {
image = Image
.createImage("/phone/mediaSound/game/jigsaw/pictures/1.png");
} catch (IOException e) {
e.printStackTrace();
}
tilerd = new TiledLayer(3, 3, image, image.getWidth() / 3, image
.getHeight() / 3);
for (int i = 1; i < 9; i++) {//
vc.addElement(i + "");
}
for (int j = 0; j < 3; j++) {
for (int i = 0; i < 3; i++) {
if (vc.size() > 0) {
int temp = Math.abs((new Random(((new Date()).getTime())))
.nextInt());
temp = temp % vc.size();
int m = Integer.parseInt(vc.elementAt(temp).toString());
tilerd.setCell(i, j, m);
vc.removeElementAt(temp);
data[j][i] = m;
}
}
}
data[2][2] = 0;// 確定右下角的為空白
x = 2;
y = 2;
manager.append(tilerd);
manager.paint(g, 0, 0);
Thread th = new Thread(this);
th.start();
}
public void run() {
while (true) {
try {
int key = this.getKeyStates();
// System.out.println(key);
if ((key & this.DOWN_PRESSED) != 0) {
if (x > 0) {
x = x - 1;
data[x + 1][y] = data[x][y];
data[x][y] = 0;
tilerd.setCell(y, x, data[x][y]);
tilerd.setCell(y, x + 1, data[y][x + 1]);
count++;
}
}
if ((key & this.UP_PRESSED) != 0) {
if (x < 2) {
x = x + 1;
data[x - 1][y] = data[x][y];
data[x][y] = 0;
tilerd.setCell(y, x, 0);
tilerd.setCell(y, x - 1, data[x - 1][y]);
count++;
}
}
if ((key & this.LEFT_PRESSED) != 0) {
if (y < 2) {
data[x][y] = data[x][y + 1];
data[x][y + 1] = 0;
tilerd.setCell(y, x, data[x][y]);
tilerd.setCell(y + 1, x, data[x][y + 1]);
y = y + 1;
count++;
}
}
if ((key & this.RIGHT_PRESSED) != 0) {
if (y > 0) {
data[x][y] = data[x][y - 1];
data[x][y - 1] = 0;
tilerd.setCell(y, x, data[x][y]);
tilerd.setCell(y - 1, x, data[x][y - 1]);
y = y - 1;
count++;
}
}
g.fillRect(0, 0, 240, 240);// 圖像區域內重畫
manager.paint(g, 0, 0);
this.flushGraphics();
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (i != 2 && j != 2) {
if (data[i][j] != i * 3 + j + 1) {
break;
}
}
}
}
if (count == 20) {
String str = Integer.toString(count);
form = new Form("");
form.append("你共走了" + str + "步");
form.addCommand(cmdBack);
form.setCommandListener(this);
display.setCurrent(form);
break;
}
// Timer t1 = new Timer();
// Time time=new Time();
// t1.schedule(time, 0, 1000);
Thread.sleep(200);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void commandAction(Command command, Displayable dis) {
if (command == cmdBack) {
pt.show();
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -