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

📄 dragoncanvas.java

📁 一个基于JAVA的手机射击类游戏``有过关模式
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
    
    /**
     * 关闭线程
     *
     */
    public void stop() {
        dragonCanvasRunning = false;
        dragonThread = null;
    }
    
    /**
     * 游戏核心驱动线程!!
     */
    public void run() {
        
        long startTime = 0, endTime = 0, difTime = 0;
        int rate = 30;// 刷新速度40/70/30/100/20/10/16/17
        Thread currentThread = Thread.currentThread();
        while (currentThread == dragonThread) {
            startTime = System.currentTimeMillis();
            gameUpdate();
            drawIt(g);
            endTime = System.currentTimeMillis();
            difTime = endTime - startTime;
            if (difTime < rate) {
                try {
                    Thread.sleep(rate - difTime);
                } catch (InterruptedException e) {
                    stop();
                }
                
            }
        }
    }
    
    private void gameUpdate() {
        //能够在游戏刚开始很短的时间内作为显示字符的条件
        stringShowCounts++;
        
        
        // =============龙和它的炸弹Start==============
        if (random.nextInt() % 10 == 0) {
            dragonYspeed = Math.min(Math.max(dragonYspeed + random.nextInt()
            % 2, -1), 1);
        }
        dragonMonster.move(-2, dragonYspeed);
        dragonMonster.nextFrame();
        checkBounds(dragonMonster, WRAP);
        
        // dragon随机投掷炸弹
        if (random.nextInt() % 15 == 0) {
            for (int i = 0; i < MISSILECOUNT; i++) {
                if (!missile[i].isVisible()) {
                    missile[i].setFrame(4);
                    missile[i].setPosition(dragonMonster.getX() + 20,
                            dragonMonster.getY() + 25);
                    missile[i].setVisible(true);
                    break;
                }
            }
        }
        // ============龙和它的炸弹StartEnd=================
        
        // ================自杀机start=====================
        // 加入自杀机
        if (random.nextInt() % 60 == 0) {
            for (int i = 0; i < SUICIDORCOUNTS; i++) {
                if (!suicidor[i].isVisible()) {
                    suicidor[i].setPosition(Math.abs(random.nextInt()
                    % (getWidth() - 50) + 40), Math.abs(random
                            .nextInt()
                            % (getHeight() - 100)));
                    suicidor[i].setVisible(true);
                    // break;//没有这一句产生4个自杀机
                }
            }
        }
        // 维护自杀机
        for (int i = 0; i < SUICIDORCOUNTS; i++) {
            if (suicidor[i].isVisible()) {
                suicidor[i].move(0, 3);
                if (suicidor[i].collidesWith(playerPlane, false)) {
                    if (!explosion[i].isVisible()) {
                        explosion[i].setPosition(playerPlane.getX() + 1,
                                playerPlane.getY());
                        explosion[i].setVisible(true);
                        explosion[i].nextFrame();
                    }
                    suicidor[i].setVisible(false);
                    playerHP = playerHP - 10;
                }
                checkBounds(suicidor[i], HIDE);
            }
        }
        // ================自杀机end=======================
        
        // =================粘土怪start====================
        // 加入粘土怪2只
        if(random.nextInt() % 10==0){
            for (int i = 0; i < CLAYERCOUNTS; i++) {
                if (!clayer[i].isVisible()) {
                    clayer[i].setPosition(Math.abs(random.nextInt()
                    % (getWidth() - 50) + 40), Math.abs(random
                            .nextInt()
                            % (getHeight() - 100)));
                    clayer[i].setVisible(true);
                    //break;
                }
                break;
            }
        }
              
        // 维护粘土怪
        for (int i = 0; i < CLAYERCOUNTS; i++) {
            if (clayer[i].isVisible()) {
                clayer[i].move(clayerXspeed, clayerYspeed);
                clayer[i].nextFrame();
                checkBounds(clayer[i], BOUNCE);
            }
        }
        // =================粘土怪end======================
        
        // =================粘土怪的炸弹start===============
        // 添加粘土怪的炸弹
        if (random.nextInt() % 15 == 0) {
            for (int i = 0; i < CLAYERCOUNTS; i++) {
                if (clayer[i].isVisible()) {
                    for (int j = 0; j < MISSILECOUNT; j++) {
                        if (!missile[j].isVisible()) {
                            missile[j].setFrame(1);
                            missile[j].setPosition(clayer[i].getX() + 10,
                                    clayer[i].getY() + 20);
                            missile[j].setVisible(true);
                            break;
                        }
                    }
                }
            }
            
        }
        // =================粘土怪的炸弹end=================
        
        // ==================维护爆炸start==================
        for (int i = 0; i < EXPLOSIONCOUNTS; i++) {
            if (explosion[i].isVisible()) {
                if (explosion[i].getFrame() < 3) {
                    explosion[i].nextFrame();
                } else {
                    explosion[i].setVisible(false);
                }
            }
        }
        // ==================维护爆炸end===================
        
        // ===============急救箱start===============
        if (random.nextInt() % 180 == 0) {
            for (int i = 0; i < 20; i++) {
                if (!missile[i].isVisible()) {
                    missile[i].setFrame(9);
                    missile[i].setPosition(Math.abs(random.nextInt()
                    % (getWidth() - 50) + 25), Math.abs(random
                            .nextInt()
                            % (getHeight() - 100)) + 25);
                    missile[i].setVisible(true);
                    break;
                }
            }
        }
        // =============急救箱end==================
        
        // ===============红心start=================
        if (random.nextInt() % 350 == 0) {
            for (int i = 0; i < MISSILECOUNT; i++) {
                if (!missile[i].isVisible()) {
                    missile[i].setFrame(13);
                    missile[i].setPosition(Math.abs(random.nextInt()
                    % (getWidth() - 50) + 25), Math.abs(random
                            .nextInt()
                            % (getHeight() - 100) + 25));// x(25~151),y(25~123)
                    missile[i].setVisible(true);
                    break;
                }
            }
        }
        // ===============红心end==================
        
        // playPlane响应按键
        // =============playPlaneStart====================
        playerPlaneXspeed = 0;
        playerPlaneYspeed = 0;
        int keyState = getKeyStates();
        
        // 向左移动
        if ((keyState & LEFT_PRESSED) != 0) {
            playerPlaneXspeed = playerPlaneXspeed - 3;
            playerPlane.nextFrame();
        }
        // 向右移动
        else if ((keyState & RIGHT_PRESSED) != 0) {
            playerPlaneXspeed = playerPlaneXspeed + 3;
            playerPlane.nextFrame();
        }
        //返回菜单
        else if((keyState & UP_PRESSED) != 0){
            System.out.println(" 1.game interrupted! back to menu!");
            missionOneGameOver = false;
            dragonThread = null;
            isWin = false;
            Dragon.MISSIONCOUNTS = Dragon.MENULIST;
            Dragon.showMenu = true;
           // dragon.stop();
            //menuList.setGameActive(true);
            System.gc();
        }
        // 玩家开火
        else if ((keyState & FIRE_PRESSED) != 0) {
            /**
             * 这里添加开火声!
             */
            if(random.nextInt()%2 == 0){
                for (int i = 0; i < MISSILECOUNT; i++) {
                    if (!missile[i].isVisible()) {
                        missile[i].setFrame(0);
                        missile[i].setPosition(playerPlane.getX() + 6, playerPlane
                                .getY() - 1);
                        missile[i].setVisible(true);
                        break;
                    }
                }
            }
        }
        
        playerPlane.move(playerPlaneXspeed, playerPlaneYspeed);
        checkBounds(playerPlane, STOP);
        // ================playerPlaneEnd====================
        
        // =================对各种导弹的处理start===============
        for (int i = 0; i < MISSILECOUNT; i++) {
            if (missile[i].isVisible()) {
                // ==========================玩家发射的导弹start=====================
                if (missile[i].getFrame() == 0) {
                    missile[i].move(playerMissileXspeed, playerMissileYspeed);
                    // ==================击中龙start============================
                    if (missile[i].collidesWith(dragonMonster, false)) {
                        /**
                         * 这里添加爆炸音效
                         */
                        // 对爆炸的处理start
                        for (int j = 0; i < EXPLOSIONCOUNTS; i++) {
                            if (!explosion[j].isVisible()) {
                                explosion[j].setFrame(0);
                                explosion[j].setPosition(
                                        dragonMonster.getX() + 10,
                                        dragonMonster.getY() + 15);
                                explosion[j].setVisible(true);
                                break;
                            }
                        }
                        // 对爆炸的处理end
                        missile[i].setVisible(false);
                        // 击中龙时更新信息star
                        bossHP = bossHP - 1;
                        playerScores = playerScores + 10;
                        // 击中龙时更新信息end
                    }
                    // ==================击中龙end===========================
                    
                    // =================击中自杀机start====================
                    for (int k = 0; k < SUICIDORCOUNTS; k++) {
                        if (missile[i].collidesWith(suicidor[k], true)) {
                            for (int j = 0; i < EXPLOSIONCOUNTS; i++) {
                                if (!explosion[j].isVisible()) {
                                    explosion[j].setFrame(0);
                                    explosion[j].setPosition(
                                            suicidor[k].getX() + 10,
                                            suicidor[k].getY() + 15);
                                    explosion[j].setVisible(true);
                                    break;
                                }
                            }
                            // 隐藏碰撞后的精灵
                            missile[i].setVisible(false);
                            suicidor[k].setVisible(false);
                            // 击中自杀机后的奖励

⌨️ 快捷键说明

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