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

📄 startcanvas.java

📁 j2me实现的手机拼图游戏
💻 JAVA
字号:
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import java.util.*;
import java.io.*;

public class StartCanvas extends GameCanvas implements Runnable{
    private PinTu midlet;
    private Image gameImg;
    private Sprite[] spriteArray;

    private int rowCol;
    private final int BLOCKWH,STARTX,STARTY;
    private int outLineWidth,outLineHeight;

    protected boolean stoped = false;
    private int delay = 120;
    protected final int WIDTH,HEIGHT;

    private int[] sequenceArray;

    private int index,upIndex,downIndex,leftIndex,rightIndex;
    private Sprite upSprite,downSprite,leftSprite,rightSprite,menuSprite;

    private Image dirImg;
    private Thread t;

    public StartCanvas(PinTu m) {
        super(true);
        setFullScreenMode(true);
        midlet = m;
        rowCol = midlet.rowColArray[midlet.selectedLevelIndex];

        index = rowCol*(rowCol+1)-1;

        outLineWidth = midlet.WIDTHHEIGHT;
        BLOCKWH = outLineWidth/rowCol;
        outLineHeight = midlet.WIDTHHEIGHT + BLOCKWH;

        spriteArray = new Sprite[rowCol*rowCol];

        WIDTH = getWidth();
        HEIGHT = getHeight();

        STARTX = (WIDTH - outLineWidth)/2;
        STARTY = (HEIGHT - outLineHeight)/2;

        ////////////////////////////////////////////////////////////////
        sequenceArray = new int[rowCol*(rowCol+1)];
        for(int i=0;i<rowCol*rowCol;i++)
            sequenceArray[i] = i;
        for(int i =rowCol*rowCol;i<rowCol*(rowCol+1);i++){
            sequenceArray[i] = -2;//////////////////////////////////////
        }
        sequenceArray[rowCol*(rowCol+1)-1] = -1;////////////////////////
        /////////////////////////////////////////////////////////////////
    }

    protected void start(){
        try{
            dirImg = Image.createImage(midlet.imgPath + "dir.png");
            gameImg = Image.createImage(midlet.imgPath +
                                        midlet.nameArray[midlet.
                                        selectedPicIndex]);
        }catch(IOException e){
            System.out.println("Image loaded error!");
        }
        extractImg(gameImg,BLOCKWH,BLOCKWH);
        randomSequence();
        setPosition();

        menuSprite = new Sprite(dirImg,10,10);
        menuSprite.setTransform(Sprite.TRANS_ROT270);
        menuSprite.setPosition(5,HEIGHT -15);

        t = new Thread(this);
        t.start();
    }

    public void randomSequence(){
        Random r = new Random();
        int rValue,t;
        for(int i=0;i<rowCol * rowCol - 1;i++){/////////////////////////////////////////////////
            //rValue = r.nextInt(rowCol * rowCol);//////////////////////////////////////////////
            rValue = Math.abs(r.nextInt()%(rowCol*rowCol - 1));/////////////////////////////////////
            t = sequenceArray[i];
            sequenceArray[i] = sequenceArray[rValue];
            sequenceArray[rValue] = t;
        }
    }

    public void extractImg(Image source,int width,int height){
        Image result;
        int x = 0,y = 0;
        for(int i=1;i<=rowCol;i++){
            for(int j=1;j<=rowCol;j++){
                x = (j-1) * width;
                y = (i-1) * height;
                result = Image.createImage(width,height);/////////////////////////////////////////
                result.getGraphics().drawImage(source,-x,-y,Graphics.TOP | Graphics.LEFT);
                spriteArray[(i-1)*rowCol + j-1] = new Sprite(result,width,height);
            }
        }
    }

    public void setPosition(){
        int posX,posY,row,col;
        for(int i=0;i<spriteArray.length;i++){
            row =(int)(i/rowCol);
            col = i%rowCol;
            posX = STARTX + col*BLOCKWH;/////////////////////////
            posY = STARTY + row*BLOCKWH;/////////////////////////////
            spriteArray[sequenceArray[i]].setPosition(posX,posY);
        }
    }

    public void run(){
        while(!stoped){
            checkIndex();
            update();
            draw();
            try{
                t.sleep(delay);
            }catch(InterruptedException e){
                //
            }
        }
    }

    protected void keyPressed(int key){
        if(key == 42){
            midlet.showMenuCanvas();
            stoped = true;
        }
    }

    private void update(){
        int keyState = getKeyStates();
        if((keyState & LEFT_PRESSED)!=0)
            resetPosition("LEFT");
        if((keyState & RIGHT_PRESSED)!=0)
            resetPosition("RIGHT");
        if((keyState & UP_PRESSED)!=0)
            resetPosition("UP");
        if((keyState & DOWN_PRESSED)!=0)
            resetPosition("DOWN");
        menuSprite.nextFrame();
    }

    private void checkIndex(){
        int row,col;
        row = (int)(index/rowCol);
        col = index % rowCol;
        upIndex = index - rowCol;
        downIndex = index + rowCol;
        leftIndex = index -1;
        rightIndex = index +1;

        downSprite = upSprite = leftSprite = rightSprite = null;

        if(downIndex < sequenceArray.length && sequenceArray[downIndex] != -2 && sequenceArray[downIndex]!= -1)
            downSprite = spriteArray[sequenceArray[downIndex]];
        if(upIndex >=0)
            upSprite = spriteArray[sequenceArray[upIndex]];
        if(leftIndex >=0 && sequenceArray[leftIndex] != -2 && sequenceArray[leftIndex]!=-1 && ((int)(leftIndex/rowCol)==row))///////////////////
            leftSprite = spriteArray[sequenceArray[leftIndex]];
        if((int)(rightIndex/rowCol)==row)/////////////////////////////////////////////////////
            rightSprite = spriteArray[sequenceArray[rightIndex]];
    }

    private void resetPosition(String dir){
        int posX,posY,row,col,t;
        row = (int)(index/rowCol);
        col = index % rowCol;
        posX = STARTX + col*BLOCKWH;////////////////////////////////////
        posY = STARTY + row*BLOCKWH;///////////////////////////////////

        if(dir.toString()=="LEFT" && rightSprite!=null){
            t = sequenceArray[rightIndex];
            sequenceArray[rightIndex] = -1;
            sequenceArray[index] = t;
            index = rightIndex;
            rightSprite.setPosition(posX,posY);
        }

        if(dir.toString() == "RIGHT" && leftSprite != null){
            t = sequenceArray[leftIndex];
            sequenceArray[leftIndex] = -1;
            sequenceArray[index] = t;
            index = leftIndex;
            leftSprite.setPosition(posX,posY);
        }

        if(dir.toString() == "UP" && downSprite != null){
            t = sequenceArray[downIndex];
            sequenceArray[downIndex] = -1;
            sequenceArray[index] = t;
            index = downIndex;
            downSprite.setPosition(posX,posY);
        }

        if(dir.toString() == "DOWN" && upSprite != null){
            t = sequenceArray[upIndex];
            sequenceArray[upIndex] = -1;
            sequenceArray[index] = t;
            index = upIndex;
            upSprite.setPosition(posX,posY);
        }
    }

    private void draw(){
        Graphics g = getGraphics();
        g.setColor(0xFFFFFF);
        g.fillRect(0,0,WIDTH,HEIGHT);

        g.setColor(0x317E3D);
        g.setStrokeStyle(Graphics.SOLID);
        g.drawRect(STARTX-2,STARTY-2,outLineWidth+3,outLineHeight+3);

        g.setColor(0xF5F4B8);
        g.fillRect(STARTX,STARTY,outLineWidth,outLineHeight);

        g.setColor(0x317E3D);
        g.drawRect(STARTX,STARTY + rowCol * BLOCKWH + 1,(rowCol -1) * BLOCKWH-2,BLOCKWH -2 );

        for(int i=0;i<rowCol*rowCol;i++){
            spriteArray[i].paint(g);
        }

        menuSprite.paint(g);
        flushGraphics();
    }
}

⌨️ 快捷键说明

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