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

📄 maincanvas.java

📁 手机上的跳舞机程序
💻 JAVA
字号:
package demo;
import java.io.IOException;
import java.io.InputStream;

import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.Sprite;
import javax.microedition.media.Manager;
import javax.microedition.media.MediaException;
import javax.microedition.media.Player;


public class MainCanvas extends GameCanvas implements Runnable{
	private boolean	m_bRunning;	        //控制线程运行
	public Sprite m_spDancer;                 //管理MM精灵
	public ArrowSprite m_aArr_S[];            //管理静态箭头
	public ArrowSprite m_aArr_M[];            //管理动态箭头
	public int m_aSteps[] = {                 //存储舞步
			1, 0, 2, 3, 1, 0, 1, 3, 0, 1, 2, 3, 
			3, 1, 1, 2, 1, 2, 1, 0, 1, 2, 1, 1,
			0, 0, 1, 3, 0, 0, 2, 2, 1, 1, 2, 2,
			1, 0, 2, 1, 3, 3, 0, 3, 0, 0, 2, 0 };
	public int m_nStep = 0;       //下一个舞步在m_aSteps中的索引
	Player m_Player;              //用于播放背景音乐
	public MainCanvas(){
		super(false);
		try{	
			//读取MM精灵图片,设置MM精灵的参考点及位置
			Image image = Image.createImage("/demo/Dancer.png");
			m_spDancer = new Sprite( image, 61, 80 );
			m_spDancer.defineReferencePixel( 30, 40 );
			m_spDancer.setRefPixelPosition(getWidth() - 50, getHeight()/2);
			
			//读取箭头图片,创建两种箭头数组
			Image image2 = Image.createImage("/demo/Arrow.png");
			m_aArr_S = new ArrowSprite[4];
			for( int n = 0; n < m_aArr_S.length; n ++ ){
				m_aArr_S[n] = new ArrowSprite( image2, 15, 15 );
				m_aArr_S[n].StartStatic( 15 + n * 20, 30, n );
			}			
			m_aArr_M = new ArrowSprite[6];    //最多同时显示6个动态箭头
			for( int n = 0; n < m_aArr_M.length; n ++ ){
				m_aArr_M[n] = new ArrowSprite( image2, 15, 15 );
			}
		}
		catch (IOException e){}
		try{			//读取音效文件,并循环播放音效
			InputStream is = this.getClass().getResourceAsStream("/demo/music.wav");			
			m_Player = Manager.createPlayer(is,"audio/x-wav");
			m_Player.setLoopCount(-1);
			m_Player.start();
		}	
		catch (IOException e){}
		catch (MediaException e){}
		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(){
		int keyStates = getKeyStates();	 //得到当前按键状态

		m_spDancer.setFrame( 0 );
		//如果按下方向键的上键,MM向上跳舞
		if( ( keyStates & GameCanvas.UP_PRESSED ) != 0 )
			m_spDancer.setFrame( 1 );

		//如果按下方向键的下键,MM向下跳舞
		if( ( keyStates & GameCanvas.DOWN_PRESSED ) != 0 )
			m_spDancer.setFrame( 2 );
		
		//如果按下方向键的左键,MM向左跳舞
		if( ( keyStates & GameCanvas.LEFT_PRESSED ) != 0 )
			m_spDancer.setFrame( 3 );

		//如果按下方向键的右键,MM向右跳舞
		if( ( keyStates & GameCanvas.RIGHT_PRESSED ) != 0 )
			m_spDancer.setFrame( 4 );
	}
	public long m_LogicT1 = System.currentTimeMillis();
	public void Logic(){
		for( int n = 0; n < m_aArr_M.length; n ++ )
			m_aArr_M[n].Logic();
		
		long mT2 = System.currentTimeMillis();
		if( mT2 - m_LogicT1 > 1500 ){
			m_LogicT1 = mT2;
			for( int n = 0; n < m_aArr_M.length; n ++ ){
				if( m_aArr_M[n].isVisible() == false ){
					m_aArr_M[n].StartMove( 15 + m_aSteps[n] * 20, 
							110, 30, 1, m_aSteps[n] );
					break;
				}
			}
			m_nStep ++;
			if( m_nStep > m_aSteps.length )
				m_nStep = 0;
		}
	}
	public void Paint(){
		Graphics g = getGraphics();
		//用黑色清屏
		g.setColor(0);
		g.fillRect( 0, 0, getWidth(), getHeight() );
		//显示MM及所有箭头图像
		m_spDancer.paint(g);
		for( int n = 0; n < m_aArr_S.length; n ++ ){
			m_aArr_S[n].paint(g);
		}
		for( int n = 0; n < m_aArr_M.length; n ++ ){
			m_aArr_M[n].paint(g);
		}
		flushGraphics();
	}
}

⌨️ 快捷键说明

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