⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 board.java

📁 J2ME核心类及MIDlet类 MIDP用户界面对象 图形处理及低级事件处理 多线程编程 I/O及网络编程 数据库RMS编程 浮点数编程 多媒体及GAME API编程 安全、加密及
💻 JAVA
字号:
import java.util.Random;import javax.microedition.lcdui.*;import javax.microedition.midlet.MIDlet;import javax.microedition.lcdui.game.*;public class Board extends GameCanvas 	implements CommandListener, Runnable {	static final int ROWS = 4;	static final int COLS = 4;	Piece[] pieces;	Piece blank;	int cellw = 24, cellh = 24, cellx = 30, celly = 20;	int cellxoff = 7, cellyoff = 4;	Font font = Font.getFont(Font.FACE_SYSTEM,		Font.STYLE_PLAIN, Font.SIZE_MEDIUM);	Random rand = new Random();	Thread thread;	Command exitCmd, resetCmd;	MIDlet midlet;	class Piece {		String caption;		int row;		int col;		public Piece(String caption, int row, int col) {			this.caption = caption;			this.row = row;			this.col = col;		}		void paint(Graphics g) {			int px = col * cellw + cellx;			int py = row * cellh + celly;			if (caption != null) {				g.setColor(0);				g.setFont(font);				g.drawRect(px, py, cellw-2, cellh-2);				g.drawString(caption,					px+cellxoff, py+cellyoff,					Graphics.TOP|Graphics.LEFT);			}		}	}	public Board(MIDlet midlet_) {		super( true );		midlet = midlet_;		pieces = new Piece[ ROWS * COLS ];		for(int i=0; i<ROWS; i++ )			for(int j=0; j<COLS; j++ ) {				String caption = ""+(i*COLS+j+1); 				if( i==ROWS-1 && j==COLS-1 ) caption = null;				// 这里用数字作标题,最后一块的标题为空				pieces[i*COLS + j] = new Piece( caption, i, j );		}		blank = pieces[ROWS * COLS - 1];				exitCmd = new Command("退出", Command.EXIT, 0);		resetCmd = new Command( "开始", Command.SCREEN, 1);		addCommand( exitCmd );		addCommand( resetCmd );		setCommandListener(this);	}	public void commandAction(Command c, Displayable d) {		if( c==exitCmd ) {			midlet.notifyDestroyed();		}else if( c==resetCmd ) {			resetGrid();		}	}	// 重置格子,随机交换一些格子的位置	void resetGrid() {		for( int i=0; i<100; i++ )		{			int a = randRange( ROWS*COLS );			int b = randRange( ROWS*COLS );			swap( a, b );		}	}	// 产生一个随机数	int randRange(int n) {		int r = rand.nextInt() % n;		if (r < 0)			r += n;		return r;	}		// 交换两个方块	void swap( int a, int b )	{		int t;		t=pieces[a].row; 		pieces[a].row=pieces[b].row; 		pieces[b].row = t;		t=pieces[a].col; 		pieces[a].col=pieces[b].col; 		pieces[b].col = t;	}	public void paint( Graphics g )	{		flushGraphics();	}	// 绘制	public void paintAll(Graphics g) {		g.setColor(0xFFFFFF);		g.fillRect(0, 0, getWidth(), getHeight());					g.setColor(0);		g.drawRect(cellx-2, celly-2, 			COLS*cellw + 3, ROWS*cellh + 3);		for (int i = 0; i < ROWS*COLS; i++) {			pieces[i].paint(g);		}	}	public void showNotify() {		thread = new Thread(this);		thread.start();	}	public void hideNotify() {		thread = null;	}	public void run() {		Graphics g = getGraphics(); // 后台grahpics对象		Thread mythread = Thread.currentThread();		while (mythread == thread ) {			// 检查键盘的状态,并进行适当的处理			int keyState = getKeyStates();			if ((keyState & LEFT_PRESSED) != 0) {				moveLeft();				System.out.println( "L" );			}			else if ((keyState & RIGHT_PRESSED) != 0) {				moveRight();				System.out.println( "R" );			}			else if ((keyState & UP_PRESSED) != 0) {				moveUp();				System.out.println( "U" );			}			else if ((keyState & DOWN_PRESSED) != 0) {				moveDown();				System.out.println( "D" );			}			// 绘制相应的图形			paintAll(g);			// 刷新屏幕			flushGraphics();						// 等待键状态的改变			int cnt = 1;			while( getKeyStates() == keyState )			{				try{ Thread.sleep(10);}				catch(Exception e){}				cnt ++;				if( cnt > 100 ) break; // 最久等1秒			}			//synchronized(this) {			//	try {			//		wait(100);			//	} catch(Exception e) {}			//}		}	}		void moveLeft(){		if( blank.col==COLS-1 ) return;		for( int i=0; i<ROWS*COLS; i++ )			if( pieces[i].row == blank.row && 				pieces[i].col == blank.col + 1 ){					swap( i, ROWS*COLS-1 );					break;		}	}	void moveRight(){		if( blank.col==0 ) return;		for( int i=0; i<ROWS*COLS; i++ )			if( pieces[i].row == blank.row && 				pieces[i].col == blank.col - 1 ){					swap( i, ROWS*COLS-1 );					break;		}	}	void moveUp(){		if( blank.row==ROWS-1 ) return;		for( int i=0; i<ROWS*COLS; i++ )			if( pieces[i].col == blank.col && 				pieces[i].row == blank.row + 1 ){					swap( i, ROWS*COLS-1 );					break;		}	}	void moveDown(){		if( blank.row==0 ) return;		for( int i=0; i<ROWS*COLS; i++ )			if( pieces[i].col == blank.col && 				pieces[i].row == blank.row - 1 ){					swap( i, ROWS*COLS-1 );					break;		}	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -