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

📄 oceancanvas.java

📁 一个基于JAVA的手机射击类游戏``有过关模式
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package jsky;

import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import java.io.*;
import java.util.*;

public class OceanCanvas extends GameCanvas implements
        Runnable {
    private Display display;// 声明一个显示对象
    private Dragon dragonMidlet;// 声明一个主程序的引用
    public Random random;// 声明随机数
    
    Image backgroundImage; // 背景
    
    Image acalephIconImage;
    
    Image playerIconImage;
    
    // ============声明精灵start===============
    LayerManager oceanCanvasLayer;
    
    GameSprites submarine;// 潜水艇
    
    GameSprites acaleph1; // 水母1
    boolean showAcaleph1;
    
    GameSprites acaleph2; // 水母2
    boolean showAcaleph2;
    GameSprites mine; // 水雷
    
    GameSprites waterBoy; // 水娃
    
    static final int MISSILECOUNTS = 30;
    
    static final int EXPLOSIONCOUNTS = 7;
    
    GameSprites[] missile = new GameSprites[MISSILECOUNTS]; // 导弹
    
    Sprite[] explosion = new Sprite[EXPLOSIONCOUNTS]; // 爆炸
    
    GameSprites playerPlane; // 玩家
    
    // ============声明精灵end=================
    
    // =================需维护的信息start===============
    public static Thread oceanThread = null;
    public static boolean oceanCanvasRunning;// 代表程序的状态
    
    public static boolean missionThreeGameOver;// 代表游戏结束状态
    
    boolean isWin;// 代表游戏结果状态
    
    int stringShowCounts; // 代表在刚开始很短的时间内可以显示字符
    
    // 玩家的
    static final int LIFECOUNTS = 3;
    static int playerLifeCounts = LIFECOUNTS;// 玩家生命数
    
    static int playerHP = 70;// 玩家血
    
    static int playerScores = 0;// 玩家分数
    
    static int levels = 1;// 玩家等级
    
    // 敌人的
    static int acaleph1HP = 70;//
    
    static int acaleph2HP = 70;
    
    static int shotDownCounts = 0;
    
    // 状态信息栏的
    int infoBarWidth = getWidth();
    
    static final int infoBarHeight = 20;
    
    // =================需维护的信息end=================
    
    public OceanCanvas(Display d) {
        super(true);
        setFullScreenMode(true);
        display = d;
        random = new Random();// 随机数生成器
        oceanCanvasLayer = new LayerManager();
        
        // =============生成精灵start=============
        try {
            acalephIconImage = Image
                    .createImage("/img/missionThree/acalephIcon.png");
            playerIconImage = Image.createImage("/img/system/player.png");
            backgroundImage = Image.createImage("/img/background/ocean.png");
            
            submarine = new GameSprites(Image
                    .createImage("/img/missionThree/submarine.png"), 48, 23,
                    GameSprites.WRAP, this, false);
            acaleph1 = new GameSprites(Image
                    .createImage("/img/missionThree/acaleph.png"), 30, 43,
                    GameSprites.WRAP, this, false);
            acaleph2 = new GameSprites(Image
                    .createImage("/img/missionThree/acaleph.png"), 30, 43,
                    GameSprites.WRAP, this, false);
            mine = new GameSprites(Image
                    .createImage("/img/missionThree/mine.png"), 16, 16,
                    GameSprites.HIDE, this, false);
            waterBoy = new GameSprites(Image
                    .createImage("/img/missionThree/waterBoy.png"), 39, 45,
                    GameSprites.HIDE, this, false);
            for (int i = 0; i < MISSILECOUNTS; i++) {
                missile[i] = new GameSprites(Image
                        .createImage("/img/system/missiles.png"), 11, 11,
                        GameSprites.HIDE, this, false);
            }
            for (int i = 0; i < EXPLOSIONCOUNTS; i++) {
                explosion[i] = new Sprite(Image
                        .createImage("/img/system/explosion.png"), 20, 20);// 爆炸在这里用Sprite类来实现。
            }
            playerPlane = new GameSprites(Image
                    .createImage("/img/system/playerPlane/playerPlane3.png"),
                    17, 20, GameSprites.STOP, this, false);
            playerPlane.setPosition((getWidth() - playerPlane.getWidth()) / 2,
                    getHeight() - 40);
            
        } catch (IOException ioe) {
            System.err.print("yyyyy");
            System.err.println("OceanCanvas pic error");
        }
        int[] submarineSequence = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1 };
        submarine.setFrameSequence(submarineSequence);
        submarine.setVisible(false);
        oceanCanvasLayer.append(submarine);
        
        int[] acaleph1Sequence = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1 };
        acaleph1.setFrameSequence(acaleph1Sequence);
        acaleph1.setVisible(false);
        oceanCanvasLayer.append(acaleph1);
        
        int[] acaleph2Sequence = { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
        0 };
        acaleph2.setFrameSequence(acaleph2Sequence);
        acaleph2.setVisible(false);
        oceanCanvasLayer.append(acaleph2);
        
        int[] mineSequence = { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
        1, 1 };
        mine.setFrameSequence(mineSequence);
        mine.setVisible(false);
        oceanCanvasLayer.append(mine);
        
        int[] waterBoySequence = { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
        1 };
        waterBoy.setFrameSequence(waterBoySequence);
        waterBoy.setVisible(false);
        oceanCanvasLayer.append(waterBoy);
        
        for (int i = 0; i < MISSILECOUNTS; i++) {
            missile[i].setVisible(false);
            oceanCanvasLayer.append(missile[i]);
        }
        for (int i = 0; i < EXPLOSIONCOUNTS; i++) {
            explosion[i].setVisible(false);
            oceanCanvasLayer.append(explosion[i]);
        }
        
        playerPlane.setVisible(false);
        oceanCanvasLayer.append(playerPlane);
        
        // =============生成精灵end===============
    }
    
    public void start() {
        init();
        oceanThread = new Thread(this);
        oceanThread.start();
        
    }
    
    public void init() {
        oceanCanvasRunning = false;// 代表程序的状态
        missionThreeGameOver = false;// 代表游戏结束状态
        isWin = false;// 代表游戏结果状态
        
        stringShowCounts = 0; // 代表在刚开始很短的时间内可以显示字符
        
        // 玩家的
        playerLifeCounts = LIFECOUNTS;// 玩家生命数
        playerHP = 70;// 玩家血
        playerScores = 0;// 玩家分数
        
        // 敌人的
        showAcaleph1 = false;
        showAcaleph2 = false;
        acaleph1HP = 70;
        acaleph2HP = 70;
        shotDownCounts = 0;
        
        submarine.setVisible(false);// 潜水艇
        acaleph1.setVisible(false); // 水母1
        acaleph2.setVisible(false); // 水母2
        mine.setVisible(false); // 水雷
        waterBoy.setVisible(false); // 水娃
        
        for (int i = 0; i < MISSILECOUNTS; i++) {
            missile[i].setVisible(false);
        }
        for (int i = 0; i < EXPLOSIONCOUNTS; i++) {
            explosion[i].setVisible(false);
        }
    }
    
    
    
    public void stop() {
        oceanCanvasRunning = false;
    }
    
    public void run() {
        Graphics g = getGraphics();
        long startTime = 0, endTime = 0, difTime = 0;
        int desertRate =30;// 刷新速度
        Thread currentThread = Thread.currentThread();
        while (currentThread == oceanThread) {
            startTime = System.currentTimeMillis();
            gameUpdate();// 游戏状态的修改
            drawIt(g);// 绘制游戏
            endTime = System.currentTimeMillis();
            difTime = endTime - startTime;
            if (difTime < desertRate) {
                try {
                    Thread.sleep(desertRate - difTime);
                } catch (InterruptedException e) {
                    stop();
                }
            }
        }
        
    }
    
    protected void gameUpdate() {
        stringShowCounts++;
        
        //================显示boss================
        //水母1
        if(!showAcaleph1){
            if (!acaleph1.isVisible()) {
                addCharacter(acaleph1);
            }
            showAcaleph1 = true;
        }
        //水母2
        if(!showAcaleph2){
            if (!acaleph2.isVisible()) {
                addCharacter(acaleph2);
            }
            showAcaleph2 = true;
        }
        
        //================显示boss=================
        
        //===========维护boss的状态start==============
        //水母1
        if (acaleph1.isVisible()){
            acaleph1.move(-1, 0);
            acaleph1.nextFrame();
            acaleph1.checkBounds();
        }
        //随机变换水母1和水母2的位置
        if(random.nextInt()%150 == 0){
            randomPlace(acaleph1);
            randomPlace(acaleph2);
        }
        //水母2
        if (acaleph2.isVisible()){
            acaleph2.move(1, 0);
            acaleph2.nextFrame();
            acaleph2.checkBounds();
        }
        //===========维护boss的状态end================
        
        //=============随机增加怪物start================
        //潜水艇
        if(random.nextInt()%26 == 0){
            if(!submarine.isVisible()) {
                addCharacter(submarine);
            }
        }
        //水雷
        if(random.nextInt()%28 == 0){
            if (!mine.isVisible()) {
                addCharacter(mine);
            }
        }
        //水娃
        if(random.nextInt()%30 == 0){
            if(!waterBoy.isVisible()) {
                addCharacter(waterBoy);
            }
        }
        //=============随机增加怪物start================
        
        //=============维护怪物状态start================
        //潜水艇
        if (submarine.isVisible()){
            submarine.move(-1, 0);
            submarine.nextFrame();
            submarine.checkBounds();
        }
        //水雷
        if(mine.isVisible()){
            mine.move(0, 6);
            mine.nextFrame();
            mine.checkBounds();
        }
        //水娃
        if (waterBoy.isVisible()){
            waterBoy.move(-2, 0);
            waterBoy.nextFrame();
            waterBoy.checkBounds();
        }
        //=============维护怪物状态end================
        
        //================对玩家状态的维护start==============
        if (!playerPlane.isVisible()) {
            addCharacter(playerPlane);
        } else if (playerPlane.isVisible()) {
            int keyStates = getKeyStates();
            if ((keyStates & LEFT_PRESSED) != 0) {
                playerPlane.move(-2, 0);
                playerPlane.nextFrame();
            } else if ((keyStates & RIGHT_PRESSED) != 0) {
                playerPlane.move(2, 0);
                playerPlane.nextFrame();
            }
            //返回菜单
            else if((keyStates & UP_PRESSED) != 0){
                System.out.println(" 3.game interrupted! back to menu!");
                missionThreeGameOver = false;
                oceanThread = null;
                isWin = false;
                Dragon.MISSIONCOUNTS = Dragon.MENULIST;
                Dragon.showMenu = true;
            } else if ((keyStates & FIRE_PRESSED) != 0) {
                if(random.nextInt()%2 == 0){
                    for (int i = 0; i < MISSILECOUNTS; i++) {
                        if (!missile[i].isVisible()) {
                            addMissile(playerPlane);
                            break;
                        }
                    }
                }
            }
            playerPlane.checkBounds();
        }
        //================对玩家状态的维护end==============
        
        
        for (int i = 0; i < MISSILECOUNTS; i++) {
            if(!missile[i].isVisible()){
                if(random.nextInt()% 20==0){
                    if (acaleph1.isVisible()) {
                        addMissile(acaleph1);
                        break;
                    }
                    
                }else if(random.nextInt()% 25==0){
                    if (acaleph2.isVisible()) {
                        addMissile(acaleph2);
                        break;
                    }
                }else if(random.nextInt()% 30 == 0){
                    if (submarine.isVisible()) {
                        addMissile(submarine);
                        break;
                    }

⌨️ 快捷键说明

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