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

📄 playcanvas.java

📁 小子快跑
💻 JAVA
字号:
import javax.microedition.lcdui.*;
import java.util.*;
import mmae.ui.*;
import mmae.util.*;
import mmae.game.Score;
	
public class PlayCanvas extends XCanvas {

	Image bgImg,skyImg,backgroundImg,robotImg,coolImg,pauseImg,overImg,endImg,textImg;
	Image[] pic = new Image[4];
	int[] picX= new int[4];
	int[] pix = new int[4];
	Animate button,robot,text;
	int buttonTime,buttonY;
	DrawBoard board;
	Random rnd = new Random();
	ImageFont font;
	int lc;
	int times,_times,robotRunTime,speedTime;
	boolean coolShow,helpShow;
	int coolShowTime;

	public PlayCanvas()
	{

		/***********************************************
		以下为游戏类初使化内容
		***********************************************/
		bgImg = go.getImage("/BG.png");
		skyImg = go.getImage("/Sky.png");
		backgroundImg = go.getImage("/BackGround.png");
		robotImg = go.getImage("/Robot.png");
		pic[0] = go.getImage("/Hill.png");
		pic[1] = go.getImage("/Tree.png");		
		pic[2] = go.getImage("/Man.png");
		pic[3] = go.getImage("/CloudBG.png");
		coolImg = go.getImage("/Cool.png");
		pauseImg = go.getImage("/Pause.png");
		overImg = go.getImage("/GameOver.png");
		endImg = go.getImage("/End.png");		
		textImg = go.getImage("/Text.png");		
		
		button = new Animate(go.getImage("/Button.png"),50,19);
		robot = new Animate(robotImg,85,130);
		robot.setPosition((getWidth()-robot.getWidth())/2,50);
		text = new Animate(textImg,26,13);
	
		font = new ImageFont(go.getImage("/Font.png"),8);
	
		buttonTime = 0;
		buttonY = 0;
		coolShow = false;
		helpShow = false;
		speedTime = 0;
		
		board = new DrawBoard(bgImg);
		board.setRect(0,40,getWidth(),bgImg.getHeight());
		board.setWay(board.RIGHT);
		board.setSpeed(2);
		
		picX[0] = picX[1]= picX[2] = -100;
		
		lc = 0;
		times = 0;		
		_times = 0;
		
		start(80);
	}
	
	public void picMove()
	{
		for(int i=0;i<4;i++)
		{
			if(picX[i]>getWidth()+20)
			{
				pix[i] = Math.abs(rnd.nextInt()%4);
				
				//找到离自己最近的一个
				int min=0;
				for(int j=0;j<3;j++)
				{
					if(i!=j)
						if(min>picX[j])
							min = picX[j];
				}
				
				if(pix[i]==3)
					picX[i] = -60;
				else
					picX[i] = min - 80 - Math.abs(rnd.nextInt()%50);
			}
			else
			{
				if(pix[i]==3)
					picX[i]+=1;
				else
					picX[i]+=3;
			}
		}
	}
	
    public void paint(Graphics g) {
    	g.setClip(0,0,getWidth(),getHeight());
    	
    	if(!isStop())
    	{
    	
			/***********************************************
			以下是游戏进行过程绘图
			***********************************************/    	
		
			for(int i=0;i<3;i++)
				g.drawImage(backgroundImg,0,(i+1)*40+48,g.TOP|g.LEFT);
			
			for(int i=0;i<getWidth()/skyImg.getWidth()+1;i++)
			{
				g.drawImage(skyImg,i*skyImg.getWidth(),0,g.TOP|g.LEFT);
			}
			
			board.draw(g);
			
			for(int i=0;i<4;i++)
			{
				if(pix[i]==3)
					g.drawImage(pic[pix[i]],picX[i],10,g.TOP|g.LEFT);
				else if(pix[i]==2)
					g.drawImage(pic[pix[i]],picX[i],70,g.TOP|g.LEFT);
				else if(pix[i]==1)
					g.drawImage(pic[pix[i]],picX[i],60,g.TOP|g.LEFT);				
				else
					g.drawImage(pic[pix[i]],picX[i],50,g.TOP|g.LEFT);				
			}
			
			int tw=text.getWidth();
			text.setFrame(0);
			text.setPosition(3,3);
			text.draw(g);			
			font.drawString(g,":"+(15-getInterval()/10-1),tw+3,6);
			text.setFrame(1);
			text.setPosition(115,3);
			text.draw(g);						
			font.drawString(g,":"+times,115+tw,6);
			text.setFrame(2);
			text.setPosition(60,190);
			text.draw(g);									
			font.drawString(g, ":"+lc,60+tw+2,193);

			if(lc>=9900)
			{
				g.drawImage(endImg,((lc-9900)-92)*4-5,125,g.TOP|g.LEFT);
			}
			
			robot.draw(g);
			if(coolShow)
			{
				g.drawImage(coolImg,(getWidth()-coolImg.getWidth())/2-20,33+robotImg.getHeight(),g.TOP|g.LEFT);
			}
			

			if(helpShow)
			{
				g.setColor(255,255,255);
				g.fillRect(0,189,getWidth(),15);
				
				int strW = Tool.getStrWidth(go.STR_HIT);
				g.setColor(0);			
				g.drawString(go.STR_HIT,(getWidth()-strW)/2,191,g.TOP|g.LEFT);
			}
			
			button.setFrame(2);
			button.setPosition(2,getHeight()-button.getHeight()-2+buttonY);
			button.draw(g);
			button.setFrame(3);
			button.setPosition(getWidth()-button.getWidth()-2,getHeight()-button.getHeight()-2+buttonY);
			button.draw(g);
		}
		else if(!isKill())				
		{

			/***********************************************
			以下游戏暂停过程绘图
			***********************************************/  	
			button.setFrame(4);
			button.setPosition(2,getHeight()-button.getHeight()-2+buttonY);
			button.draw(g);		
			button.setFrame(3);
			button.setPosition(getWidth()-button.getWidth()-2,getHeight()-button.getHeight()-2+buttonY);
			button.draw(g);
			
			g.drawImage(pauseImg,getWidth()/2,getHeight()/2,g.HCENTER|g.VCENTER);
		}
		else
		{

			/***********************************************
			以下游戏结束过程绘图
			***********************************************/    	
			g.drawImage(overImg,getWidth()/2,getHeight()/2,g.HCENTER|g.VCENTER);					
			button.setFrame(3);
			button.setPosition(getWidth()-button.getWidth()-2,getHeight()-button.getHeight()-2+buttonY);
			button.draw(g);			
    	}    	
	}

	public void update() {

		/***********************************************
		以下是游戏线程处理
		***********************************************/    
		buttonTime++;
		if(buttonTime>=30)
		{
			if(buttonY<23)
				buttonY +=2;
		}

		if(speedTime++>100)
			setInterval(getInterval()+1);
				
		_times += getInterval();
		if(_times>=1000)
		{
			times ++;
			_times = 0;
		}

		if(times>3 && times<6)
			helpShow = true;
		else
			helpShow = false;
		
		lc++;
		
		if((15-getInterval()/10)==0 || lc>10000) gameover();
		
		board.move();
		picMove();
		
		robotRunTime++;
		if(robotRunTime>=2)
		{
			robotRunTime = 0;
			robot.prevFrame();
		}
		
		if(coolShow && coolShowTime++>2)
		{
			coolShowTime = 0;
			coolShow = false;
		}
		
		repaint();	
		serviceRepaints();
	}
	
	public void gameover()
	{
		kill();
		
		int value = lc - times*10;
		
		Score highscore = new Score(go.STR_DBNAME,5,1000);
	
		if(highscore.isHighScore(value))
		{
			go.setScore(value);
			go.changeCanvas(go.CVS_INPUT, true);
		}
		else
		{
			go.changeCanvas(go.CVS_MAIN, false);
		}
		
		repaint();	
	}
	
	public void keyPressed(int keyCode)
	{
		switch(keyCode)
		{
			case SOFTKEY1:
				repaint();
				if(isStop())
				{
					resume();
				}
				else 
				{
					stop();
				}
				buttonTime = 0;
				buttonY = 0;
				repaint();
				break;
			case SOFTKEY2:
				kill();
				go.changeCanvas(go.CVS_MAIN, false);
				break;
		}
				
		if(!isStop())
		{
			switch(keyCode)
			{
				case 49:
					leftRun();
					break;
				case 48:
				case 52:
					rightRun();
					break;				
			}
					
			switch(getGameAction(keyCode))
			{

				/***********************************************
				以下是游戏进行过程按键处理
				***********************************************/    	
				case RIGHT:
					rightRun();
					break;
				case LEFT:
					leftRun();
					break;
			}
		}
	} 
	
	private void rightRun()
	{
		if(robot.getFrame()==3 && coolShow==false)
		{
			coolShow = true;
			if(getInterval()>10)setInterval(getInterval()-10);
			System.out.println("RIGHT-OK");
		}	
	}
	
	private void leftRun()	
	{
		if(robot.getFrame()==7 && coolShow==false)
		{
			coolShow = true;
			if(getInterval()>10)setInterval(getInterval()-10);
			System.out.println("LEFT-OK");						
		}					
	}
	
	public void keyReleased(int keyCode)
	{		
		if(!isStop())
			switch(getGameAction(keyCode))
			{			

				/***********************************************
				以下是游戏进行过程按键处理
				***********************************************/    	
			
			}
		else
			switch(getGameAction(keyCode))
			{

				/***********************************************
				以下是游戏结束或暂停过程按键处理
				***********************************************/    	
			
			}
	}
}

⌨️ 快捷键说明

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