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

📄 gamecanvas.java

📁 一個游戲程序,一個不可多得的源碼程序,是學習J2ME的好東東.
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
                    break;
                case LEVEL:
                    int tmpL=sd.getLevel();
                    if(tmpL==0){
                        level=0;
                    }else{
                        if (level < tmpL-1)//
                            level++;
                        else
                            level = 0; //到底则为0
                    }
                    repaint();
                    break;
                case SUBLEVEL:
                    if (subLevel + 5 < 20) { //
                        subLevel = subLevel + 5;
                    } else {
                        subLevel = subLevel - 15; //到底则为0
                    }
                    repaint();
                    break;
                case  HELP:
                    if (scoll < 17) //
                        scoll++;
                    repaint();
                    break;
                case  GAME:
                    if(menuState==9){ //控制方块
                        moveDown();
                        doCount++;
                        repaint();
                    }
                    if(menuState==8){ //菜单
                        if (menuNum < 3) //小于
                            menuNum ++;
                        else
                            menuNum = 0; //到顶则为最后
                        repaint();
                    }
                    break;
            }
        }
        
        if (keyCode == KEY_LEFT_ARROW || keyCode==KEY_NUM4) {
            switch(gameState){
                case LEVEL:
                    int tmpL=sd.getLevel();
                    if(tmpL==0){
                        level=0;
                    }else{
                        if (level > 0) //小于
                            level--;
                        else
                            level = tmpL-1; //到顶则为最后
                    }
                    repaint();
                    break;
                case SUBLEVEL:
                    if (subLevel > 0) //小于
                        subLevel--;
                    else
                        subLevel = 19; //到顶则为最后
                    repaint();
                    break;
                case  GAME:
                    if(menuState==9){ //控制方块
                        moveLeft();
                        doCount++;
                        repaint();
                    }
                    break;
            }
        }
        
        if (keyCode == KEY_RIGHT_ARROW|| keyCode==KEY_NUM6) {
            switch(gameState){
                case LEVEL:
                    int tmpL=sd.getLevel();
                    if(tmpL==0){
                        level=0;
                    }else{
                        if (level < tmpL-1)//
                            level++;
                        else
                            level = 0; //到底则为0
                    }
                    repaint();
                    break;
                case SUBLEVEL:
                    if (subLevel < 19)
                        subLevel++;
                    else
                        subLevel = 0; //到底则为0
                    repaint();
                    break;
                case  GAME:
                    if(menuState==9){ //控制方块
                        moveRight();
                        doCount++;
                        repaint();
                    }
                    break;
            }
        }
    }

    protected void keyReleased(int arg0) {
        if (gameState == GAME) {
            if (doCount > 2 && menuState==9) {
                passSubLevel();
                repaint();
            }
        }
    }
    
    //进入小关选择
    private void gotoSubLevel(){
        passCount=0;
        //标记每个小关是否通过
        if(sd.getLevel()==0){//没记录
            levelPass=new boolean[20];
            stars =new boolean [20];
            score =new int [20];
        }else{
            //从记录仓库获取数据
            levelPass = sd.getSubPass(level);
            stars =sd.getSubStars(level);
            score =sd.getSubScore(level);
            for(int i=0;i<20;i++){
                if(levelPass[i])  //统计已过关的
                   passCount++;
            }
        }
        //System.out.println("First passCount"+passCount);
        //初始化数据
        menuState = 9;
        gameState = SUBLEVEL;
    }
    
    //**======新游戏======**//*
    private void newGame() {
        menuNum = 0;
        doCount = 0;
        completeColor = 0;
        gl = new GameLogic(); //当前小关的布置
        gl.readMap(level, subLevel);
        int tmpLength = gl.gameMap.length;
        mark = new boolean[tmpLength][tmpLength];
        repaint();
    }

    //处理首页菜单
    private void doIndexMenu() {
        switch (menuNum) {
            case 0:  //new game
                if (sd.getLevel()>0) { //有记录
                    menuState = 0;
                } else {  //进入SUBLEVEL
                    level=0;
                    gameState=NEWGAME;
                    //gotoSubLevel();
                }
                repaint();
                break;
            case 1:  //读取进度
                int tmpL=sd.getLevel();
                if (tmpL>0) { //有记录
                	   level=tmpL-1;
                       gameState = LEVEL;
                       menuState = 9;
                } else {
                    menuState = 1;
                }
                repaint();
                break;
            case 2:  //查看记录
                if (sd.getLevel()>0) { //有记录
                    gameState = SEELOG;
                } else {
                    menuState = 3;
                }
                repaint();
                break;
            case 3:  //帮助
                gameState = HELP;
                repaint();
                break;
            case 4: //声音设置
                menuState = 5;
                soundOpen = !soundOpen;
                repaint();
                soundCotrol();
                break;
            case 5:  //关于
                gameState = ABOUT;
                repaint();
                break;
            case 6://退出
                exit();
                break;
        }
    }
    //处理游戏菜单
    private void doGameMenu(){
        switch(menuNum){
        case 0:  //保存进度
            menuState=1;
            repaint();
            sd.writeDate(level, score, stars, levelPass);
            break;
        case 1:  //帮助
            gameState = HELP;
            repaint();
            break;
        case 2:  //声音
            menuState=0;
            soundOpen = !soundOpen;
            repaint();
            soundCotrol();
            break;
        case 3:  //返回主菜单
            gameState=INDEX;
            menuState = 9;
            menuNum=1;
            repaint();
            break;
        }
    }

    private void exit(){
        player.close();
        scFresh.cancel();
        mark=null;          //标记
        levelPass=null;
        stars=null;  //小关星星数
        score=null;  //小关分数
        m.notifyDestroyed();
    }

    /**向上移动**/
    private void moveUp() {
        intMark();
        int tmpLength = gl.gameMap.length;
        for (int j = 0; j < tmpLength; j++) {
            if (gl.gameMap[0][j] > 0) {
                mark[0][j] = true;
            }
        }
        for (int i = 1; i < tmpLength; i++) { //从第2行向下搜索
            for (int j = 0; j < tmpLength; j++) {
                //white diamonds is not move
                if (gl.gameMap[i][j] == 1) {
                    mark[i][j] = true;
                    //上方有不能动的则所有连接的同色的不能动
                }
                if (gl.gameMap[i][j] > 1 && mark[i - 1][j]) {
                    markDiamonds(i, j, gl.gameMap[i][j]);
                }
            }
        }
        //check other colors
        checkMoveUp();
        // draw the tiles in their new positions
        for (int i = 1; i < tmpLength; i++) {
            for (int j = 0; j < tmpLength; j++) {
                if (gl.gameMap[i][j] > 1 && !mark[i][j]) {
                    gl.gameMap[i - 1][j] = gl.gameMap[i][j];
                    gl.gameMap[i][j] = 0;
                }
            }
        }
    }

    //递归检测
    private void checkMoveUp() {
        int tmpLength = gl.gameMap.length;
        for (int i = 1; i < tmpLength; i++) { //从第2行向下搜索
            for (int j = 0; j < tmpLength; j++) {
                if (gl.gameMap[i][j] > 1 && !mark[i][j] && mark[i - 1][j]) {
                    markDiamonds(i, j, gl.gameMap[i][j]);
                    checkMoveUp(); //递归
                    return;
                }
            }
        }
    }

    /**向下移动**/
    private void moveDown() {
        intMark();
        int tmpLength = gl.gameMap.length;
        for (int j = 0; j < tmpLength; j++) {
            if (gl.gameMap[tmpLength - 1][j] > 0) {
                mark[tmpLength - 1][j] = true;
            }
        }
        for (int i = tmpLength - 2; i >= 0; i--) { //从倒数第2行向上搜索
            for (int j = 0; j < tmpLength; j++) {
                //white diamonds is not move
                if (gl.gameMap[i][j] == 1) {
                    mark[i][j] = true;
                    //下方有不能动的则所有连接的同色的不能动
                }
                if (gl.gameMap[i][j] > 1 && mark[i + 1][j]) {
                    markDiamonds(i, j, gl.gameMap[i][j]);
                }
            }
        }
        //other
        checkMoveDown();
        // draw the tiles in their new positions
        for (int i = tmpLength - 1; i >= 0; i--) {
            for (int j = 0; j < tmpLength; j++) {
                if (gl.gameMap[i][j] > 1 && !mark[i][j]) {
                    gl.gameMap[i + 1][j] = gl.gameMap[i][j];
                    gl.gameMap[i][j] = 0;
                }
            }
        }
    }

    //递归检测
    private void checkMoveDown() {
        int tmpLength = gl.gameMap.length;
        for (int i = tmpLength - 2; i >= 0; i--) { //从倒数第2行向上搜索
            for (int j = 0; j < tmpLength; j++) {
                if (gl.gameMap[i][j] > 1 && !mark[i][j] && mark[i + 1][j]) {
                    markDiamonds(i, j, gl.gameMap[i][j]);
                    checkMoveDown(); //递归
                    return;
                }
            }
        }
    }

    /**向左移动**/
    private void moveLeft() {
        intMark();
        int tmpLength = gl.gameMap.length;
        for (int j = 0; j < tmpLength; j++) {
            if (gl.gameMap[j][0] > 0) {
                mark[j][0] = true;
            }
        }
        for (int j = 1; j < tmpLength; j++) {
            for (int i = 0; i < tmpLength; i++) { //从第2列向右搜索
                if (gl.gameMap[i][j] == 1) { //white diamonds is not move
                    mark[i][j] = true;
                    //左方有不能动的则所有连接的同色的不能动
                }
                if (gl.gameMap[i][j] > 1 && mark[i][j - 1]) {
                    markDiamonds(i, j, gl.gameMap[i][j]);
                }
            }
        }
        checkMoveLeft();
        // draw the tiles in their new positions
        for (int i = 0; i < tmpLength; i++) {
            for (int j = 0; j < tmpLength; j++) {
                if (gl.gameMap[i][j] > 1 && !mark[i][j]) {
                    gl.gameMap[i][j - 1] = gl.gameMap[i][j];
                    gl.gameMap[i][j] = 0;
                }
            }
        }
    }

    //递归检测
    private void checkMoveLeft() {
        int tmpLength = gl.gameMap.length;
        for (int j = 1; j < tmpLength; j++) {
            for (int i = 0; i < tmpLength; i++) {
                if (gl.gameMap[i][j] > 1 && !mark[i][j] && mark[i][j - 1]) {
                    markDiamonds(i, j, gl.gameMap[i][j]);
                    checkMoveLeft(); //递归
                    return;
                }
            }
        }
    }

    /**向右移动**/
    private void moveRight() {
        intMark();
        int tmpLength = gl.gameMap.length;
        for (int j = 0; j < tmpLength; j++) {
            if (gl.gameMap[j][tmpLength - 1] > 0) {
                mark[j][tmpLength - 1] = true;
            }
        }

⌨️ 快捷键说明

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