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

📄 maincanvas.java

📁 J2ME编程的50个例子,适合掌上系统的编程
💻 JAVA
字号:
package demo;
import java.util.Random;

import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.Sprite;


public class MainCanvas extends GameCanvas implements Runnable{
	public static final int GAME_UI		= 0;	//进入用户界面
	public static final int GAME_GAMING	= 1;	//进行游戏
	public static final int GAME_END		= 2;	//游戏结束
	public static final int GAME_STATE_NUM = 3;	//状态总数
	private int m_nState	= GAME_UI;				//存储当前的游戏状态

	private boolean	m_bRunning;					//控制线程运行
	private MyUI 	m_UI;							//界面对象
	private MyBack	m_Back;							//背景对象
	private String m_aQuestion[] = 				//问题数组
		  { "May I __ you?",
			"Thank you very __!",
			"Not __ all!",
			"Of __!" };
	private String m_aResult[][] =					//答案数组,包括正确与不正确
		  { {"can","help","do"},
			{"right","yellow","mach"},
			{"at","on","up"},
			{"cause","right","no"} };
	private int m_nResultIndex[] = { 1, 2, 0, 0 };	//答案中正确的索引
	private int m_nQIndex = 0;						//当前题目的索引
	private Fisher m_Fisher;						//钓鱼者对象
	private FishSprite m_aFish[];					//鱼对象数组
	private Random m_Random;						//随机数对象
	private Sprite m_TextSprite;					//文字对象
	public MainCanvas(){
		super(true);
		m_UI 	= new MyUI();
		m_Back 	= new MyBack();
		m_Random = new Random();
		try{
			//创建掉鱼者
			m_Fisher = new Fisher();
			m_Fisher.setInitPosition(10, getHeight()/2 - 50);
			//创建鱼
			Image img = Image.createImage("/demo/fish.png");
			m_aFish = new FishSprite[3];
			for( int n = 0; n < m_aFish.length; n ++ ){
				m_aFish[n] = new FishSprite( img, 25, 17 );
			}
			//创建文字
			Image imgText = Image.createImage("/demo/text.png");
			m_TextSprite = new Sprite(imgText, 81, 20);
			m_TextSprite.setPosition(getWidth()/2-40, getHeight()/2-10);
		}
		catch (Exception ex){}
		ResetFish();							//根据题目,设置小鱼
		Start();								//启动线程
	}
	private void ResetFish(){					//根据题目,设置小鱼
		//设置小鱼的位置,和携带的答案
		m_nQIndex = Math.abs( m_Random.nextInt() % 
									m_aQuestion.length );
		int y = getHeight() / 2 - 10;
		for( int n = 0; n < m_aFish.length; n ++ ){
			m_aFish[n].StartMove(m_aResult[m_nQIndex][n], getWidth(), y);
			y = y + 30;
		}
	}
	public void Start(){
		m_bRunning = true;
		Thread thread = new Thread(this);		//分配新线程
		thread.start();							//线程启动
	}
	public void run() {						//新线程自动调用此方法
		//获取系统当前时间,并将时间换算成以毫秒为单位的数
		long T1 = System.currentTimeMillis();
		long T2 = T1;
		while(m_bRunning){
			T2 = System.currentTimeMillis();
			if( T2 - T1 > 100 ){			    //间隔100毫秒
				T1 = T2;
				Input();
				Logic();
				Paint();
			}
		}
	}
	public void Stop(){						//终止游戏
		m_bRunning = false;
	}
	public void Input(){
		int keyStates = getKeyStates();
		switch( m_nState ){
		case GAME_UI:
			m_UI.Input( keyStates );
			if( m_UI.getState() == MyUI.UI_HIDE )
				m_nState = GAME_GAMING;
			break;			
		case GAME_GAMING:
			m_Fisher.Input(keyStates, getWidth());
			break;
		case GAME_END:
			if( ( keyStates & GameCanvas.FIRE_PRESSED ) != 0 ){
				m_nState = GAME_GAMING;
				ResetFish();
			}
			break;
		}
	}
	public void Logic(){
		switch( m_nState ){
		case GAME_UI:
			break;			
		case GAME_GAMING:
			for( int n = 0; n < m_aFish.length; n ++ ){
				m_aFish[n].Logic();
				if( m_aFish[n].collidesWith(m_Fisher.getHook(),true) )
				{//如果钓到鱼了
					m_nState = GAME_END;
					if( n == m_nResultIndex[m_nQIndex] )
						m_TextSprite.setFrame(0);
					else
						m_TextSprite.setFrame(1);
					break;
				}
				if( m_aFish[n].getRefPixelX() < - 10 )
				{//如果有鱼跑道屏幕最左侧
					m_nState = GAME_END;
					m_TextSprite.setFrame(1);
					break;
				}
			}
			break;
		}
	}
	public void Paint(){
		Graphics g = getGraphics();
		//用黑色清屏
		g.setColor(0);
		g.fillRect( 0, 0, getWidth(), getHeight() );

		switch( m_nState ){
		case GAME_UI:					//进入界面
			m_UI.Paint(g, getWidth(), getHeight());
			break;			
		case GAME_GAMING:				//进入游戏
			m_Back.Paint(g, getWidth(), getHeight());
			g.drawString(m_aQuestion[m_nQIndex], 10, 10, 0);
			for( int n = 0; n < m_aFish.length; n ++ ){
				m_aFish[n].PaintWithText(g);
			}	
			m_Fisher.Paint(g);
			break;
		case GAME_END:					//本次结束
			m_Back.Paint(g, getWidth(), getHeight());
			m_TextSprite.paint(g);
			break;
		}
		flushGraphics();
	}
}

⌨️ 快捷键说明

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