?? spellcanvas.java~140~
字號:
/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2006</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.Graphics;
public class SpellCanvas extends Canvas implements Runnable {
private final int PUZZLE_STATE = 0;
private final int IMAGE_STATE = 1;
private final int FINISH_STATE = 2;
private final int PUZZLE_MOVE = 3;
private final int xCell = 30;
private final int yCell = 29;
private int state;
public Graphics g;
public Image[] img = new Image[9];
public int[][] current = new int[3][3];
public int steps;
public int hiddenX;
public int hiddenY;
public int LCD_WIDTH;
public int LCD_HEIGHT;
public int midWidth;
public int midHeight;
public int cur;
Thread t;
public final int K_CLR = -7;
public final int K_MENU = -6;
public final int K_LEFT = -3;
public final int K_RIGHT = -4;
public final int K_UP = -1;
public final int K_DOWN = -2;
public final int K_SELECT = -5;
public SpellCanvas() {
LCD_WIDTH=this.getWidth();
LCD_HEIGHT=this.getHeight();
midWidth=LCD_WIDTH/2;
midHeight=LCD_HEIGHT/2;
this.state = 0;
hiddenX=2;
hiddenY=2;
cur=8;
current = new int[][] {
// {2, 7, 5},
// {1, 0, 6},
// {4, 3, 8}
{0,1,2},
{4,5,7},
{3,6,8}
};
createImg();
t=new Thread(this);
t.start();
}
public void createImg(){
try{
for (int i = 0;i <= 8; i++ ) {
img[i]=Image.createImage("/pic/"+Integer.toString(i)+".PNG");
}
}catch(Exception e){
e.printStackTrace();
}
}
public void drawPuzzle(Graphics g){
g.setColor(255, 255, 255);
g.fillRect(0, 0, LCD_WIDTH, LCD_HEIGHT);
g.setColor(0,0,255);
g.fillRect((LCD_WIDTH - 90) / 2 -2,(LCD_HEIGHT - 87) / 2 -2,90+6,87+6);
for (int i = 0; i <= 2; i++) {
for (int j = 0; j <= 2; j++) {
if(!(i==hiddenX&&j==hiddenY)){
g.drawImage(img[current[i][j]],
(LCD_WIDTH - 90) / 2 + 31 * j,
(LCD_HEIGHT - 87) / 2 + 30 * i,
Graphics.TOP | Graphics.LEFT);
}else{
g.setColor(0,0,0);
g.fillRect((LCD_WIDTH - 90) / 2 + 31 * hiddenY,
(LCD_HEIGHT - 87) / 2 + 30 * hiddenX,30,29);
}
}
}
g.setColor(0,0,0);
g.drawString("steps :"+steps,midWidth,2,Graphics.TOP|Graphics.HCENTER);
g.drawString("按星號鍵查看完整圖片",midWidth,140,Graphics.TOP|Graphics.HCENTER);
}
public void drawWhole(Graphics g){
g.setColor(255, 255, 255);
g.fillRect(0, 0, LCD_WIDTH, LCD_HEIGHT);
g.setColor(0,0,255);
g.fillRect((LCD_WIDTH - 90) / 2 -2,(LCD_HEIGHT - 87) / 2 -2,90+6,87+6);
for (int i = 0; i <= 2; i++) {
for (int j = 0; j <= 2; j++) {
g.drawImage(img[3 * i + j], (LCD_WIDTH - 90) / 2 + 31 * j,
(LCD_HEIGHT - 87) / 2 + 30 * i,
Graphics.TOP | Graphics.LEFT);
}
}
g.drawString("按星號鍵返回",midWidth,140,Graphics.TOP|Graphics.HCENTER);
}
public void drawFinish(Graphics g){
// g.setColor(0,0,0);
// g.fillRect(0,0,LCD_WIDTH,LCD_HEIGHT);
g.setColor(191,191,191);
g.fillRect(midWidth-60,midHeight-10,120,20);
g.setColor(255,255,255);
g.drawString("Congratulations!",midWidth,midHeight-7,Graphics.TOP|Graphics.HCENTER);
}
public void drawSelect(int cur){
g.setColor(255,0,0);
g.drawRect((LCD_WIDTH-90)/2-1+(cur%3)*31,(LCD_HEIGHT-87)/2-1+(cur/3)*30,31,30);
}
public void drawMove(int cur){
if(hiddenX==cur/3&&hiddenY==cur%3){
return;
}
if((cur/3-1==hiddenX&&cur%3==hiddenY)||(cur/3+1==hiddenX&&cur%3==hiddenY)||(cur/3==hiddenX&&cur%3-1==hiddenY)||(cur/3==hiddenX&&cur%3+1==hiddenY)){
current[hiddenX][hiddenY] = current[cur / 3][cur % 3];
hiddenX = cur / 3;
hiddenY = cur % 3;
steps++;
}
}
protected void paint(Graphics g) {
this.g=g;
switch(state){
case PUZZLE_STATE:
drawPuzzle(g);
drawSelect(cur);
break;
case PUZZLE_MOVE:
drawPuzzle(g);
drawSelect(cur);
break;
case IMAGE_STATE:
drawWhole(g);
break;
case FINISH_STATE:
drawWhole(g);
drawFinish(g);
break;
}
}
public void keyPressed(int key){
switch (state) {
case PUZZLE_STATE:
switch (key) {
case Canvas.KEY_STAR:
state = 1;
break;
case K_DOWN:
case Canvas.KEY_NUM8:
if(!(cur+3>8)){
cur += 3;
}
break;
case K_UP:
case Canvas.KEY_NUM2:
if(!(cur-3<0)){
cur -= 3;
}
break;
case K_LEFT:
case Canvas.KEY_NUM4:
if(cur-1<0){
cur =1;
}
cur-=1;
break;
case K_RIGHT:
case Canvas.KEY_NUM6:
if(cur+1>8){
cur=7;
}
cur+=1;
break;
case K_SELECT:
if (current[0][0] == 0 && current[0][1] == 1 &&
current[0][2] == 2 && current[1][0] == 3 &&
current[1][1] == 4 && current[1][2] == 5 &&
current[2][0] == 6 && current[2][1] == 7 ) {
state = FINISH_STATE;
break;
}else{
state = PUZZLE_MOVE;
break;
}
}
break;
case IMAGE_STATE:
switch(key){
case Canvas.KEY_STAR:
case K_SELECT:
state = 0;
break;
}
break;
case PUZZLE_MOVE:
switch (key) {
case Canvas.KEY_STAR:
state = 1;
break;
case K_UP:
case Canvas.KEY_NUM2:
drawMove(cur);
state=0;
break;
case K_DOWN:
case Canvas.KEY_NUM8:
drawMove(cur);
state=0;
break;
case K_LEFT:
case Canvas.KEY_NUM4:
drawMove(cur);
state=0;
break;
case K_RIGHT:
case Canvas.KEY_NUM6:
drawMove(cur);
state=0;
break;
}
break;
}
}
public void run(){
while(true){
repaint();
serviceRepaints();
try{
Thread.sleep(100);
}catch(Exception e){
e.printStackTrace();
}
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -