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

📄 rescue_canvas.java

📁 一个救人的手机小游戏,在游戏中详细的规则说明.
💻 JAVA
字号:
import java.io.*;
import java.util.Random;
import java.io.IOException;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;

public class Rescue_Canvas extends GameCanvas implements Runnable,CommandListener{
	private boolean running;
	private boolean rescued;
	private Image img_grass,img_fence;
	private Image img_boy,img_girl;
	private Image img_ball,img_target;

	private Sprite sp_boy,sp_girl,sp_target;
	private Sprite[] sp_ball=new Sprite[4];
	private int fs[]={0,1};
	private int fo[]={2,2};
	private int fss[]={0,1,2};
	private TiledLayer tlg,tlf;
	private int win_width=getWidth();
	private int win_height=getHeight();
	
	private int img_grass_size=16;
	private int img_fence_size=16;
	private int img_boy_size=13;
	private int img_girl_size=16;
	private int img_target_size=12;
	private int img_ball_size=16;
	private int img_kong_size=16;
	private Command helpCommand;
	private Command exitCommand;
	private Graphics g=getGraphics();
	private Rescue_MIDlet rm;
	public Rescue_Canvas(Rescue_MIDlet rm){
		super(true);
		this.rm=rm;
		exitCommand=new Command("退出",Command.EXIT,0);
		helpCommand=new Command("帮助",Command.ITEM,1);
		addCommand(helpCommand);
		addCommand(exitCommand);
		setCommandListener(this);
		try{
			img_boy=Image.createImage("/boy.png");
			img_girl=Image.createImage("/girl.png");
			img_target=Image.createImage("/App.png");
			
			img_grass=Image.createImage("/grass.png");
			img_fence=Image.createImage("/fence.png");
			img_ball=Image.createImage("/ball.png");
		}catch(IOException ioe){
			System.out.println(ioe.getMessage());
		}
		int backcols=win_width/img_grass_size+1;
		int backrows=win_height/img_grass_size+1;
		//铺草地
		tlg=new TiledLayer(backcols,backrows,img_grass,img_grass_size,img_grass_size);
		Random r=new Random();
		for(int i=0;i<backcols*backrows;i++){
			int n=(r.nextInt()>>>1)%5+1;
			tlg.setCell(i%backcols,i/backcols,n);
		}
		//铺栅栏
		tlf=new TiledLayer(backcols,backrows,img_fence,img_fence_size,img_fence_size);
		//铺上边栅栏
		for(int i=0;i<backcols;i++){
			tlf.setCell(i,0,1);
		}
		//铺下边栅栏
		for(int i=0;i<backcols;i++){
			tlf.setCell(i,backrows-2,1);
			tlf.setCell(i,backrows-1,1);
		}
		//铺左边栅栏
		for(int i=0;i<backrows;i++){
			tlf.setCell(0,i,1);
		}
		//铺右边栅栏
		for(int i=0;i<backrows;i++){
			tlf.setCell(backcols-2,i,1);
			tlf.setCell(backcols-1,i,1);
		}
		//铺中间各列的栅栏
		for(int i=2;i<backcols-2;i=i+2){
				int n=((r.nextInt()>>>1)%5)+1;	
				for(int j=1;j<n;j++){
					tlf.setCell(i,j,1);
		     	}
		     	for(int j=n+1;j<backrows;j++){
		     		tlf.setCell(i,j,1);
		     	}
		}
		//初始化boy
		sp_boy=new Sprite(img_boy,img_boy_size,img_boy_size);
		sp_boy.setFrameSequence(fs);
		sp_boy.setFrame(0);
		sp_boy.setPosition(16,16);
		//初始化ball
		int n=(r.nextInt()>>>1)%3+3;
		sp_ball[0]=new Sprite(img_ball,img_ball_size,img_ball_size);
		sp_ball[0].setFrameSequence(fs);
		sp_ball[0].setFrame(0);
		createBall(n+1,0);
		sp_ball[1]=new Sprite(img_ball,img_ball_size,img_ball_size);
		sp_ball[1].setFrameSequence(fs);
		sp_ball[1].setFrame(0);
		createBall(n+2,1);
		sp_ball[2]=new Sprite(img_ball,img_ball_size,img_ball_size);
		sp_ball[2].setFrameSequence(fs);
		sp_ball[2].setFrame(0);
		createBall(n+3,2);
		sp_ball[3]=new Sprite(img_ball,img_ball_size,img_ball_size);
		sp_ball[3].setFrameSequence(fs);
		sp_ball[3].setFrame(0);
		createBall(n+4,3);
		//初始化girl
		sp_girl=new Sprite(img_girl,img_girl_size,img_girl_size);
		sp_girl.setFrameSequence(fs);
		sp_girl.setPosition(win_width-32,n*16);
		//初始化target
		sp_target=new Sprite(img_target,img_target_size,img_target_size);
		sp_target.setFrame(0);
		sp_target.setPosition(16,(backrows-3)*16);
		//启动线程
		start();
	}
	public void start(){
		running=true;
		Thread t=new Thread(this);
		t.start();
	}
	public void run(){
		long st=0,et=0,diff=0;
		int rate=200;
		while(running){
			st=System.currentTimeMillis();
			render(g);
			GameKeyInput();
			et=System.currentTimeMillis();
			diff=et-st;
			if(diff<rate){
				try{
					Thread.sleep(rate-diff);
				}catch(InterruptedException e){
					stop();
				}
			}
		}
	}
	private void render(Graphics g){
		g.setColor(0xffffff);
		g.fillRect(0,0,win_width,win_height);
		tlg.paint(g);
		tlf.paint(g);
	
		sp_boy.nextFrame();
		sp_girl.nextFrame();
		for(int i=0;i<4;i++){
		   sp_ball[i].nextFrame();
	    	if(sp_ball[i].getY()<win_width-36){
		    	if(!(sp_ball[i].collidesWith(sp_boy,false))){
				   sp_ball[i].move(0,2);
			    }else{
				    running=false;
			    	rm.over();
		    	}
			   
		       }else{
			      sp_ball[i].setPosition(sp_ball[i].getX(),16);
		     }
		     sp_ball[i].paint(g);
		}
		
		sp_boy.paint(g);
		sp_girl.paint(g);
		sp_target.paint(g);
		flushGraphics();
	}
	private void GameKeyInput(){
		int KeyState=getKeyStates();
		if((KeyState & LEFT_PRESSED)!=0){
			if(sp_boy.getX()>3){
				sp_boy.move(-3,0);
			}
			for(int i=0;i<4;i++){
			   collides_ball(i);
			}
			collides_fence(3,0);
			IsRescued();
			ArriveTarget(rescued);
		}
		if((KeyState & RIGHT_PRESSED)!=0){
	        if(sp_boy.getX()<win_width-3){
	        	sp_boy.move(3,0);
	        }
	        for(int i=0;i<4;i++){
			   collides_ball(i);
			}
			collides_fence(-3,0);
	        IsRescued();
	        ArriveTarget(rescued);
		}
		if((KeyState & UP_PRESSED)!=0){
			if(sp_boy.getY()>3){
				sp_boy.move(0,-3);
			}
			for(int i=0;i<4;i++){
			   collides_ball(i);
			}
			collides_fence(0,3);
			IsRescued();
			ArriveTarget(rescued);
		}
		if((KeyState & DOWN_PRESSED)!=0){
			if(sp_boy.getY()<win_height-3)
			sp_boy.move(0,3);
			for(int i=0;i<4;i++){
			   collides_ball(i);
			}
			collides_fence(0,-3);
			IsRescued();
			ArriveTarget(rescued);
		}
	}
	public void stop(){
		running=false;
	}
	private void IsRescued(){
		if(!rescued){
			if(sp_boy.collidesWith(sp_girl,true)){
			   sp_girl.setFrameSequence(fo);
			   sp_girl.setPosition(16,16);
			   sp_boy.setFrameSequence(fss);
			   rescued=true;
	     	}else{
			   rescued=false;
		    }
      	}
	}
	private void ArriveTarget(boolean isRescued){
		if(isRescued){
			if(sp_boy.collidesWith(sp_target,true)){
			  rm.successful();
			  stop();
			}
		}
	}
	private void collides_fence(int m,int n){
		if(sp_boy.collidesWith(tlf,true)){
			  sp_boy.setPosition(sp_boy.getX()+m,sp_boy.getY()+n);
	     }
	}
	private void collides_ball(int i){
		if(sp_boy.collidesWith(sp_ball[i],false)){
			running=false;
			rm.over();
		}
	}
	private void createBall(int n,int nom){
		if(n%2!=0){
			sp_ball[nom].setPosition(n*16,16*(n-1));
		}
		else{
			sp_ball[nom].setPosition(48,16);
		}
	}
	public void commandAction(Command c,Displayable d){
		if(c.getCommandType()==Command.EXIT){
			running=false;
			rm.quitApp();
		}
		if(c==helpCommand){
			rm.help();
		}
	}
}

⌨️ 快捷键说明

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