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

📄 maincanvas.java

📁 J2ME手机游戏50例
💻 JAVA
字号:
package demo;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.game.GameCanvas;


public class MainCanvas extends GameCanvas implements Runnable{
	private boolean	m_bRunning;				//控制项目运行
	public char m_achWords[][] = 				//存储原始字符矩阵
		{	{'H',	'R',	'T',	'W',	'T'},
			{'E',	'I',	'H',	'O',	'H'},
			{'L',	'G',	'I',	'R',	'R'},
			{'L',	'H',	'N',	'L',	'E'},
			{'O',	'T',	'G',	'D',	'E'} 	};
	public int m_nCurLine	= 0;				//记录当前行
	public int m_anDis[] 	= { 0,1,2,3,4 };
	//m_anDis记录每行与原始位置向左偏差的位数
	//即第一行向左偏差0位,第二向左偏差1位......
	//游戏开始前,经过默认移动后,字符矩阵为
	//{'H', 'R', 'T', 'W', 'T'},
	//{'I', 'H', 'O', 'H', 'E'},
	//{'I', 'R', 'R', 'L', 'G'},
	//{'L', 'E', 'L', 'H', 'N'},
	//{'E', 'O', 'T', 'G', 'D'}
	public boolean m_bGameOK = false;			//组合成功的标志
	
	public MainCanvas(){
		super(true);
		Start();								//启动线程
	}
	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(){
		if( m_bGameOK )
			return;
		int keyStates = getKeyStates();			//得到当前按键状态
		//如果按下方向键的上键,则调整当前行的位置
		if( ( keyStates & GameCanvas.UP_PRESSED ) != 0 )
			m_nCurLine --; 
		//如果按下方向键的下键,则调整当前行的位置
		if( ( keyStates & GameCanvas.DOWN_PRESSED ) != 0 )
			m_nCurLine ++;
		//调整当前行的值,使它在0到4之间
		if( m_nCurLine < 0 )
			m_nCurLine += 5;
		if( m_nCurLine > 4) 
			m_nCurLine -= 5;
		//如果按下方向键的左键,则当前行的字符左移
		if( ( keyStates & GameCanvas.LEFT_PRESSED ) != 0 )
			m_anDis[m_nCurLine] ++;
		//如果按下方向键的右键,则当前行的字符右移
        if( ( keyStates & GameCanvas.RIGHT_PRESSED ) != 0 )
        	m_anDis[m_nCurLine] --;
        
        if( m_anDis[m_nCurLine] < 0 )
        	m_anDis[m_nCurLine] += 5;
        if( m_anDis[m_nCurLine] > 4 )
        	m_anDis[m_nCurLine] -= 5;
	}
	public void Logic(){
		if( m_bGameOK )
			return;
		m_bGameOK = true;
		for( int n = 0; n < 5; n ++ ){
			if( m_anDis[n] != 0 ){
				m_bGameOK = false;
				break;
			}
		}
	}
	public void Paint(){
		Graphics g = getGraphics();
		//用黑色清屏
		g.setColor(0);
		g.fillRect( 0, 0, getWidth(), getHeight() );
		
		//显示字符
		//realCol为所显示的字符在原始矩阵中的列数
		int realCol = 0;
		//row为行数,col为列数
		for( int row = 0; row < 5; row ++ ){
			if( row == m_nCurLine )		//当前行的字符用黄色显示
				g.setColor(0xffffff00);
			else
				g.setColor(0xffffffff); //非当前行的字符用白色显示
			for( int col = 0; col < 5; col ++ ){
				//利用偏位数得到与当前位置对应的原始矩阵中的位置
				realCol = m_anDis[row] + col; 
				if( realCol > 4 )
					realCol = realCol - 5;
				g.drawChar(m_achWords[row][realCol], 20 + col * 15, row * 15, 0);
			}
		}
		g.setColor(0xffffffff);
		if( m_bGameOK )
			g.drawString("真棒,完全正确", 20, 80, 0);
		else
			g.drawString("左右移动字符,使纵向拼写正确", 10, 80, 0);
		flushGraphics();
	}
}

⌨️ 快捷键说明

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