?? maincanvas.java
字號:
import java.util.Random;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
public class MainCanvas extends Canvas implements Runnable,CommandListener{
public Image m_aImg[];
public int m_anCur[][];
public int m_nHidX, m_nHidY;
public int m_nSta;
private Command ExitCommand;
private PuzzleMidlet midlet;
public MainCanvas( PuzzleMidlet mMidlet )
{
midlet = mMidlet;
try
{
ExitCommand = new Command("Exit", Command.EXIT, 0);
addCommand(ExitCommand);
setCommandListener(this);
m_nHidX = 2;
m_nHidY = 2;
m_nSta = 0;
InitCurrent();
m_aImg = new Image[9];
StringBuffer temp = null;
for( int i = 0; i < 9; i ++ )
{
temp=new StringBuffer();
temp.append("/pic");
temp.append(i);
temp.append(".png");
m_aImg[i] = Image.createImage(temp.toString());
}
}
catch (Exception ex)
{//暫不做出錯處理
}
Thread thread = new Thread(this);
thread.start();
}
public void InitCurrent()
{
Random random = new Random();
m_anCur = new int[][] { {0,1,2}, {3,4,5}, {6,7,8} };
int Rx, Ry, k, nTemp;
for( int x = 0; x < 3; x ++ )
{
for( int y = 0; y < 3; y ++ )
{
k = random.nextInt();
Rx = Math.abs(k % 3);
k = random.nextInt();
Ry = Math.abs(k % 3);
if( Rx != x || Ry != y )
{
nTemp = m_anCur[y][x];
m_anCur[y][x] = m_anCur[Ry][Rx];
m_anCur[Ry][Rx] = nTemp;
}
}
}
}
protected void paint(Graphics g)
{
g.setColor(0);
g.fillRect( 0, 0, getWidth(), getHeight() );
int nImg = 0; //暫存圖片的編號
switch( m_nSta )
{
case 0:
for( int x = 0; x < 3; x++ )
{
for( int y = 0; y < 3; y++ )
{
if( x == m_nHidX && y == m_nHidY )
continue;
nImg = m_anCur[y][x];
if( nImg >= 0 && nImg < 9 )
{
if( m_aImg[nImg] != null )
g.drawImage( m_aImg[nImg], x * 30, y * 30, Graphics.LEFT|Graphics.TOP);
}
}
}
// 接著畫線,將9塊格子分割開。
g.setColor(0xffffff);//設置成白色
for(int i = 0; i <= 3; i++)
{
g.drawLine( 0, i*30, 3*30, i*30);
g.drawLine( i*30, 0, i*30, 3*30);
}
break;
case 1:
for( int x = 0; x < 3; x++ )
{
for( int y = 0; y < 3; y++ )
{
nImg = y * 3 + x;
if( m_aImg[nImg] != null )
g.drawImage( m_aImg[nImg], x * 30, y * 30, Graphics.LEFT|Graphics.TOP);
}
}
break;
case 2:
default:
g.drawString( "Very Good!", 10, 45, 0 );
}
}
public boolean CheckMove( int nX, int nY )
{
if( nX < 0 || nX >= 3 || nY < 0 || nY >= 3 )
return false;
if(m_nHidX==nX && m_nHidY==nY)
return false;
if( nX > 0 && nX - 1 == m_nHidX && nY == m_nHidY )
return true;
if( nX < 2 && nX + 1 == m_nHidX && nY == m_nHidY )
return true;
if( nY > 0 && nY - 1 == m_nHidY && nX == m_nHidX )
return true;
if( nY < 2 && nY + 1 == m_nHidY && nX == m_nHidX )
return true;
return false;
}
private void sweep(int x, int y)
{
if( !CheckMove( x, y ) )
return;
int temp = m_anCur[y][x];
m_anCur[y][x] = m_anCur[m_nHidY][m_nHidX];
m_anCur[m_nHidY][m_nHidX] = temp;
m_nHidX = x;
m_nHidY = y;
}
protected void keyPressed(int keyCode)
{
if( m_nSta == 2 )
return;
switch(keyCode)
{
case KEY_NUM1:
sweep( 0, 0 );
break;
case KEY_NUM2:
sweep( 1, 0 );
break;
case KEY_NUM3:
sweep( 2, 0 );
break;
case KEY_NUM4:
sweep( 0, 1 );
break;
case KEY_NUM5:
sweep( 1, 1 );
break;
case KEY_NUM6:
sweep( 2, 1 );
break;
case KEY_NUM7:
sweep( 0, 2 );
break;
case KEY_NUM8:
sweep( 1, 2 );
break;
case KEY_NUM9:
sweep( 2, 2 );
break;
case KEY_NUM0:
if( m_nSta == 0 )
m_nSta = 1;
else
m_nSta = 0;
break;
}
if( isFinish() )
m_nSta = 2;
}
public boolean isFinish()
{
for( int x = 0; x < 3; x++ )
{
for( int y = 0; y < 3; y++ )
{
if( m_anCur[y][x] != y * 3 + x )
return false;
}
}
return true;
}
public void commandAction(Command c, Displayable s)
{
if (c.getCommandType() == Command.EXIT)
{
midlet.notifyDestroyed();
}
}
public void run() {
try{
while(true){
//重繪圖形,getWidth與getHeight可分別得到手機屏幕的寬和高
repaint(0, 0, getWidth(), getHeight());
}
}
catch(Exception e){}
}
public void stop()
{
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -