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

📄 scenemodel.java

📁 格斗类小游戏 没什么好说的了 真的真的
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
//package bushfighting;

import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.Graphics;
import java.util.Random;
/**
 * 这个类用于统一处理游戏场景的行为
 * 例如人物的动作等等
 */

public class SceneModel {
    private Image[] mBackgroundImage = new Image[3]; //背景的图片
    private Image mPassImage = null; //过关的提示图片
    private Image mPlayerHPImage = null;
    private Image mCockHPImage = null;
    private Image[] mCabinetImage = new Image[2];//药箱的图片
    private Image[] mSceneImages = new Image[4];//场景图片
    private Image[] mBulletImages = null;//子弹的图片
    private Image[] mFireBulletImages=null;//火箭图片
    private Image[] mFramesImage = new Image[2];//两个框的图片
    private Image mBBImg=null;
    private Image mBFImg=null;
    
    private Image mNumImage = null;
    private int mFramesPosiX = 0;
    private int mFramesPosiY = 0;
    private int mFramesCount = 0;
    private boolean bShowFrames = false;
    
    
    private Character[] mPawns = null;//其中第一个位置用于记录敌兵头目
    private Character mPreCock=null;
    private Character mCock = null;
    private Character mPlayer = null;//场景中的游戏玩家
    
    private Image[] mPlayerImages = null;//主角小爱的图片
    private int[] mPlayerFrames = {3,3,3,3,2,2,2,2,1};
    private Image[][] mPawnImages = new Image[3][];//敌兵的图片
    private int[] mPawnFrames = {3,3,3,3,1,1,2,2};
    private Image[] mCockImages = null;//头目的图片
    private int[] mCockFrames = {3,3,3,3,1,1,2,2};
    
    private SceneUnit[] mBullets = null;//场景中的子弹
    private SceneUnit[] mEnemyBullets=null;//敌人的子弹
    private SceneUnit[] mBBlood=null;
    private SceneUnit[] mBFloor=null;
    private SceneUnit[] mUpScenes = null;//场景上面一排中的物品,例如树木,屋子等
    private SceneUnit[] mDownScenes = null;//场景中下面一排的物品
    private SceneUnit[] mCabinets = new SceneUnit[50];//场景中的药箱
    
    private int mSceneIndex = 0;//当前的场景号
    private int mLevel = 3;//当前的关号
    
    private static final int[] mSceneCounts = {14,16,18,20,22,24};//每一关的场景显示屏数目
    private static final int[] mPawnLife = {1,2,3,4,5,6};
    private static final int[] mCockLife = {50,60,70,80,90,100};//每一关敌兵头目的生命值
    private static final int[] mAttackLife ={5,5,6,6,8,8};//敌兵头目攻击时候的消耗血的多少
    
    private final int mSceneWidth,mSceneHeight;
    protected static final int MAX_PAWN = 16 ;//场景中一次最多的敌兵数目
    protected static final int MAX_BULLET = 6;//场景中最多的子弹数目
    protected static final int MAX_ENEMY_BULLET=6;//场景中最多的敌人子弹数目
    protected static final int MAX_SCENEUNIT = 10;//场景中的每一边最多的物品个数
    protected static final int HP_LENGTH = 35;//HP值条的长度
    private Random mRandom = new Random(System.currentTimeMillis());
    
    private Image mBufferImage = null;
    private Graphics mBufferGraphics = null;
    private Score mScore = null;//用于记录玩家的得分情况
    private int mKillPawn = 0;//杀死的敌兵个数
    private static final int BORDER_UP = 123;//可以活动的区域的上边界
    private static final int BORDER_DOWN = 198;//可活动的下边界
    
    private int[][] background = {{0}};
    private int[][] enemys = {{HF.DADAO,HF.CIKE,HF.GONGJIAN},{HF.CHANGMAO,HF.JIANDUN,HF.GONGJIAN},{HF.DADAO,HF.CIKE,HF.JIANDUN},{HF.JIANDUN,HF.GONGJIAN,HF.CHANGMAO},{HF.CIKE,HF.CHANGMAO,HF.DADAO}};
    
    //public boolean isTalk=false;
    
    public int fireNum=0;//火箭数量
    public boolean fireEmpty=true;//火箭是否用完
    
    public Media back = new Media("/sound/back.mid","audio/midi",true);
    public Media win = new Media("/sound/win.mid","audio/midi",false);
    public Media lose = new Media("/sound/lose.mid","audio/midi",false);
    
    //加入的数据
    public int hpSplashTime;//血槽闪动的帧数
    public boolean beginLevel;
    public boolean beginBoos;
    //
    public SceneModel(int width,int height,Score score) {
        mSceneWidth = width;
        mSceneHeight = height;
        mScore = score;
        mBufferImage = Image.createImage(width*2,height);
        if(mBufferImage != null){
            mBufferGraphics = mBufferImage.getGraphics();
        }
        init();
    }
    
    //初始化场景中的数据
    private void init() {
        try{
            mPlayerImages = HF.loadImages("player",9);
            mBulletImages = HF.loadImages("bullet",2);
            mFireBulletImages = HF.loadImages("firearrow",2);
            mCabinetImage[0] = HF.loadImage("cabinet.png");
            mCabinetImage[1] = HF.loadImage("arrow.png");
            mPlayerHPImage = HF.loadImage("playerHP.png");
            //mCockHPImage = HF.loadImage("cockHP.png");
            mPassImage = HF.loadImage("pass.png");
            mFramesImage[0] = HF.loadImage("FightNameFrame.png");
            mFramesImage[1] = HF.loadImage("FightPassFrame.png");
            mNumImage = HF.loadImage("num.png");
            mBBImg=HF.loadImage("bb.png");
            mBFImg=HF.loadImage("bf.png");
        } catch(Exception e){
            System.out.println("Error loading scene imags");
            //e.printStackTrace();
        }
        mPlayer = new Character(mPlayerFrames);
        mPlayer.setImages(mPlayerImages);
        //创建敌兵的数组
        mPawns = new Character[MAX_PAWN];
        
        //创建场景中的子弹数组
        mBullets = new SceneUnit[MAX_BULLET];
        mBBlood = new SceneUnit[MAX_ENEMY_BULLET+MAX_BULLET];
        mBFloor = new SceneUnit[MAX_BULLET];
        for(int i=0;i<MAX_BULLET;i++){
            mBullets[i] = new SceneUnit();
        }
        mEnemyBullets = new SceneUnit[MAX_ENEMY_BULLET];
        for(int i=0;i<MAX_ENEMY_BULLET;i++) {
            mEnemyBullets[i] = new SceneUnit();
        }
        for(int i=0;i<MAX_ENEMY_BULLET+MAX_BULLET;i++){
            mBBlood[i] = new SceneUnit();
            mBBlood[i].mUsed=false;
        }
        for(int i=0;i<MAX_BULLET;i++){
            mBFloor[i] = new SceneUnit();
            mBFloor[i].mUsed=false;
        }
        //创建场景中的布景对象
        mUpScenes = new SceneUnit[MAX_SCENEUNIT];
        mDownScenes = new SceneUnit[MAX_SCENEUNIT];
        for(int i=0;i<MAX_SCENEUNIT;i++){
            mUpScenes[i] = new SceneUnit();
            mDownScenes[i] = new SceneUnit();
        }
        //场景中的药箱
        for(int i=0;i<50;i++){
            mCabinets[i] = new SceneUnit();
        }
    }
    
    //重置场景的状态
    private void reset() {
        mSceneIndex = 0;
        mKillPawn = 0;
        for(int i=0;i<MAX_BULLET;i++){
            mBullets[i].reset();
        }
        for(int i=0;i<MAX_PAWN;i++){
            mPawns[i].reset();
            mPawns[i].setState(HF.STATE_MOVE_LEFT);
        }
        for(int i=0;i<MAX_SCENEUNIT;i++){
            mDownScenes[i].reset();
            mUpScenes[i].reset();
        }
        for(int i=0;i<2;i++){
            mCabinets[i].reset();
        }
    }
    
    //加载指定的关
    private int[][] scene={{1,2,3,4},{5,6,7,3},{1,2,3,4},{11,6,9,8},{10,2,3,5}};
    protected void loadLevel(int level) {
        //reset();//重置场景的数据信息
        try{
            if (level==3) level=4;
            mLevel = level;
            for(int i=0;i<3;i++)
                mPawnImages[i] = HF.loadImages("enemy"+enemys[level-1][i]+"_", 8); //加载敌兵的图片
            mCockImages = HF.loadImages("cock"+level+"_", 8);
            mCockHPImage = HF.loadImage("cockHP_"+level+".png");
            mPawns = new Character[MAX_PAWN];
            switch(mLevel) {
                case 1:
                    mPawns[0] = new Character(mCockFrames);//创建敌兵头目,让其指向第一个敌兵数组的位置
                    mPawns[1] = new Character(mCockFrames);//创建敌兵小头目,让其指向第二个敌兵数组的位置
                    mPawns[0].setImages(mCockImages);
                    mPawns[1].setImages(mCockImages);
                    mCock = mPawns[0];
                    mPreCock=mPawns[1];
                    break;
                case 2:
                    int [] t = {3,3,3,3,1,1,3,3};
                    mPawns[0] = new Character(t);//创建敌兵头目,让其指向第一个敌兵数组的位置
                    mPawns[1] = new Character(mCockFrames);//创建敌兵小头目,让其指向第二个敌兵数组的位置
                    mPawns[1].setImages(mCockImages);
                    mPawns[0].setImages(mPawnImages[0]);
                    mCock = mPawns[0];
                    mPreCock=mPawns[1];
                    break;
                case 3:
                case 4:
                case 5:
                    mPawns[0] = new Character(mCockFrames);//创建敌兵头目,让其指向第一个敌兵数组的位置
                    mPawns[1] = new Character(mCockFrames);//创建敌兵小头目,让其指向第二个敌兵数组的位置
                    mPawns[0].setImages(mCockImages);
                    mPawns[1].setImages(mCockImages);
                    mCock = mPawns[0];
                    mPreCock = mPawns[1];
                    break;
            }
            for(int i=2;i<MAX_PAWN;i++){
                mPawns[i] = new Character(mPawnFrames);
            }
            System.out.println("在导入diren 之前");
            int x = mSceneWidth+30;//mSceneWidth/2+Math.abs(mRandom.nextInt()%60);
            int y = BORDER_UP+BORDER_DOWN>>1;//BORDER_UP +Math.abs(mRandom.nextInt()%50);
            mPreCock.create(HF.COCK,mCockLife[mLevel-1],x,y);
            mPreCock.mUsed = false;
            mCock.create(HF.COCK,mCockLife[mLevel-1],x,y);
            mCock.mUsed = false;
            System.out.println("在kongkong之前");
            reset();
            mPlayer.create(HF.PLAYER,100,30,120);
            mPlayer.setState(HF.STATE_MOVE_RIGHT);
            mPlayer.setState(HF.STATE_STILL);//默认的静止面朝向右
            mBufferGraphics.translate(-mBufferGraphics.getTranslateX(),0);
            System.out.println("在导入背景之前");
            loadBackground(level);
            //mBackgroundImage = HF.loadImage("background"+level+".png");
            //for(int i=0;i<mSceneImages.length;i++)
            //  mSceneImages[i] = HF.loadImage("scene"+scene[level][i]+".png");
            for(int i=0;i<sceneCount.length;i++)
                sceneCount[i]=0;
            createScene(0,0);
            createScene(mSceneWidth,0);
            if(HF.sound) {
                win.stop();
                lose.stop();
                back.play();
            }
            
        } catch(Exception e){
            System.out.println("Error loading level"+e);
        }
        beginLevel=true;
        switch(mLevel){
            case 1:
                
                break;
            case 2:
                break;
            case 4:
                break;
            case 5:
                break;
        }
    }
    
    public void loadBackground(int level)//读取背景和场景的图片
    {
        try{
            switch(level) {
                case 1:
                case 2:
                case 4:
                case 5:
                    mBackgroundImage[0] = HF.loadImage("background"+level+"_"+0+".png");
                    
                    break;
                case 3:
                    
                    mBackgroundImage[0] = HF.loadImage("background"+level+"_"+0+".png");
                    mBackgroundImage[1] = HF.loadImage("background"+level+"_"+1+".png");
                    break;
            }
            for(int i=0;i<mSceneImages.length;i++)
                mSceneImages[i] = HF.loadImage("scene"+scene[level-1][i]+".png");
        } catch(Exception e) 	{}
    }
    
    //设置主角小爱的状态
    public void setPlayerState(int state) {
        if(mPlayer.mUsed==false||mPlayer.mState == HF.STATE_DIE)
            return;//已经死亡了,不能再行动
        if(mPlayer.mState != HF.STATE_ATTACK){

⌨️ 快捷键说明

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