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

📄 dragoncanvas.java

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

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

public class DragonCanvas extends GameCanvas implements Runnable {
    private Display display; // 定义一个显示引用
    
    // 背景图像
    Image backgroundImage;
    
    // ==========游戏精灵变量start=========
    // 存储动画帧的图像
    Image img;
    
    Image bulletsImg;
    
    Image explosionImg;
    
    Image playerPlaneImg;
    
    Image clayerImg;
    
    Image suicidorImg;
    
    // 动画精灵对象
    Sprite dragonMonster;// 龙
    
    Sprite[] missile; // 子弹
    
    Sprite[] explosion;// 爆炸
    
    Sprite playerPlane; // 玩家飞机
    
    Sprite[] suicidor;// 自杀机
    
    Sprite[] clayer;// 粘土怪
    
    // 图层管理器
    private LayerManager layer;
    
    // 定义导弹数量
    static final int MISSILECOUNT = 20;
    
    // 定义各种敌人数量
    static final int CLAYERCOUNTS = 2;// 粘土怪
    
    static int clayerXspeed = 2;
    
    static int clayerYspeed = 0;
    
    static final int SUICIDORCOUNTS = 4;// 自杀机
    
    // 定义爆炸数量
    static final int EXPLOSIONCOUNTS = 4;
    
    // 定义精灵动作
    static final int WRAP = 1;// 折返
    
    static final int STOP = 2;// 停止
    
    static final int HIDE = 3;// 隐藏
    
    static final int BOUNCE = 4;// 反弹
    
    // =========游戏精灵变量end ===========
    int frameWidth = 50;// 每帧图像的宽度
    
    int frameHeight = 25;// 每帧图像的高度
    
    // 如果这里给的参数和图像的不一 会产生这样的错误
    // java.lang.IllegalArgumentException
    
    // ================游戏精灵速度变量start=============
    int dragonXspeed = 0;// 龙精灵移动速度x方向
    int dragonYspeed = 0;// 龙精灵移动速度y方向
    
    int missileXspeed = 0;// 炸弹精灵速度x方向
    
    int missileYspeed = 2;// 炸弹精灵速度y方向
    
    int playerPlaneXspeed = 0;// 玩家精灵速度x方向
    
    int playerPlaneYspeed = 0;// 玩家精灵速度y方向
    
    static final int playerMissileXspeed = 0;// 玩家导弹速度x 方向
    
    static final int playerMissileYspeed = -5;// 玩家导弹速度y 方向
    
    // ===============游戏精灵速度变量end================
    
    // =================需维护的信息start===============
    public static Thread dragonThread = null;
    
    public static boolean dragonCanvasRunning;// 代表程序的状态
    
    public static boolean missionOneGameOver;// 代表游戏结束状态
    
    boolean isWin;// 代表游戏结果状态
    
    int stringShowCounts; // 代表在刚开始很短的时间内可以显示字符
    
    // 玩家的
    static final int LIFECOUNTS = 3;
    int playerLifeCounts = LIFECOUNTS;// 玩家生命数
    
    static int playerHP = 50;// 玩家血
    
    static int playerScores = 0;// 玩家分数
    
    static int levels = 1;// 玩家等级
    
    // 敌人的
    static int bossHP = 100;//
    
    static int shotDownCounts = 0;
    
    // 状态信息栏的
    int infoBarWidth = getWidth();
    
    static final int infoBarHeight = 20;
    
    // =================需维护的信息end=================
    
    // =============游戏图形变量start=========
    Image playerImg;
    Image dragonIconImg;
    // =============游戏图形变量end===========
    
    private Random random;
    Dragon dragon;// midp的主类
    GameMenuList menuList;
    public Graphics g; //声明画笔
    public DragonCanvas(Display d) {
        super(true);
        
        //dragon = new Dragon();// 生成Dragon的对象
       // menuList = new GameMenuList(dragon);
        display = d;
        setFullScreenMode(true);
        g = getGraphics();
        
        
        /**
         * 装载图片资源
         */
        // =========载入图片资源start=============
        try {
            // system图库
            playerImg = Image.createImage("/img/system/player.png");
            bulletsImg = Image.createImage("/img/system/missiles.png");
            explosionImg = Image.createImage("/img/system/explosion.png");
            playerPlaneImg = Image
                    .createImage("/img/system/playerPlane/playerPlane1.png");
            
            // missionOne图库
            img = Image.createImage("/img/missionOne/dragon.png");
            clayerImg = Image.createImage("/img/missionOne/clayer.png");
            suicidorImg = Image.createImage("/img/missionOne/suicidor.png");
            dragonIconImg = Image.createImage("/img/missionOne/dragonIcon.png");
            
            // background图库
            backgroundImage = Image.createImage("/img/background/plain.png");
        } catch (IOException e) {
            System.err.print(e.getMessage());
            System.err.print(" error + @@@@@@@@@@@@");
        }
        // =========载入图片资源end=============
        
        
        /**
         * 生成精灵对象
         */
        // =========生成精灵对象start============
        layer = new LayerManager();// 生成图层管理器对象
        
        // 生成龙精灵对象 数量1只
        // =====================================
        dragonMonster = new Sprite(img, frameWidth, frameHeight);
        int x = (getWidth() - frameWidth) / 2;
        int y = (getHeight() - frameHeight) / 2;
        dragonMonster.setPosition(x, y);// 设置初始位置
        layer.append(dragonMonster);
        // =====================================
        
        // =============生成2个粘土怪start=========
        clayer = new Sprite[CLAYERCOUNTS];
        for (int i = 0; i < CLAYERCOUNTS; i++) {
            clayer[i] = new Sprite(clayerImg, 20, 21);
            int[] sequence = { 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 4, 4, 3, 3,
            2, 2, 1, 1 };
            clayer[i].setFrameSequence(sequence);
            clayer[i].setVisible(false);
            layer.append(clayer[i]);
        }
        // =============生成2个粘土怪end===========
        
        // ==============生成4个自杀机start========
        suicidor = new Sprite[SUICIDORCOUNTS];
        for (int i = 0; i < SUICIDORCOUNTS; i++) {
            suicidor[i] = new Sprite(suicidorImg, 14, 18);
            suicidor[i].setVisible(false);
            layer.append(suicidor[i]);
        }
        // ==============生成4个自杀机end==========
        
        // 生成20个导弹对象
        // =====================================
        missile = new Sprite[MISSILECOUNT];
        for (int i = 0; i < MISSILECOUNT; i++) {
            missile[i] = new Sprite(bulletsImg, 11, 11);
            missile[i].setVisible(false);
            layer.append(missile[i]);
        }
        // =====================================
        
        // 生成爆炸精灵对象
        // ======================================
        explosion = new Sprite[EXPLOSIONCOUNTS];// 数组大小必须给定
        for (int i = 0; i < EXPLOSIONCOUNTS; i++) {
            explosion[i] = new Sprite(explosionImg, 20, 20);
            explosion[i].setVisible(false);
            layer.append(explosion[i]);
        }
        // ======================================
        
        // 生成玩家精灵对象
        // ======================================
        playerPlane = new Sprite(playerPlaneImg, 17, 20);
        playerPlane.setPosition((getWidth() - playerPlane.getWidth()) / 2,
                getHeight() - 40);
        layer.append(playerPlane);
        // =====================================
        
        // =========生成精灵对象end============
        
        random = new Random();// 生成随机计数器
        
       
        start();// 启动第一关游戏主线程
       
        
    }
    
    
    /**
     * 启动线程
     *
     */
    public void start() {
        init();
        dragonThread = new Thread(this);
        dragonThread.start();
    }
    
    public  void init() {
        dragonCanvasRunning = false; // 代表程序的状态
        missionOneGameOver = false; // 代表游戏结束状态
        isWin = false; // 代表游戏结果状态
        
        stringShowCounts = 0; // 代表在刚开始很短的时间内可以显示字符
        
        // 玩家的
        playerLifeCounts = LIFECOUNTS; // 玩家生命数
        playerHP = 50; // 玩家血
        playerScores = 0; // 玩家分数
        
        // 敌人的
        bossHP = 100;//
        shotDownCounts = 0;
        
        // 状态信息栏的
        dragonMonster.setVisible(true);// 龙
        playerPlane.setVisible(true);
        for (int i = 0; i < 4; i++) {
            suicidor[i].setVisible(false);
            clayer[i].setVisible(false);
            missile[i].setVisible(false);
            explosion[i].setVisible(false);
            break;
        }
    }

⌨️ 快捷键说明

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