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

📄 bosscanvas.java

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

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

public class BOSSCanvas extends GameCanvas implements Runnable {
    private Display display;// 声明一个显示对象
    
    private Dragon dragonMidlet;// 声明一个主程序的引用
    public Random random;// 声明随机数
    
    Image bossIconImage;
    
    Image playerIconImage;
    
    Image backgroundImage;
    
    // ============声明精灵start===============
    
    LayerManager bossCanvasLayer;
    
    GameSprites boss;// boss
    static final int CORSAIRCOUNTS = 3;
    static final int SPACEBARGECOUNTS = 2;
    static final int SUPERVISORCOUNTS = 2;
    static final int KILLERSATELLITESCOUNTS = 4;
    
    GameSprites [] corsair; //海盗船3艘
    GameSprites [] spaceBarge;  //太空驳船2瘦
    GameSprites [] supervisor;  //监督者2架
    GameSprites [] killerSatellites; //杀手卫星4枚
    
    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 bossThread = null;
    
    public static boolean bossCanvasRunning;// 代表程序的状态
    public static boolean missionBossGameOver;// 代表游戏结束状态
    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 bossHP = 140;//
    
    static int shotDownCounts = 0;
    
    // 状态信息栏的
    int infoBarWidth = getWidth();
    
    static final int infoBarHeight = 20;
    
    // =================需维护的信息end=================
    
    public BOSSCanvas(Display d) {
        super(true);
        setFullScreenMode(true);
        display = d;
        random = new Random();// 随机数生成器
        bossCanvasLayer = new LayerManager();
        
        // =============生成精灵start=============
        try {
            bossIconImage = Image.createImage("/img/missionBoss/bossIcon.png");
            playerIconImage = Image.createImage("/img/system/player.png");
            backgroundImage = Image.createImage("/img/background/space.png");
            
            //创建boss
            boss = new GameSprites(Image
                    .createImage("/img/missionBoss/boss.png"), 90, 70,
                    GameSprites.WRAP, this, false);
            boss.setVisible(false);
            bossCanvasLayer.append(boss);
            
            //创建海盗船
            corsair = new GameSprites[CORSAIRCOUNTS]; //海盗船3艘
            for(int i =0; i <CORSAIRCOUNTS; i++){
                corsair[i]= new GameSprites(Image
                        .createImage("/img/missionBoss/corsair.png"),30,15,GameSprites.HIDE,this,false);
                corsair[i].setVisible(false);
                int corsairSequence[] = {0,0,0,0,1,1,1,1,1,1,1,1,1,1,1};
                corsair[i].setFrameSequence(corsairSequence);
                bossCanvasLayer.append(corsair[i]);
            }
            
            //创建太空驳船
            spaceBarge = new GameSprites[SPACEBARGECOUNTS]; //太空驳船2瘦
            for(int i =0; i <SPACEBARGECOUNTS; i++){
                spaceBarge[i] = new GameSprites(Image
                        .createImage("/img/missionBoss/spaceBarge.png"),16,20,GameSprites.HIDE,this,false);
                spaceBarge[i].setVisible(false);
                int spaceBargeSequence[] = {0,0,0,0,1,1,1,1,1,1,1,1,1,1,1};
                spaceBarge[i].setFrameSequence(spaceBargeSequence);
                bossCanvasLayer.append(spaceBarge[i]);
            }
            
            //创建监督者
            supervisor = new GameSprites[SUPERVISORCOUNTS]; //监督者2架
            for(int i =0; i <SUPERVISORCOUNTS; i++){
                supervisor[i] = new GameSprites(Image
                        .createImage("/img/missionBoss/supervisor.png"),16,20,GameSprites.HIDE,this,false);
                supervisor[i].setVisible(false);
                int supervisorSequence[] = {0,0,0,0,1,1,1,1,1,1,1,1,1,1,1};
                supervisor[i].setFrameSequence(supervisorSequence);
                bossCanvasLayer.append(supervisor[i]);
            }
            
            //创建杀手卫星
            killerSatellites = new GameSprites[KILLERSATELLITESCOUNTS]; //杀手卫星4枚
            for(int i =0; i <KILLERSATELLITESCOUNTS; i++){
                killerSatellites[i] = new GameSprites(Image
                        .createImage("/img/missionBoss/killerSatellites.png"),16,20,GameSprites.HIDE,this,false);
                killerSatellites[i].setVisible(false);
                int killerSatellitesSquence[] = {0,0,0,0,1,1,1,1,1,1,1,1,1,1,1};
                killerSatellites[i].setFrameSequence(killerSatellitesSquence);
                bossCanvasLayer.append(killerSatellites[i]);
            }
            
            //创建导弹
            for (int i = 0; i < MISSILECOUNTS; i++) {
                missile[i] = new GameSprites(Image
                        .createImage("/img/system/missiles.png"), 11, 11,
                        GameSprites.HIDE, this, false);
                missile[i].setVisible(false);
                bossCanvasLayer.append(missile[i]);
            }
            
            //创建爆炸
            for (int i = 0; i < EXPLOSIONCOUNTS; i++) {
                explosion[i] = new Sprite(Image
                        .createImage("/img/system/explosion.png"), 20, 20);// 爆炸在这里用Sprite类来实现。
                explosion[i].setVisible(false);
                bossCanvasLayer.append(explosion[i]);
            }
            
            //创建玩家
            playerPlane = new GameSprites(Image
                    .createImage("/img/system/playerPlane/playerPlane4.png"),
                    25, 20, GameSprites.STOP, this, false);
            playerPlane.setVisible(false);
            bossCanvasLayer.append(playerPlane);
            
        } catch (IOException ioe) {
            System.err.print("yyyyy");
            System.err.println(ioe.getMessage());
            System.err.println("pic error!");
            System.err.println("BOSS Canvas error pic format");
        }
        // =============生成精灵end===============
    }
    
