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

📄 gamecanvas.java

📁 一個游戲程序,一個不可多得的源碼程序,是學習J2ME的好東東.
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
        g.setColor(0xC9B376);
        g.fillRect(0, 0, getWidth(), 25);
        fillBack(g,0,25,11,12); //纹理
        g.setColor(0x000000);
        g.drawLine(0,25,getWidth(),25);
        g.drawString("关 于", 68, 5, 20);
        g.setColor(0xeeeeee);
        for(int i=0;i<8;i++){//显示11行
            g.drawString(about[i], 3, 30+18*i, 20);
        }
        //back
        drawButton(g,137,189,"返回");
    }
    
    /**绘画游戏:paintGame**/
    private void paintGame(Graphics g) {
        //===不动的
        if (doCount == 0 || menuState==8) {
            //背景图
            g.setColor(0x000000);
            g.fillRect(0,0,getWidth(),getHeight());
            for (int i = 0; i < 22; i++) {
                g.drawImage(li.gamePageImg[0], i*8, 0, 20);
            }
            for (int i = 0; i < 20; i++) {
                g.drawImage(li.gamePageImg[0], 0, 8+i*8, 20);
                g.drawImage(li.gamePageImg[0], 168, 8+i*8, 20);
            }
            //灰点
            for (int i = 0; i < 3; i++) {
                for (int j = 0; j < 9; j++) {
                    g.drawImage(li.gamePageImg[2], 102+j*8, 179+i*8, 20);
                }
            }
            //星星图
            drawStar(g);
            //要求完成的色块
            g.drawImage(li.gamePageImg[1], 16, 175, 20);
            drawRequireColor(g);
        }
        //==动的
            fillBack(g,8,8,10,10);//格子
            drawDiamond(g);//方块
        //声音设置
        if(menuState==0){
            g.setColor(0x000000);
            
            if (soundOpen)
                drawDoing(g, 38, 91, "声音打开");
            else
                drawDoing(g, 38,91, "声音关闭");
        }
        //保存
        if(menuState==1){
            g.setColor(0x000000);
            
            drawDoing(g, 38,91, "保存中…");
        }
        //菜单
        if(menuState==8){
            drawGameMenu(g);
        }
    }

    //绘画方块:drawDiamond
    private void drawDiamond(Graphics g) {
        int boxWidth=10;
        for (int i = 0; i < gl.gameMap.length; i++) {
            for (int j = 0; j < gl.gameMap.length; j++) {
                if (gl.gameMap[i][j] > 0) {
                    int x = 8 + j * boxWidth;
                    int y = 8 + i * boxWidth;
                    g.setColor(setDiaColor(gl.gameMap[i][j]));
                    g.fillRect(x, y, boxWidth, boxWidth); //画方块
                    //明暗线
                    if (i - 1 >= 0 && gl.gameMap[i - 1][j] != gl.gameMap[i][j]) { //up
                        g.setColor(0xffffff); //明部
                        g.drawLine(x, y, x + boxWidth - 1, y);
                    }
                    if (i <= gl.gameMap.length - 2 && gl.gameMap[i + 1][j] != gl.gameMap[i][j]) { //down
                        g.setColor(0x000000); //暗部
                        g.drawLine(x, y + boxWidth - 1, x + boxWidth - 1, y + boxWidth-1);
                    }
                    if (j - 1 >= 0 && gl.gameMap[i][j - 1] != gl.gameMap[i][j]) { //left
                        g.setColor(0xffffff); //明部
                        g.drawLine(x, y, x, y + boxWidth - 1);
                    }
                    if (j <= gl.gameMap.length - 2 && gl.gameMap[i][j + 1] != gl.gameMap[i][j]) { //right
                        g.setColor(0x000000); //暗部
                        g.drawLine(x + boxWidth - 1, y, x + boxWidth - 1, y + boxWidth-1);
                    }
                }
            }
        }
    }

    //绘画特殊图形
    private void drawStar(Graphics g) {
        if (gl.starMap != null) {
            g.drawImage(li.starSmallImg, 80, 174,20);
            for (int i = 0; i < gl.starMap.length; i++) { //行
                for (int j = 0; j < gl.starMap[0].length; j++) { //列
                    if (gl.starMap[i][j] > 0) {
                        int x = 110 + j * 4;
                        int y = 179 + i * 4;
                        g.setColor(setDiaColor(gl.starMap[i][j]));
                        g.fillRect(x, y, 4, 4); //画方块
                    }
                }
            }
        }
    }

    //绘画需要完成的色块
    private void drawRequireColor(Graphics g) {
        int ColorCount = gl.checkColor.length;
        int color;
        for (int k = 0; k < ColorCount; k++) {
            color=gl.checkColor[k];
            if(color>0){
                g.setColor(setDiaColor(color));
                g.fillRect(19 + k * 11, 178, 8, 8);
            }
        }
    }

    //设置方块颜色:setDiaColor
    private int setDiaColor(int color) {
        int tmpColor = 0;
        switch (color) {
            case 1 :  //white
                tmpColor = 0xF5ECE0;
                break;
            case 2 :  //red
                tmpColor = 0xF56133;
                break;
            case 3 :  //green
                tmpColor = 0x00cc33;
                break;
            case 4 :  //blue
                tmpColor = 0x2677ff;
                break;
            case 5 :  //yellow
                tmpColor = 0xffbb00;
                break;
            case 6 :  //red grey
                tmpColor = 0xbb9999;
                break;
            case 7 :  //green grey
                tmpColor = 0x99bb99;
                break;
            case 8 :  //blue grey
                tmpColor = 0x9999bb;
                break;
            case 9 :  //yellow grey
                tmpColor = 0xddbb99;
                break;
        }
        return tmpColor;
    }

    //暂停菜单
    private void drawGameMenu(Graphics g){
        int v=getHeight()-li.pausePageImg.getHeight()-40;
        int h=8;
        //background
        g.drawImage(li.pausePageImg,h,v,20);
        //底色
        g.setColor(0x533D00);
        g.fillRect(h+2,v+23+menuNum*18,96,18);
        //文字
        g.setColor(0xE4D7B3);
        g.drawString("菜  单", h+18, v+2, 20);
        g.drawString("保存进度", h+5, v+23, 20);
        g.drawString("帮助", h+5, v+41, 20);
        if(soundOpen)
            g.drawString("声音"+"=>关", h+5, v+59, 20);
        else
            g.drawString("声音"+"=>开", h+5, v+59, 20);
        g.drawString("返回主菜单", h+5, v+77, 20);
    }
    
    
    /**绘画过小关画面**/
    private void passSubPage(Graphics g) {
        int x,y;
        if (stars[subLevel]) {
            g.drawImage(li.starBigImg, 53, 21, 20);
            //System.out.println("stars");
            g.drawImage(li.starNumImg[starsCount() - 1], 84, 49, 20);
            x=17;
            y=102;
            g.drawImage(li.passImg, x, y, 20);
        } else {
            x=17;
            y=74;
            g.drawImage(li.passImg, x, y, 20);
        }
        g.setColor(0xffcc00);
        g.drawString("气血融通,", x+39, y+13, 20);
        g.drawString("功力渐强。", x+39, y+31, 20);
    }
    
    //过关
    private void passPage(Graphics g) {
        g.drawImage(li.passImg, 17, 74, 20);
        g.setColor(0xffcc00);
        g.drawString("此级修炼已成,", 21, 86, 20);
        g.drawString("练得大法指日可待。", 21, 104, 20);
    }

    //计算所有星星
    private int starsCount(){
        int starsCount = 0;
        for(int i=0;i<20;i++){
            if(stars[i])
                starsCount++;
        }
        return starsCount;
    }
    
    //计算level分数
    private int scoreCount(){
        int scoreCount = 0;
        for(int i=0;i<20;i++){
            scoreCount=scoreCount+score[i];
        }
        return scoreCount;
    }
    
    //画按钮
    private void drawButton(Graphics g,int x,int y,String s){
        g.setColor(0x000000);
        g.drawImage(li.buttonImg, x, y, 20);
        g.drawString(s, x+4, y+2, 20);
    }
    
    /**按键控制(Key**/
    protected void keyPressed(int keyCode) {
        //OK键|leftSoft
        if (keyCode == KEY_SOFTKEY3 || keyCode == KEY_SOFTKEY1) {
            switch(gameState){
                case GAME :
                    if(menuState==8){ //有菜单时
                        doGameMenu();//操作
                    }else if(menuState==9){ //无菜单时
                        menuState=8;
                        repaint();
                    }
                    break;
                case SUBLEVEL ://进入游戏
                    gameState = GAME;
                    newGame();
                    repaint();
                    break;
                case LEVEL ://进入小关选择
                    gotoSubLevel();
                    repaint();
                    break;
                case INDEX :
                    if (menuState == 0) { //新游戏菜单&有记录
                        gameState=NEWGAME;
                        sd.deleteRS();    //先清空再建立
                        level=0;
                        //gotoSubLevel();
                        repaint();
                    }
                    if (menuState == 9) { //无选择时
                        doIndexMenu();
                        repaint();
                    }
                    break;
            }
        }
        //rightSoft键(back)
        if (keyCode == KEY_SOFTKEY2) {
            switch(gameState){
            case INDEX ://首页
                if (menuState == 0) { //取消清除记录
                    menuState = 9;
                    repaint();
                }
                break;
            case LEVEL://选关
                gameState = INDEX;
                menuState = 9;
                menuNum=1;
                repaint();
                break;
            case SUBLEVEL ://小关
                gameState = LEVEL;
                repaint();
                break;
            case GAME ://游戏
                if(menuState==9){//到小关
                    gameState = SUBLEVEL;
                    repaint();
                }else if(menuState==8){//到游戏
                    menuState=9;
                    repaint();
                }
                break;
            case HELP ://帮助
                if(menuState==8){//返回游戏
                    gameState=GAME;
                }
                if(menuState==9){//返回首页
                    gameState=INDEX;
                }
                scoll=0;  //滚动条复原
                repaint();
                break;
            case ABOUT ://关于
                gameState=INDEX;
                repaint();
                break;
            case SEELOG ://查看记录
                menuState=9;
                gameState=INDEX;
                repaint();
                break;
            }
        }
        //*键重来
        if (keyCode==42) {
            if(gameState==GAME && menuState==9){
                newGame();
                repaint();
            }
        }

    //方向键
        if (keyCode == KEY_UP_ARROW || keyCode==KEY_NUM2) {
            switch(gameState){
                case INDEX:
                    if (menuNum > 0) //小于
                        menuNum--;
                    else
                        menuNum = 6; //到顶则为最后
                    repaint();
                    break;
                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 - 5 >= 0) //小于
                        subLevel = subLevel - 5;
                    else
                        subLevel = subLevel + 15; //到顶则为最后
                    repaint();
                    break;
                case  HELP:
                    if (scoll > 0) //小于
                        scoll--;
                    repaint();
                    break;
                case  GAME:
                    if(menuState==9){ //控制方块
                         moveUp();
                         doCount++;
                         repaint();
                    }
                    if(menuState==8){ //菜单
                        if (menuNum > 0)//小于
                            menuNum --;
                        else
                            menuNum = 3; //到顶则为最后
                        repaint();
                    }
                    break;
            }
        }
        
        if (keyCode == KEY_DOWN_ARROW || keyCode==KEY_NUM8) {
            switch(gameState){
                case INDEX:
                    if (menuNum < 6)//
                        menuNum++;
                    else
                        menuNum = 0; //到底则为0
                    repaint();

⌨️ 快捷键说明

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