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

📄 jumpcanvas.java

📁 J2ME核心类及MIDlet类 MIDP用户界面对象 图形处理及低级事件处理 多线程编程 I/O及网络编程 数据库RMS编程 浮点数编程 多媒体及GAME API编程 安全、加密及
💻 JAVA
字号:
import javax.microedition.lcdui.*;import javax.microedition.lcdui.game.*;public class JumpCanvas extends javax.microedition.lcdui.game.GameCanvas {		static int GROUND_HEIGHT = 32; // 离地的高度	static int CORNER_X;  //屏幕位置及宽度及高度	static int CORNER_Y;	static int DISP_WIDTH;	static int DISP_HEIGHT;	static Font FONT; //字体	static int FONT_HEIGHT; // 字体高度	static int SCORE_WIDTH; // 分数所占宽度	static int TIME_WIDTH; // 显示时间所占宽度	Display myDisplay; // 显示设备	Jump myJump; // 所处的MIDlet	JumpManager myManager; // 图层管理对象	static boolean myGameOver; // 是否结束	int myScore = 0; // 得分	int myInitialGameTicks = 950; // 开始等待的时间	int myOldGameTicks = myInitialGameTicks; // 上一次的时间	int myGameTicks = myOldGameTicks; // 游戏所用的时间	boolean myInitialized; // 是否初始化,以决定是否画第一次	static String myInitialString = "1:00"; // 初始时间串	String myTimeString = myInitialString;  // 时间串	/**	 * 结束游戏	 */	static void setGameOver() {		myGameOver = true;		GameThread.requestStop();	}	/**	 * 是否结束	 */	static boolean getGameOver() {		return(myGameOver);	}	/**	 * 构造方法	 */	public JumpCanvas(Jump midlet) {		super(false);		myDisplay = Display.getDisplay(midlet);		myJump = midlet;	}	/**	 * 开始游戏	 */	void start() {		myGameOver = false;		myDisplay.setCurrent(this);		repaint();	}	/**	 * 重新开始,将所有的状态重置	 */	void reset() {		myManager.reset();		myScore = 0;		myGameOver = false;		myGameTicks = myInitialGameTicks;		myOldGameTicks = myInitialGameTicks;		repaint();	}	/**	 * 清除以前的按键,这里调用了getKeyStates()	 */	void flushKeys() {		getKeyStates();	}	/**	 * 绘制	 */	public void paint(Graphics g) {		// 最开始之前要对相应的大小进行计算		if(!myInitialized) {			CORNER_X = g.getClipX();			CORNER_Y = g.getClipY();			DISP_WIDTH = g.getClipWidth();			DISP_HEIGHT = g.getClipHeight();			FONT = g.getFont();			FONT_HEIGHT = FONT.getHeight();			SCORE_WIDTH = FONT.stringWidth("Score: 000");			TIME_WIDTH = FONT.stringWidth("Time: " + myInitialString);			myInitialized = true;		}		// 清屏		g.setColor(0xffffff);		g.fillRect(CORNER_X, CORNER_Y, DISP_WIDTH, DISP_HEIGHT);		g.setColor(0x0000ff00);		g.fillRect(CORNER_X, CORNER_Y + DISP_HEIGHT - GROUND_HEIGHT, 				 DISP_WIDTH, DISP_HEIGHT);		// 创建图层管理器,即JumpManager对象		try {			if(myManager == null) {				myManager = new JumpManager(					CORNER_X, CORNER_Y + FONT_HEIGHT*2, 					DISP_WIDTH, DISP_HEIGHT - FONT_HEIGHT*2 - GROUND_HEIGHT);			} 						// 将图层管理器中的所有图层进行绘制			myManager.paint(g);		} catch(Exception e) {			errorMsg(g, e);		}				// 绘制时间和分数		g.setColor(0);		g.setFont(FONT);		g.drawString("Score: " + myScore, 		 (DISP_WIDTH - SCORE_WIDTH)/2, 		 DISP_HEIGHT + 5 - GROUND_HEIGHT, g.TOP|g.LEFT);		g.drawString("Time: " + formatTime(), 			 (DISP_WIDTH - TIME_WIDTH)/2, 			 CORNER_Y + FONT_HEIGHT, g.TOP|g.LEFT);		// 如果游戏结束了,写上一些信息		if(myGameOver) {			myJump.setNewCommand();			// 清除上面一块区域			g.setColor(0xffffff);			g.fillRect(CORNER_X, CORNER_Y, DISP_WIDTH, FONT_HEIGHT*2 + 1);			int goWidth = FONT.stringWidth("Game Over");			g.setColor(0);			g.setFont(FONT);			g.drawString("Game Over", (DISP_WIDTH - goWidth)/2, 						 CORNER_Y + FONT_HEIGHT, g.TOP|g.LEFT);		}	}	/**	 * 对时间信息表达为"分和秒的字符串	 */	public String formatTime() {		if((myGameTicks / 16) + 1 != myOldGameTicks) {			myTimeString = "";			myOldGameTicks = (myGameTicks / 16) + 1;			int smallPart = myOldGameTicks % 60;			int bigPart = myOldGameTicks / 60;			myTimeString += bigPart + ":";			if(smallPart / 10 < 1) {				myTimeString += "0";			}			myTimeString += smallPart;		}		return(myTimeString);	}	/**	 * 调用图层管理器的步进(advance)并刷新屏幕	 */	void advance() {		myGameTicks--;		myScore += myManager.advance(myGameTicks);		if(myGameTicks == 0) {			setGameOver();		}		// 调用paint()进行绘制,并刷新到屏幕上		try {			paint(getGraphics());			flushGraphics();		} catch(Exception e) {			errorMsg(e);		}		// 等待一个短暂的时间,以便其他线程能更新有关按键的消息 		// to update the information about which keys are pressed:		synchronized(this) {			try {				wait(1);			} catch(Exception e) {}		}	}	/**	 * 处理键盘事件	 */	public void checkKeys() { 		if(! myGameOver) {			int keyState = getKeyStates();			if((keyState & LEFT_PRESSED) != 0) {				myManager.setLeft(true);			} 			if((keyState & RIGHT_PRESSED) != 0) {				myManager.setLeft(false);			}			if((keyState & UP_PRESSED) != 0) {				myManager.jump();			} 		}	}	/**	 * 显示错误消息	 */	void errorMsg(Exception e) {		errorMsg(getGraphics(), e);		flushGraphics();	}	/**	 * 错误消息的信息	 */	void errorMsg(Graphics g, Exception e) {		if(e.getMessage() == null) {			errorMsg(g, e.getClass().getName());		} else {			errorMsg(g, e.getClass().getName() + ":" + e.getMessage());		}	}	/**	 * 显示错误消息	 */	void errorMsg(Graphics g, String msg) {		// 先清屏		g.setColor(0xffffff);		g.fillRect(CORNER_X, CORNER_Y, DISP_WIDTH, DISP_HEIGHT);		int msgWidth = FONT.stringWidth(msg);		// 用红色进行显示		g.setColor(0x00ff0000);		g.setFont(FONT);		g.drawString(msg, (DISP_WIDTH - msgWidth)/2, 		 (DISP_HEIGHT - FONT_HEIGHT)/2, g.TOP|g.LEFT);		myGameOver = true;	}}

⌨️ 快捷键说明

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