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

📄 oceancanvas.java

📁 一个基于JAVA的手机射击类游戏``有过关模式
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                }else if(random.nextInt()%32 == 0){
                    if (waterBoy.isVisible()) {
                        addMissile(waterBoy);
                        break;
                    }
                }
            }
            
        }
        // ===============随机增加导弹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 < MISSILECOUNTS; 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==================
        
        // =============导弹处理start================
        for (int i = 0; i < MISSILECOUNTS; i++) {
            if (missile[i].isVisible()) {
                // 玩家发射导弹
                if (missile[i].getFrame() == 7) {
                    missile[i].move(0, -5);
                    if (missile[i].collidesWith(acaleph1, true)) {
                        addExplosion(acaleph1);
                        acaleph1HP = acaleph1HP - 2;
                        playerScores = playerScores + 10;
                        missile[i].setVisible(false);
                    } else if (missile[i].collidesWith(acaleph2, true)) {
                        addExplosion(acaleph2);
                        acaleph2HP = acaleph2HP - 2;
                        playerScores = playerScores + 10;
                        missile[i].setVisible(false);
                    } else if (missile[i].collidesWith(waterBoy, true)) {
                        addExplosion(waterBoy);
                        playerScores = playerScores + 10;
                        missile[i].setVisible(false);
                        waterBoy.setVisible(false);
                    } else if (missile[i].collidesWith(mine, true)) {
                        addExplosion(mine);
                        playerScores = playerScores + 10;
                        missile[i].setVisible(false);
                        mine.setVisible(false);
                    } else if (missile[i].collidesWith(submarine, true)) {
                        addExplosion(submarine);
                        playerScores = playerScores + 10;
                        missile[i].setVisible(false);
                        submarine.setVisible(false);
                    }
                    
                }
                // 潜水艇开火
                else if (missile[i].getFrame() == 4) {
                    missile[i].move(0, 2);
                    if (missile[i].collidesWith(playerPlane, true)) {
                        addExplosion(playerPlane);
                        playerHP = playerHP - 5;
                        missile[i].setVisible(false);
                    }
                }
                // 水娃开火
                else if (missile[i].getFrame() == 3) {
                    missile[i].move(0, 3);
                    if (missile[i].collidesWith(playerPlane, true)) {
                        addExplosion(playerPlane);
                        playerHP = playerHP - 5;
                        missile[i].setVisible(false);
                    }
                }
                // 水母开火
                else if (missile[i].getFrame() == 6) {
                    if(!acaleph1.isVisible()){
                        missile[i].setVisible(false);
                    } else if(!acaleph2.isVisible()){
                        missile[i].setVisible(false);
                    }
                    missile[i].move(0, 3);
                    if (missile[i].collidesWith(playerPlane, true)) {
                        addExplosion(playerPlane);
                        playerHP = playerHP - 5;
                        missile[i].setVisible(false);
                    }
                }
                // 加人
                else if(missile[i].getFrame() == 13){
                    missile[i].move(0,2);
                    if(missile[i].collidesWith(playerPlane,true)){
                        playerLifeCounts = Math.min(playerLifeCounts + 1,9);
                        missile[i].setVisible(false);
                    }
                }
                // 加血
                else if(missile[i].getFrame() == 9){
                    missile[i].move(0,2);
                    if(missile[i].collidesWith(playerPlane,true)){
                        playerHP = Math.min(playerHP + 5,70);
                        missile[i].setVisible(false);
                    }
                }
                missile[i].checkBounds();
            }
        }
        // =============导弹处理end==================
        
        // =============水雷的攻击处理start=======
        if (mine.collidesWith(playerPlane, true)) {
            addExplosion(playerPlane);
            playerHP = playerHP - 5;
            mine.setVisible(false);
        }
        // =============水雷的攻击处理endt=======
        
        
        // ============爆炸处理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);
                }
                //break; //由于必须对所有的爆炸进行处理,所以要遍历爆炸数组。
            }
        }
        // ============爆炸处理end================
        updateInfo();
        
    }
    
    public void updateInfo() {
        if (playerHP <= 0) {
            playerLifeCounts = playerLifeCounts - 1;
            playerHP = 70;
        }
        if (playerLifeCounts == -1) {
            playerHP = 0;
            playerLifeCounts = 0;
            oceanThread = null;
            missionThreeGameOver = false;
            isWin = false;
            Dragon.MISSIONCOUNTS = Dragon.MENULIST;
            Dragon.showMenu = true;
        }
        if(acaleph1HP <= 0){
            acaleph1.setVisible(false);
        } else if(acaleph2HP <= 0){
            acaleph2.setVisible(false);
        }
        if (acaleph1HP <= 0 && acaleph2HP <= 0) {
            Dragon.MISSIONCOUNTS = Dragon.MISSIONBOSS;
            // Dragon.bossCanvas = new BOSSCanvas(Display.getDisplay(dragonMidlet));
            missionThreeGameOver = true;
            oceanThread = null;
            isWin = true;
        }
    }
    
    public void topInfoBar(Graphics g) {
        g.setFont(Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_BOLD,
                Font.SIZE_SMALL));
        g.setColor(0x999999);// 设定状态栏背景色是浅灰色
        g.fillRect(0, 0, infoBarWidth, infoBarHeight);// 设定状态栏大小
        g.drawImage(acalephIconImage, 0, 0, Graphics.LEFT | Graphics.TOP);// 绘制Boss1头标
        g.setColor(0xff0000);
        g.drawRect(17, 4, 70, 8);
        g.setColor(0xccff33);
        if (acaleph1HP < 30) {
            g.setColor(0xff0000);
        }
        g.fillRect(17, 4, acaleph1HP, 8);// 绘制boss1血槽
        
        g.drawImage(acalephIconImage, 88, 0, Graphics.LEFT | Graphics.TOP);// 绘制boss2头标
        g.setColor(0xff0000);
        g.drawRect(105, 4, 70, 8);
        g.setColor(0xccff33);
        if (acaleph2HP < 30) {
            g.setColor(0xff0000);
        }
        g.fillRect(105, 4, acaleph2HP, 8);// 绘制boss2血槽
        
    }
    
    public void bottomInfoBar(Graphics g) {
        g.setFont(Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_BOLD,
                Font.SIZE_SMALL));
        // ===============绘制底部状态栏start===============
        g.setColor(0x999999);// 设定状态栏背景色是浅灰色
        g.fillRect(0, getHeight() - 20, infoBarWidth, infoBarHeight);// 设定状态栏大小
        
        g.drawImage(playerIconImage, 0, getHeight() - 20, Graphics.LEFT
                | Graphics.TOP);// 绘制player头标
        
        g.setColor(0);
        g.drawString(Integer.toString(playerLifeCounts), 20, getHeight() - 15,
                Graphics.LEFT | Graphics.TOP);// 绘制生命数字符串
        
        g.drawRect(30, getHeight() - 16, 70, 8);
        g.setColor(0xccff00);
        if (playerHP < 20) {
            g.setColor(0xff0000);
        }
        g.fillRect(30, getHeight() - 16, playerHP, 8);// 绘制player血槽
        
        g.setColor(0);// 设定字体颜色
        g.drawString("SCORE:", 104, getHeight() - 18, Graphics.LEFT
                | Graphics.TOP);// 绘制SCORES字符串
        g.drawString(Integer.toString(playerScores), 142, getHeight() - 18,
                Graphics.LEFT | Graphics.TOP);// 绘制SCORES
        
    }
    
    protected void drawIt(Graphics g) {
        g.drawImage(backgroundImage, 0, 20, Graphics.LEFT | Graphics.TOP);
        topInfoBar(g);// 顶部信息栏
        missileVisibleCounts(g);
        
        oceanCanvasLayer.paint(g, 0, 0);// 游戏主画面
        
        bottomInfoBar(g);// 底部信息栏
        
        if (stringShowCounts <= 38) {// 因为rate=40所以38表示1.5s,50表示2s
            g.setColor(0xff0000);
            g.drawString("Mission Three", getWidth() / 2 - 35,
                    getHeight() / 2 - 10, Graphics.LEFT | Graphics.TOP);
            g.drawString("Ocean! Fight", getWidth() / 2 - 50,
                    getHeight() / 2 + 10, Graphics.LEFT | Graphics.TOP);
            
        }
        
        if (missionThreeGameOver) {
            g.setColor(0xff0000);
            g.drawString("Mission three", 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);
            }
        }
        flushGraphics();// flushGraphics()千万别忘。
    }
    
    public void missileVisibleCounts(Graphics g) {
        // ===========监测可见弹药数start=============
        int missileCount = 0;
        for (int i = 0; i < MISSILECOUNTS; i++) {
            if (missile[i].isVisible())
                missileCount++;
        }
        g.setColor(0);
        g.drawString(Integer.toString(missileCount), 0, 25, Graphics.LEFT
                | Graphics.TOP);
        // ===========监测可见弹药数end===============
    }
    
    public int randomXPosition() {
        return Math.abs(random.nextInt() % (getWidth() - 50) + 40);
        
    }
    
    public int randomYPosition() {
        return Math.abs(random.nextInt() % (getHeight() - 100));
    }
    
    public void addCharacter(GameSprites sprites) {
        sprites.setPosition(randomXPosition(), randomYPosition());
        sprites.setVisible(true);
        if (sprites == playerPlane) {
            sprites.setPosition((getWidth() - playerPlane.getWidth()) / 2,
                    getHeight() - 40);
        }
    }
    
    public void addMissile(GameSprites sprites) {
        for (int i = 0; i < MISSILECOUNTS; i++) {
            if (!missile[i].isVisible()) {
                if (sprites == submarine) {
                    missile[i].setFrame(4);
                    missile[i].setPosition(sprites.getX() + 16,
                            sprites.getY() + 16);
                    missile[i].setVisible(true);
                    break;
                } else if (sprites == acaleph2) {
                    if(acaleph2.isVisible()){
                        missile[i].setFrame(6);
                        missile[i].setPosition(sprites.getX() - 2,
                                sprites.getY() + 15);
                        missile[i].setVisible(true);
                    }
                    break;
                } else if (sprites == acaleph1) {
                    if(acaleph1.isVisible()){
                        missile[i].setFrame(6);
                        missile[i].setPosition(sprites.getX() - 10,
                                sprites.getY() + 15);
                        missile[i].setVisible(true);
                    }
                    break;
                } else if (sprites == waterBoy) {
                    missile[i].setFrame(3);
                    missile[i].setPosition(sprites.getX() + 35,
                            sprites.getY() + 10);
                    missile[i].setVisible(true);
                    break;
                } else if (sprites == playerPlane) {
                    missile[i].setFrame(7);
                    missile[i].setPosition(sprites.getX()
                    + (sprites.getWidth() / 2) - 6, sprites.getY() - 2);
                    missile[i].setVisible(true);
                    break;
                }
            }
            
        }
    }
    
    public void addExplosion(Sprite sprites) {
        for (int i = 0; i < EXPLOSIONCOUNTS; i++) {
            if (!explosion[i].isVisible()) {
                explosion[i].setFrame(0);
                explosion[i].setPosition(sprites.getX() + sprites.getWidth()
                / 2, sprites.getY() + sprites.getHeight() / 2);
                explosion[i].setVisible(true);
                break;
            }
        }
    }
    
    public void randomPlace(Sprite sprites) {
        if(random.nextInt()% 50 == 0){
            sprites.setPosition(Math.abs(random.nextInt() % getWidth()), Math
                    .abs(random.nextInt() % (getHeight() - 100)) + 25);
        }
        
    }
}

⌨️ 快捷键说明

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