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

📄 desertcanvas.java

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

import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import java.io.*;
import java.util.*;
public class DesertCanvas extends GameCanvas implements  Runnable{
    private Display display;//声明一个显示对象
    private Dragon dragonMidlet;//声明一个主程序的引用
    public Random random;//声明随机数
    
    Image boss1IconImage;
    Image boss2IconImage;
    Image playerIconImage;
    Image backgroundImage; //背景
    
    //============声明精灵start===============
    LayerManager desertCanvasLayer;
    GameSprites bigMouthMonster;//大嘴怪boss1
    boolean showBigMouthMonster;
    GameSprites toLeftMonster; //向左走怪boss2
    boolean showToLeftMonster;
    static final int AEROCRAFTCOUNTS = 3;
    GameSprites []aeroCraft;  //飞行器
    GameSprites eyeballMonster; //眼球怪
    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 desertThread = null;
    public static boolean desertCanvasRunning;//代表程序的状态
    public static boolean missionTwoGameOver;//代表游戏结束状态
    boolean isWin;//代表游戏结果状态
    boolean isLose;
    
    int stringShowCounts; //代表在刚开始很短的时间内可以显示字符
    
    //玩家的
    static final int LIFECOUNTS = 3;
    private int playerLifeCounts = LIFECOUNTS;//玩家生命数
    static int playerHP = 70;//玩家血
    static int playerScores =0;//玩家分数
    static int levels =1;//玩家等级
    //敌人的
    static int bigMouthMonsterHP = 70;//
    static int toLeftMonsterHP = 70;
    static int shotDownCounts =0;
    //状态信息栏的
    int infoBarWidth = getWidth();
    static final int infoBarHeight = 20;
    //=================需维护的信息end=================
    
    public DesertCanvas(Display d){
        super(true);
        setFullScreenMode(true);
        display = d;
        //dragonMidlet = new Dragon();
        random = new Random();//随机数生成器
        desertCanvasLayer = new LayerManager();
        
        //=============生成精灵start=============
        try{
            boss1IconImage = Image.createImage("/img/missionTwo/boss1Icon.png");
            boss2IconImage = Image.createImage("/img/missionTwo/boss2Icon.png");
            playerIconImage = Image.createImage("/img/system/player.png");
            backgroundImage = Image.createImage("/img/background/desert.png");
            
            bigMouthMonster = new GameSprites(Image.createImage("/img/missionTwo/bigMouthMonster.png"),
                    20,25,GameSprites.WRAP,this,false);
            toLeftMonster = new GameSprites(Image.createImage("/img/missionTwo/toLeftMonster.png"),
                    30,25,GameSprites.WRAP,this,false);
            aeroCraft = new GameSprites[AEROCRAFTCOUNTS] ;
            for(int i =0; i <AEROCRAFTCOUNTS; i++){
                aeroCraft[i] = new GameSprites(Image.createImage("/img/missionTwo/aeroCraft.png"),
                        16,13,GameSprites.HIDE,this,false);
            }
            
            eyeballMonster = new GameSprites(Image.createImage("/img/missionTwo/eyeballMonster.png"),
                    35,20,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/playerPlane2.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("DesertCanvas pic error");
        }
        int []bigMouthMonsterSequence = {0,0,0,0,0,0,0,0,1,1,1,1,1,1,1};
        bigMouthMonster.setFrameSequence(bigMouthMonsterSequence);
        bigMouthMonster.setVisible(false);
        desertCanvasLayer.append(bigMouthMonster);
        
        int []toLeftMonsterSequence = {0,0,0,0,0,0,0,0,1,1,1,1,1,1};
        toLeftMonster.setFrameSequence(toLeftMonsterSequence);
        toLeftMonster.setVisible(false);
        desertCanvasLayer.append(toLeftMonster);
        for(int i =0; i <AEROCRAFTCOUNTS; i++){
            int []aeroCraftSequence = {0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1};
            aeroCraft[i].setFrameSequence(aeroCraftSequence);
            aeroCraft[i].setVisible(false);
            desertCanvasLayer.append(aeroCraft[i]);
        }
        
        
        int []eyeballMonsterSequence = {0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1};
        eyeballMonster.setFrameSequence(eyeballMonsterSequence);
        eyeballMonster.setVisible(false);
        desertCanvasLayer.append(eyeballMonster);
        
        for(int i=0; i<MISSILECOUNTS; i++){
            missile[i].setVisible(false);
            desertCanvasLayer.append(missile[i]);
        }
        for(int i=0; i<EXPLOSIONCOUNTS; i++){
            explosion[i].setVisible(false);
            desertCanvasLayer.append(explosion[i]);
        }
        
        playerPlane.setVisible(false);
        desertCanvasLayer.append(playerPlane);
        
        
        //=============生成精灵end===============
    }
    
    
    public synchronized void start(){
        init();
        desertThread = new Thread(this);
        desertThread.start();
        
    }
    public void init(){
        
        desertCanvasRunning = false;//代表程序的状态
        missionTwoGameOver = false;//代表游戏结束状态
        isWin = false;//代表游戏结果状态
        stringShowCounts = 0; //代表在刚开始很短的时间内可以显示字符
        
        //玩家的
        playerLifeCounts = LIFECOUNTS;
        playerHP = 70;//玩家血
        playerScores =0;//玩家分数
        
        //敌人的
        showBigMouthMonster = false;
        showToLeftMonster = false;
        bigMouthMonsterHP = 70;//
        toLeftMonsterHP = 70;
        shotDownCounts =0;
        bigMouthMonster.setVisible(false);//大嘴怪boss1
        toLeftMonster.setVisible(false); //向左走怪boss2
        for(int i =0; i <AEROCRAFTCOUNTS; i++){
            aeroCraft[i].setVisible(false); //飞行器
        }
        
        eyeballMonster.setVisible(false); //眼球怪
        
        playerPlane.setVisible(true);
        
        for (int i = 0; i < MISSILECOUNTS; i++) {
            missile[i].setVisible(false);
            break;
        }
        for (int i = 0; i < EXPLOSIONCOUNTS; i++) {
            explosion[i].setVisible(false);
            break;
        }
    }
    
    
    public  void stop(){
        desertThread = null;
        System.out.println("game stoping >>>>");
    }
    
    public void run(){
        Graphics g = getGraphics();
        long startTime = 0, endTime = 0, difTime = 0;
        int desertRate =30;//刷新速度
        Thread currentThread = Thread.currentThread();
        while(currentThread == desertThread){
            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++;
        //============ 大嘴怪==========
        if(!showBigMouthMonster){
            if(!bigMouthMonster.isVisible()){
                addCharacter(bigMouthMonster);
            }
            showBigMouthMonster = true;
        }
        
        if(bigMouthMonster.isVisible()){
            bigMouthMonster.move(1,0);
            bigMouthMonster.nextFrame();
            bigMouthMonster.checkBounds();
        }
        //==============向左走=============
        if(!showToLeftMonster){
            if(!toLeftMonster.isVisible()){
                addCharacter(toLeftMonster);
            }
            showToLeftMonster = true;
        }
        
        if(toLeftMonster.isVisible()){
            toLeftMonster.move(-1,0);
            toLeftMonster.nextFrame();
            toLeftMonster.checkBounds();
        }
        
        for(int i =0; i <AEROCRAFTCOUNTS; i++){
            //显示飞行器
            if(!aeroCraft[i].isVisible()){
                if(random.nextInt()%40==0){
                    addCharacter(aeroCraft[i]);
                }
            }
            
        }
        
        for(int i =0; i <AEROCRAFTCOUNTS; i++){
            //维护飞行器
            if(aeroCraft[i].isVisible()){
                aeroCraft[i].move(0,5);
                aeroCraft[i].nextFrame();
                aeroCraft[i].checkBounds();
            }
        }
        //显示眼球怪
        if(!eyeballMonster.isVisible()){
            if(random.nextInt()%35 == 0){
                addCharacter(eyeballMonster);
            }
        }
        
        //维护眼球怪
        if(eyeballMonster.isVisible()){
            eyeballMonster.move(2,0);
            eyeballMonster.nextFrame();
            eyeballMonster.checkBounds();
        }
        
        
        //===================玩家=================
        if(!playerPlane.isVisible()){
            addCharacter(playerPlane);
        } else if(playerPlane.isVisible()){
            int keyStates = getKeyStates();
            if((keyStates & LEFT_PRESSED)!= 0){
                playerPlane.move(-4,0);
                playerPlane.nextFrame();
            } else if((keyStates & RIGHT_PRESSED)!= 0){
                playerPlane.move(4,0);
                playerPlane.nextFrame();
            }
            //返回菜单
            else if((keyStates & UP_PRESSED) != 0){
                System.out.println(" 2.game interrupted! back to menu!");
                missionTwoGameOver = false;
                desertThread = 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()) {
                            missile[i].setFrame(16);
                            missile[i].setPosition(playerPlane.getX() + 3, playerPlane
                                    .getY() - 1);
                            missile[i].setVisible(true);
                            break;
                        }
                    }
                }
            }
            playerPlane.checkBounds();
        }
        
        //===============随机增加导弹start==============
        
        //增加大嘴怪的导弹
        if(random.nextInt()% 25 == 0){
            for(int i =0; i<MISSILECOUNTS; i++ ){
                if(!missile[i].isVisible()){
                    addMissile(bigMouthMonster);
                    break;
                }
            }
        }
        //增加向左走的导弹
        if(random.nextInt()% 30 == 0){
            for(int i =0; i<MISSILECOUNTS; i++ ){
                if(!missile[i].isVisible()){
                    addMissile(toLeftMonster);
                    break;
                }
            }
        }
        //增加眼球怪的导弹
        if(random.nextInt()% 26 == 0){
            for(int i =0; i<MISSILECOUNTS; i++ ){
                if(eyeballMonster.isVisible()){
                    if(!missile[i].isVisible()){

⌨️ 快捷键说明

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