📄 rescue_canvas.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 + -