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

📄 dragoncanvas.java

📁 一个基于JAVA的手机射击类游戏``有过关模式
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
                            playerScores = playerScores + 5;
                            break;
                        }
                    }
                    // =================击中自杀机end=====================
                    
                    // =================击中粘土怪start===================
                    for (int k = 0; k < CLAYERCOUNTS; k++) {
                        if (missile[i].collidesWith(clayer[k], false)) {
                            for (int j = 0; i < EXPLOSIONCOUNTS; i++) {
                                if (!explosion[j].isVisible()) {
                                    explosion[j].setFrame(0);
                                    explosion[j].setPosition(
                                            clayer[k].getX() + 10, clayer[k]
                                            .getY() + 15);
                                    explosion[j].setVisible(true);
                                    break;
                                }
                            }
                            //隐藏碰撞后的精灵
                            missile[i].setVisible(false);
                            clayer[k].setVisible(false);
                            // 击中粘土怪后的奖励
                            playerScores = playerScores + 4;
                            break;
                        }
                    }
                    // =================击中粘土怪end=====================
                }
                // ==========================玩家发射的导弹end======================
                
                // =======================dragon发射的炸弹start====================
                if (missile[i].getFrame() == 4) {
                    missile[i].move(missileXspeed, missileYspeed);
                    if (missile[i].collidesWith(playerPlane, false)) {
                        // =================对爆炸的处理start=================
                        for (int j = 0; i < EXPLOSIONCOUNTS; i++) {
                            if (!explosion[j].isVisible()) {
                                explosion[j].setFrame(0);
                                explosion[j].setPosition(
                                        playerPlane.getX() + 1, playerPlane
                                        .getY());
                                explosion[j].setVisible(true);
                                break;
                            }
                        }
                        // =================对爆炸的处理end===================
                        missile[i].setVisible(false);
                        // =================更新信息start================
                        playerHP = playerHP - 5;
                        // ==================更新信息end=================
                    }
                }
                // =======================dragon发射的炸弹start====================
                
                // ===================医药箱start=================================
                if (missile[i].getFrame() == 9) {
                    missile[i].move(0, 1);
                    if (missile[i].collidesWith(playerPlane, true)) {
                        missile[i].setVisible(false);
                        playerHP = Math.min(playerHP + 10, 50);
                    }
                    if (missile[i].collidesWith(dragonMonster, true)) {
                        missile[i].setVisible(false);
                        bossHP = Math.min(bossHP + 5, 100);
                    }
                }
                // ===================医药箱end===================================
                
                // =====================红心start========================
                if (missile[i].getFrame() == 13) {
                    missile[i].move(0, 1);
                    if (missile[i].collidesWith(playerPlane, true)) {
                        missile[i].setVisible(false);
                        playerLifeCounts = Math.min(playerLifeCounts + 1, 9);// 游戏最高玩家人数为9个
                    }
                }
                // =====================红心end=========================
                // ===================粘土怪的炸弹start============================
                if (missile[i].getFrame() == 1) {
                    missile[i].move(0, 4);
                    if (missile[i].collidesWith(playerPlane, false)) {
                        missile[i].setVisible(false);
                        playerHP = playerHP - 3;
                    }
                }
                // ===================粘土怪的炸弹end==============================
            }
            checkBounds(missile[i], HIDE);
        }
        // =================对各种导弹的处理end=================
        
        // ==============对游戏状态的维护start==================
        if (playerHP <= 0) {
            playerLifeCounts = playerLifeCounts - 1;
            playerHP = 50;
        }
        if (playerLifeCounts == 0) {
            playerHP = 0;
            missionOneGameOver = true;
            dragonThread = null;
            isWin = false;
            Dragon.MISSIONCOUNTS = Dragon.MENULIST;
            Dragon.showMenu = true;
        }
        
        if (bossHP <= 0) {
            missionOneGameOver = true;
            dragonThread = null;
            isWin = true;
            Dragon.MISSIONCOUNTS = Dragon.MISSIONTWO;
            //  Dragon.desertCanvas = new DesertCanvas(Display.getDisplay(dragon));
            
        }
        // ==============对游戏状态的维护end====================
    }
    /**
     * 边界检测
     *
     * @param sprite
     * @param action
     */
    private void checkBounds(Sprite sprite, int action) {
        
        // 精灵折返
        if (action == WRAP) {
            // 当精灵穿出左边界时折返到右边界
            if (sprite.getX() < -sprite.getWidth()) {
                sprite.setPosition(getWidth(), sprite.getY());
            }
            // 当精灵穿出右边界时折返到左边界
            else if (sprite.getX() > getWidth()) {
                sprite.setPosition(-sprite.getWidth(), sprite.getY());
            }
            // 当精灵穿出上边界时折返到下边界
            if (sprite.getY() < 20) {
                sprite.setPosition(sprite.getX(), getHeight() - 40);
            }
            // 当精灵穿出下边界时折返到上边界
            else if (sprite.getY() > getHeight() - 40) {
                sprite.setPosition(sprite.getX(), 20);
            }
        }
        
        // 精灵停止
        if (action == STOP) {
            // 当精灵移动到左边界时停止
            if (sprite.getX() < 0) {
                sprite.setPosition(0, sprite.getY());
                sprite.move(0, 0);
            }
            // 当精灵移动到有边界时停止
            if (sprite.getX() > (getWidth() - sprite.getWidth())) {
                sprite.setPosition(getWidth() - sprite.getWidth(), sprite
                        .getY());
                sprite.move(0, 0);
            }
        }
        
        // 精灵隐藏
        if (action == HIDE) {
            // 当精灵移动到上边界
            if (sprite.getY() < 20) {
                sprite.setVisible(false);
            }
            // 当精灵移动到下边界
            else if (sprite.getY() > getHeight() - 30) {
                sprite.setVisible(false);
            }
        }
        
        // 精灵反弹
        if (action == BOUNCE) {
            if (sprite.getX()-10 > getWidth() - sprite.getWidth()) {
                clayerXspeed = -clayerXspeed;
            } else if (sprite.getX() < 0) {
                clayerXspeed = -clayerXspeed;
            }
        }
        
    }
    
    
    private void drawIt(Graphics g) {
        
        g.setFont(Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_BOLD,
                Font.SIZE_SMALL));
        g.drawImage(backgroundImage, 0, 20, Graphics.LEFT | Graphics.TOP);
        
        // ==============绘制顶部状态栏start================
        g.setColor(0x999999);// 设定状态栏背景色是浅灰色
        g.fillRect(0, 0, infoBarWidth, infoBarHeight);// 设定状态栏大小
        g.drawImage(dragonIconImg, 0, 0, Graphics.LEFT | Graphics.TOP);// 绘制Boss头标
        g.setColor(0);// 设定字体颜色
        g.drawString("HP", 20, 4, Graphics.LEFT | Graphics.TOP);
        g.drawRect(35, 4, 100, 8);
        g.setColor(0xccff33);
        if (bossHP < 40) {
            g.setColor(0xff0000);
        }
        g.fillRect(35, 4, bossHP, 8);// 绘制boss血槽
        
        g.setColor(0);
        // ==============绘制顶部状态栏end==================
        
        // ===============绘制底部状态栏start===============
        g.setColor(0x999999);// 设定状态栏背景色是浅灰色
        g.fillRect(0, getHeight() - 20, infoBarWidth, infoBarHeight);// 设定状态栏大小
        
        g.drawImage(playerImg, 0, getHeight() - 20, Graphics.LEFT
                | Graphics.TOP);// 绘制player头标
        g.setColor(0);
        g.drawString(Integer.toString(playerLifeCounts), 22, getHeight()-12 ,
                Graphics.LEFT | Graphics.TOP);// 绘制生命数字符串
        g.drawRect(30, getHeight() - 16, 50, 8);
        g.setColor(0xccff00);
        if (playerHP < 20) {
            g.setColor(0xff0000);
        }
        g.fillRect(30, getHeight() -16, playerHP, 8);// 绘制player血槽
        
        g.setColor(0);// 设定字体颜色
        g.drawString("SCORES: ", 90, getHeight() - 16, Graphics.LEFT
                | Graphics.TOP);// 绘制SCORES字符串
        g.drawString(Integer.toString(playerScores), 140, getHeight() - 16,
                Graphics.LEFT | Graphics.TOP);// 绘制SCORES
        // ===============绘制底部状态栏end=================
        
        layer.paint(g, 0, 0);//将所有的精灵绘制到屏幕当中
        
        // ===========监测可见弹药数start=============
        int missileCount = 0;
        for (int i = 0; i < MISSILECOUNT; i++) {
            if (missile[i].isVisible())
                missileCount++;
        }
        g.setColor(0);
        g.drawString(Integer.toString(missileCount), 0, 25, Graphics.LEFT
                | Graphics.TOP);
        // ===========监测可见弹药数end===============
        
        // ===============显示游戏刚开始的提示语start===================
        if (stringShowCounts <= 38) {// 因为rate=40所以38表示1.5s,50表示2s
            g.setColor(0xff0000);
            g.drawString("Mission One", getWidth() / 2 - 35,
                    getHeight() / 2 - 10, Graphics.LEFT | Graphics.TOP);
            g.drawString("Fight in the plain!", getWidth() / 2 - 50,
                    getHeight() / 2 + 10, Graphics.LEFT | Graphics.TOP);
        }
        // ===============显示游戏刚开始的提示语end=====================
        
        // =================绘制游戏结束字符串start=================
        if (missionOneGameOver) {
            g.setColor(0xff0000);
            g.drawString("Mission One", getWidth() / 2 - 35,
                    getHeight() / 2 - 10, Graphics.LEFT | Graphics.TOP);
            if (isWin) {
                g.setColor(0xff0000);
                g.drawString("You Win!", getWidth() / 2 - 25,
                        getHeight() / 2 + 10, Graphics.LEFT | Graphics.TOP);
                g.drawString("Loading......",getWidth() / 2 - 28,
                        getHeight() / 2 + 22, Graphics.LEFT | Graphics.TOP);
                System.out.println(playerScores);
                System.out.println("win " + Dragon.MISSIONCOUNTS);
            } else {
                g.setColor(0xff0000);
                g.drawString("You Lose!", getWidth() / 2 - 30,
                        getHeight() / 2 + 10, Graphics.LEFT | Graphics.TOP);
                System.out.println(playerScores);
                System.out.println("lose " + Dragon.MISSIONCOUNTS);
            }
            
        }
        // =================绘制游戏结束字符串end===================
        flushGraphics();// 这一句很关键,没有将不能实现动画!!!
        
    }
    
    
    
}

⌨️ 快捷键说明

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