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

📄 forthstage.java

📁 类似于推箱子的手机游戏源码
💻 JAVA
字号:
import javax.microedition.lcdui.game.Sprite;
import javax.microedition.lcdui.game.TiledLayer;
/*
 * ThirdStage.java
 *
 * Created on 2007年12月2日, 下午4:02
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

/**
 *
 * @author liang
 */
public class ForthStage extends Stage{
    private AchieveCanvas canvas;
    private boolean[] flag;
    private int numOfBombs;
    private int[] time;
    private int[][] coordinate;
    private int[][] translation;
    private int leftbombs;
    
    /** Creates a new instance of ThirdStage */
    public ForthStage(AchieveCanvas canvas) {
        numOfBombs = 10;
        leftbombs = numOfBombs;
        flag = new boolean[numOfBombs];
        time = new int[numOfBombs];
        this.canvas = canvas;
        this.ScreenHigt = canvas.getHeight();
        this.ScreenWid = canvas.getWidth();
        box = new Sprite(ImageTools.createImage("/box.png"));
        exit = new Sprite(ImageTools.createImage("/exit.png"));
        exit.setPosition(-30, -30);
        backgroundLayer = new TiledLayer(5, 5, ImageTools.createImage("/brick.png"), 15, 15);
        for(int i=0; i<numOfBombs;i++){
            flag[i] = false;
            time[i] = 9;
        }
        coordinate = new int[10][2];
        
    }

    public void init() {
        int[][] map = {
                            { 0, 2, 2, 2, 0 },
                            { 2, 0, 0, 0, 2 },
                            { 0, 0, 0, 0, 0 },
                            { 2, 0, 0, 0, 2 },
                            { 0, 2, 2, 2, 0 }
                      };
        for(int i = 0; i < 5; i++){
            for(int j=0;j<5;j++)
              backgroundLayer.setCell(j, i, map[i][j]);
        }
        
        backgroundLayer.setPosition( (ScreenWid - backgroundLayer.getWidth() )/2, (ScreenHigt - backgroundLayer.getHeight())/2 );
        int groundX = backgroundLayer.getX();
        int groundY = backgroundLayer.getY();
        
        int initX = groundX + 30;
        int initY = groundY + 30;
        box.setPosition(initX, initY); 
       
        int[][] co = {
            {groundX + 15, groundY},
            {groundX + 30, groundY},
            {groundX + 45, groundY},
            {groundX, groundY + 15},
            {groundX + 60, groundY + 15},
            {groundX, groundY + 45},
            {groundX + 60, groundY + 45},
            {groundX + 15, groundY + 60},
            {groundX + 30, groundY + 60},
            {groundX + 45, groundY + 60}
        };
        coordinate = co;
        translation = new int[5][5];
        translation[0][1] = 0;
        translation[0][2] = 1;
        translation[0][3] = 2;
        translation[1][0] = 3;
        translation[1][4] = 4;
        translation[3][0] = 5;
        translation[3][4] = 6;
        translation[4][1] = 7;
        translation[4][2] = 8;
        translation[4][3] = 9;
    }

    public void checkCollision(int keypressed) {
        int col,row;
        switch(keypressed){
            case UPMOVE:
               do{  
                   if(box.collidesWith(exit, true)){
                         canvas.doStagepassing();
                         break;
                    }                 
                    canvas.repaint();                        
                    canvas.threadSleep();
                    
                    box.move(0, -MOVE);
                } while(!box.collidesWith(backgroundLayer,true) && !canvas.CheckOutOfEdge());
                box.move(0, MOVE);
                col = (box.getX() - backgroundLayer.getX())/15;
                row = (box.getY() - backgroundLayer.getY() - 15)/15;
                if(col >= 0 && row >= 0 && col < 5 && row < 5){
                    if(backgroundLayer.getCell(col, row) == 2){
                        flag[translation[row][col]] = true;
                        backgroundLayer.setCell(col,row,3);
                    }
                    else if(backgroundLayer.getCell(col, row) == 3){
                        backgroundLayer.setCell(col,row,0);
                        canvas.player(canvas.getexplosionPlayer());
                        setLeftOfBombs();
                        if(getLeftOfBombs() == 0){
                            canvas.doStagepassing();
                            break;
                        }
                        flag[translation[row][col]] = false;
                    }
                }
                break;
            case DOWNMOVE:
                do{ 
                    if(box.collidesWith(exit, true)){
                         canvas.doStagepassing();
                         break;
                    }                 
                    canvas.repaint();                        
                    canvas.threadSleep();
                    
                    box.move(0, MOVE);     
                }while(!box.collidesWith(backgroundLayer,true) && !canvas.CheckOutOfEdge());
                box.move(0, -MOVE);
                col = (box.getX() - backgroundLayer.getX())/15;
                row = (box.getY() - backgroundLayer.getY() + 15)/15;
                if(col >= 0 && row >= 0 && col < 5 && row < 5){
                    if(backgroundLayer.getCell(col, row) == 2){
                        flag[translation[row][col]] = true;
                        backgroundLayer.setCell(col,row,3);
                    }
                    else if(backgroundLayer.getCell(col, row) == 3){
                        backgroundLayer.setCell(col,row,0);
                        canvas.player(canvas.getexplosionPlayer());
                        setLeftOfBombs();
                        if(getLeftOfBombs() == 0){
                            canvas.doStagepassing();
                            break;
                        }
                        flag[translation[row][col]] = false;
                    }
                }
                break;
            case LEFTMOVE:
                do{
                    if(box.collidesWith(exit, true)){
                         canvas.doStagepassing();
                         break;
                    }
                    canvas.repaint();                        
                    canvas.threadSleep();
                     
                      box.move(-MOVE, 0);
                }while(!box.collidesWith(backgroundLayer,true) && !canvas.CheckOutOfEdge());
                 box.move( MOVE,0 );
                 col = (box.getX() - backgroundLayer.getX() - 15)/15;
                 row = (box.getY() - backgroundLayer.getY())/15;
                 if(col >= 0 && row >= 0 && col < 5 && row < 5){
                    if(backgroundLayer.getCell(col, row) == 2){
                        flag[translation[row][col]] = true;
                        backgroundLayer.setCell(col,row,3);
                    }
                     else if(backgroundLayer.getCell(col, row) == 3){
                        backgroundLayer.setCell(col,row,0);
                        canvas.player(canvas.getexplosionPlayer());
                        setLeftOfBombs();
                        if(getLeftOfBombs() == 0){
                            canvas.doStagepassing();
                            break;
                        }
                        flag[translation[row][col]] = false;
                    }
                 }
                break;
            case RIGHTMOVE:
               do{  
                   if(box.collidesWith(exit, true)){
                         canvas.doStagepassing();
                         break;
                    }               
                   canvas.repaint();                        
                    canvas.threadSleep();              
                      box.move(MOVE, 0);
                } while(!box.collidesWith(backgroundLayer,true) && !canvas.CheckOutOfEdge());
                 box.move(-MOVE, 0);
                col = (box.getX() - backgroundLayer.getX() + 15)/15;
                row = (box.getY() - backgroundLayer.getY())/15;
                if(col >= 0 && row >= 0 && col < 5 && row < 5){
                    if(backgroundLayer.getCell(col, row) == 2){
                        flag[translation[row][col]] = true;
                        backgroundLayer.setCell(col,row,3);
                    }
                    else if(backgroundLayer.getCell(col, row) == 3){
                        backgroundLayer.setCell(col,row,0);
                        canvas.player(canvas.getexplosionPlayer());
                        setLeftOfBombs();
                        if(getLeftOfBombs() == 0){
                            canvas.doStagepassing();
                            break;
                        }
                        flag[translation[row][col]] = false;
                    }
                }
                break;
           default:
               break;
    }
        
        
  }
    
    public int getNumOfBombs(){
        return numOfBombs;
    }
    public boolean getFlag(int n){
        return flag[n];
    }
    public int getTime(int n){
        return time[n];
    }
    
    public void setTime(int n){
        time[n]--;
    }
    
    public int[] getCoordinate(int n){
         return coordinate[n];
    }

    public void setFlag(int i, boolean b) {
        flag[i] = b;
    }

    public void setLeftOfBombs() {
        leftbombs--;
    }
    public int getLeftOfBombs(){
        return leftbombs;
    }

    public Sprite getPipe(int index) {
        return null;
    }
}

⌨️ 快捷键说明

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