    public void start() {
        init();
        bossThread = new Thread(this);
        bossThread.start();
        
    }
    
    public void init() {
        bossCanvasRunning = false;
        missionBossGameOver = false;
        
        //玩家的
        playerLifeCounts = LIFECOUNTS;// 玩家生命数
        playerHP = 70;// 玩家血
        playerScores = 0;// 玩家分数
        
        // 敌人的
        bossHP = 140;//
        shotDownCounts = 0;
        boss.setVisible(true);
        
        for (int i = 0; i < MISSILECOUNTS; i++) {
            missile[i].setVisible(false);
        }
        for (int i = 0; i < EXPLOSIONCOUNTS; i++) {
            explosion[i].setVisible(false);
        }
        //=========
        for(int i = 0; i < 	CORSAIRCOUNTS ; i++){
            corsair[i].setVisible(false);
        }
        for(int i = 0; i < 	KILLERSATELLITESCOUNTS ; i++){
            killerSatellites[i].setVisible(false);
        }
        for(int i = 0; i < SUPERVISORCOUNTS; i ++){
            supervisor[i].setVisible(false);
        }
        for(int i = 0; i < SPACEBARGECOUNTS; i ++){
            spaceBarge[i].setVisible(false);
        }
        //=============
        playerPlane.setVisible(true);
        playerPlane.setPosition((getWidth() - playerPlane.getWidth()) / 2,
                getHeight() - 40);
    }
    
    public void stop() {
        bossCanvasRunning = false;
    }
    
    public void run() {
        Graphics g = getGraphics();
        long startTime = 0, endTime = 0, difTime = 0;
        int desertRate = 30;// 刷新速度
        Thread currentThread = Thread.currentThread();
        while (currentThread == bossThread) {
            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状态的维护start=========
        if (!boss.isVisible()) {
            addCharacter(boss);
        } else if (boss.isVisible()) {
            boss.move(3, 0);
            boss.nextFrame();
            boss.checkBounds();
            
        }
        // ============对boss状态的维护end===========
        
        //=================对敌机的维护start===============
        //显示海盗船
        if(random.nextInt()% 70 == 0){
            for(int i= 0; i< CORSAIRCOUNTS; i++){
                if(!corsair[i].isVisible()){
                    corsair[i].setPosition(Math.abs(random.nextInt()%getWidth()),20);
                    corsair[i].setVisible(true);
                }
            }
        }
        //维护海盗船
        for(int i= 0; i< CORSAIRCOUNTS; i++){

⌨️ 快捷键说明

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