?? gamecanvas.java
字號:
package com.j2medev.chapter7;
import javax.microedition.lcdui.*;
import javax.microedition.media.Manager;
import javax.microedition.media.MediaException;
import javax.microedition.media.control.ToneControl;
public class GameCanvas extends Canvas implements CommandListener, Updatable {
private int IMAGE_WIDTH = 0;
private Image srcImage = null;
private Document document;
private Command exit = new Command("Exit", Command.EXIT, 1);
public void update() {
//重繪屏幕并播放音調
repaint();
try {
Manager.playTone(120,300,100);
} catch (MediaException ex) {
ex.printStackTrace();
}
}
public void commandAction(Command c, Displayable displayable) {
if(c==exit)
PuzzleMIDlet.quitApp();
}
public GameCanvas(Image img){
srcImage = img;
setCommandListener(this);
addCommand(exit);
int w = srcImage.getWidth();
int h = srcImage.getHeight();
IMAGE_WIDTH = ((w-h)>0?h:w)/3;
Image[] sprite = new Image[9];
//分割img得到Image[]數組
for(int i = 0;i<sprite.length;i++){
sprite[i] = Image.createImage(IMAGE_WIDTH,IMAGE_WIDTH);
Graphics g = sprite[i].getGraphics();
g.translate(-(i%3)*IMAGE_WIDTH,-(i/3)*IMAGE_WIDTH);
g.drawImage(srcImage,0,0,Graphics.LEFT|Graphics.TOP);
}
document = new Document(this,sprite,2,2);
}
protected void paint(Graphics g) {
int color = g.getColor();
g.setColor(0xFFFFFF);
g.fillRect(0,0,getWidth(),getHeight());
g.setColor(color);
int state = document.getState();
if(state==Document.PUZZLE_STATE) {
for(int x=0; x<3; x++) {
for(int y=0; y<3; y++) {
Image image = document.getImage(x, y);
int m = x*IMAGE_WIDTH;
int n = y*IMAGE_WIDTH;
if(image!=null) {
g.drawImage(image, y*IMAGE_WIDTH, x*IMAGE_WIDTH, Graphics.LEFT|Graphics.TOP);
} else {
g.setColor(0x000000);
g.fillRect(y*IMAGE_WIDTH, x*IMAGE_WIDTH, IMAGE_WIDTH, IMAGE_WIDTH);
}
}
}
g.setColor(0xffffff);
for(int i=0; i<=3; i++) {
g.drawLine(0, i*IMAGE_WIDTH, 3*IMAGE_WIDTH, i*IMAGE_WIDTH);
g.drawLine(i*IMAGE_WIDTH, 0, i*IMAGE_WIDTH, 3*IMAGE_WIDTH);
}
} else {
for(int x=0; x<3; x++) {
for(int y=0; y<3; y++) {
Image image = document.getImage(x, y);
g.drawImage(image, y*IMAGE_WIDTH, x*IMAGE_WIDTH, Graphics.LEFT|Graphics.TOP);
}
}
}
}
protected void keyReleased(int keyCode) {
if(keyCode==KEY_NUM0) {
document.setState(Document.PUZZLE_STATE);
}
}
protected void keyPressed(int keyCode) {
//更新document的狀態
switch(keyCode) {
case KEY_NUM1:
document.move(0,0);
break;
case KEY_NUM2:
document.move(0,1);
break;
case KEY_NUM3:
document.move(0,2);
break;
case KEY_NUM4:
document.move(1,0);
break;
case KEY_NUM5:
document.move(1,1);
break;
case KEY_NUM6:
document.move(1,2);
break;
case KEY_NUM7:
document.move(2,0);
break;
case KEY_NUM8:
document.move(2,1);
break;
case KEY_NUM9:
document.move(2,2);
break;
// 顯示原始圖片
case KEY_NUM0:
document.setState(Document.IMAGE_STATE);
break;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -