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

📄 scenemodel.java

📁 格斗类小游戏 没什么好说的了 真的真的
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
            mPlayer.setState(state);
            /*
            if(state == HF.STATE_ATTACK){
                int x = 0,y =0;
                if(mPlayer.mDirection == HF.STATE_MOVE_LEFT){
                    x = mPlayer.mX-13;
                }
                else if(mPlayer.mDirection == HF.STATE_MOVE_RIGHT){
                    x = mPlayer.mX+13;
                }
                y = mPlayer.mY-10;
                fire(x,y,mPlayer.mDirection);//发射一颗子弹
            }
             */
        }
    }
    //向某个方向发射一颗子弹
    private void fire(int x,int y,int direction) {
        for(int i=0;i<MAX_BULLET;i++){
            if(mBullets[i].mUsed == false){
                if(fireNum>0) {
                    fireNum--;
                } else
                    fireEmpty=true;
                mBullets[i].create(HF.BULLET,10,x,y);
                mBullets[i].mDirection = direction;
                break;
            }
        }
    }
    private void enemyFire(int x,int y,int direction) {
        for(int i=0;i<MAX_ENEMY_BULLET;i++) {
            if(mEnemyBullets[i].mUsed == false){
                mEnemyBullets[i].create(HF.BULLET,10,x,y);
                mEnemyBullets[i].mDirection = direction;
                break;
            }
        }
        
    }
    //检测是否有与场景的物品相冲突
    private void checkCollison() {
        for(int i=0;i<MAX_BULLET;i++){
            if(mBullets[i].mUsed == true){
                //子弹在场景中存在,判断是否射中了敌兵
                for (int j = 0; j < MAX_PAWN; j++) {
                    if(mPawns[j].mUsed == true&& mPawns[j].mState != HF.STATE_DIE){
                        int dx = mBullets[i].mX-mPawns[j].mX;
                        int dy = mBullets[i].mY- mPawns[j].mY;
                        int xWidth = 200, yWidth = 280;
                        if(j == 0){
                            yWidth = 400; //对应要判断的是敌兵头目
                        }
                        //判断是否射中目标
                        if(dx*dx<xWidth&&dy*dy<yWidth){
                            //射中了敌人
                            mPawns[j].mLife = mPawns[j].mLife -2;
                            mBullets[i].reset();
                            for(int bi=0;bi<mBBlood.length;bi++){
                                if(mBBlood[bi].mUsed==false){
                                    mBBlood[bi].mUsed=true;
                                    mBBlood[bi].mX=mBullets[i].mX;
                                    mBBlood[bi].mY=mBullets[i].mY;
                                    break;
                                }
                            }
                            if(j>1){
                                if (mPawns[j].mLife <= 0) {
                                    mKillPawn++;//杀死了一个敌兵
                                    mScore.addScore(HF.LIFE_POINT*mPawnLife[mLevel-1]);
                                    mPawns[j].setState(HF.STATE_DIE);
                                }
                            } else if(j==0){
                                //对应攻击到的是敌兵头目
                                mScore.addScore(HF.LIFE_POINT*2);
                                mCock.mLife -= 2;
                                if(mCock.mLife<=0){
                                    mScore.addScore(mPlayer.mLife * HF.LIFE_POINT); //打死它后,额外主角剩下的血的得分
                                    mCock.setState(HF.STATE_DIE);
                                    if(HF.sound) {
                                        back.stop();
                                        win.play();
                                    }
                                }
                            } else {
                                mScore.addScore(HF.LIFE_POINT*2);
                                mPreCock.mLife -= 2;
                                if(mPreCock.mLife<=0){
                                    //mScore.addScore(mPlayer.mLife * HF.LIFE_POINT); //打死它后,额外主角剩下的血的得分
                                    switch(mLevel) {
                                        case 1:
                                            mScore.addScore(mPlayer.mLife * HF.LIFE_POINT);
                                            mPreCock.setState(HF.STATE_DIE);
                                            mCock.mUsed = true;
                                            mCock.setState(HF.STATE_MOVE_LEFT);
                                            break;
                                        case 2:
                                            mScore.addScore(mPlayer.mLife * HF.LIFE_POINT);
                                            mPreCock.desX=-50;
                                            mPreCock.desY=mPreCock.mY;
                                            mPreCock.setState(HF.STATE_MOVE_LEFT);
                                            break;
                                        case 3:
                                        case 4:
                                        case 5:
                                            break;
                                    }
                                    //mCock.mUsed = true;
                                    //mCock.setState(HF.STATE_MOVE_LEFT);
                                }
                            }
                            break;//子弹射中了敌人了,不可以在继续使用来判断
                        }
                    }
                }
            }
        }
        for(int i=0;i<MAX_ENEMY_BULLET;i++) {
            if(mEnemyBullets[i].mUsed == true) {
                //子弹在场景中存在,判断是否射中了黄忠
                if(mPlayer.mUsed == true&& mPlayer.mState != HF.STATE_DIE) {
                    int dx = mEnemyBullets[i].mX-mPlayer.mX;
                    int dy = mEnemyBullets[i].mY-mPlayer.mY;
                    int xWidth = 200, yWidth = 280;
                    //判断是否射中目标
                    if(dx*dx<xWidth&&dy*dy<yWidth) {
                        //射中了敌人
                        mPlayer.mLife = mPlayer.mLife -2;//弓箭对黄忠的伤害
                        for(int bi=0;bi<mBBlood.length;bi++){
                            if(mBBlood[bi].mUsed==false){
                                mBBlood[bi].mUsed=true;
                                mBBlood[bi].mX=mEnemyBullets[i].mX;
                                mBBlood[bi].mY=mEnemyBullets[i].mY;
                                break;
                            }
                        }
                        if(dx<-5) {
                            //mPlayer.setPictureIndex (4);
                            mPlayer.mHurtCount = true;
                        } else {
                            //mPlayer.setPictureIndex (5);
                            mPlayer.mHurtCount = true;
                        }
                        mEnemyBullets[i].reset();
                        if (mPlayer.mLife <= 0) {
                            mPlayer.setState(HF.STATE_DIE);
                            if(HF.sound) {
                                back.stop();
                                lose.play();
                            }
                        }
                        break;//子弹射中了敌人了,不可以在继续使用来判断
                    }
                }
            }
        }
    }
    boolean  takeRes(){
        boolean b=false;
        for(int i=0;i<2;i++){
            if(mCabinets[i].mUsed == true){
                int dx = mCabinets[i].mX - mPlayer.mX;
                int dy = mCabinets[i].mY - mPlayer.mY-7;
                if(dx*dx+dy*dy<200){
                    mCabinets[i].reset();
                    if(mCabinets[i].mType==HF.CABINET){
                        hpSplashTime=10;
                        b=true;
                    }else{
                        // fireNum+=10;//增加火箭的数量+10
                        // fireEmpty=false;
                    }
                }
            }
        }
        return b;
    }
    
    //创建一个游戏场景画面,包括屋子,金属箱等物品的放置
    private void createScene(int x1,int y1) {
        //int counter = 0;
        int x = 0;
        int y = 0;
        if(mLevel!=3) {
            x = 10+Math.abs(mRandom.nextInt()%30);
            y = BORDER_UP;
            
            //首先创建上一排的布景
            while(x<mSceneWidth){
                int index = Math.abs(mRandom.nextInt()%4);
                int width =mSceneImages[index].getWidth();
                if(mRandom.nextInt()%3>0&&(x+width)<mSceneWidth){
                    //创建一个布景
                    for(int i=0;i<MAX_SCENEUNIT;i++){
                        if(mUpScenes[i].mUsed == false){
                            mUpScenes[i].create(index + 2, 10, x + x1, y);
                            break;
                        }
                    }
                }
                x = x+width+10;
            }
            
            x = 10+Math.abs(mRandom.nextInt()%30);
            y = BORDER_DOWN+6;
            //首先创建下一排的布景
            while(x<mSceneWidth){
                int index = Math.abs(mRandom.nextInt()%4);
                int width =mSceneImages[index].getWidth();
                if(mRandom.nextInt()%3>0&&(x+width)<mSceneWidth){
                    //创建一个布景
                    for(int i=0;i<MAX_SCENEUNIT;i++){
                        if(mDownScenes[i].mUsed == false){
                            mDownScenes[i].create(index + 2, 10, x + x1, y);
                            break;
                        }
                    }
                }
                x = x+width+10;
            }
        }
        //如果是第在第一个场景,就要刷场景的名字
        if(mSceneIndex == 0) {
            mFramesPosiX = mSceneWidth+40;
            mFramesPosiY = mSceneHeight>>1;
            mFramesCount = 30;
            bShowFrames = true;
            //if(HF.sound)
            //  {
            //HF.back.play();
            //	}
            return;
        }
        
        //创建场景中的敌兵
        // counter = 0;
        int Height = BORDER_DOWN - BORDER_UP-20;
        int count = 2+Math.abs(mRandom.nextInt()%3);
        int index0 = Math.abs(mRandom.nextInt()%3);
        int index = enemys[mLevel-1][index0];
        for(int i=0;i<count;i++){
            for(int k=2;k<MAX_PAWN;k++){
                if(mPawns[k].mUsed == false){
                    x = 10+Math.abs(mRandom.nextInt()%mSceneWidth);
                    y = BORDER_UP+Math.abs(mRandom.nextInt()%Height);
                    //int t = getEnemyIndex(mPawns[k]);
                    System.out.println("敌人叙述"+index0);
                    mPawns[k].setImages(mPawnImages[index0]);
                    mPawns[k].create(index,mPawnLife[mLevel-1],x+x1,y);
                    // System.out.println("敌人"+mPawns[k]);
                    mPawns[k].setState(HF.STATE_MOVE_LEFT);
                    break;
                }
            }
        }
        //System.out.println("Scene"+(mSceneIndex+1)+"Create"+counter+"Pawns");
        
        //创建场景中的药箱
        int rate = mRandom.nextInt()%10;
        if(rate>5){
            for(int i=0;i<2;i++){
                if(mCabinets[i].mUsed==false){
                    x = 10 + Math.abs(mRandom.nextInt() % mSceneWidth);
                    y = BORDER_UP+Math.abs(mRandom.nextInt() %(Height-20));
                    if(mRandom.nextInt()%2==0)
                        mCabinets[i].create(HF.CABINET,50,x+x1,y);
                    else
                        mCabinets[i].create(HF.ARROW,50,x+x1,y);
                    break;
                }
            }
        }
    }
/*		private int getEnemyIndex(Character cter)
                {
                        int i=0;
                        for( ;i<3;i++)
                        {
                                if(cter.mType == enemys[mLevel-1][i])
                                        return i;
                        }
                        return i;
                }
 */
    /**
     * 更新某个角色的状态
     * @param cter 要更新的角色对象
     * @param cStep 角色对象移动的步伐大小
     * @param aLife 角色攻击一次能够消耗的生命值数
     */
    private void refreshCharacter(Character cter,int cStep,int aLife,int atkDelay) {
        if(cter.mState == HF.STATE_ATTACK||cter.mState == HF.STATE_DIE)
            return;//已经是死亡状态或者正在攻击状态,跳过
        int dx,dy;

⌨️ 快捷键说明

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