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

📄 game.java

📁 初学者的佳音 初学者的佳音 初学者的佳音 初学者的佳音 初学者的佳音
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package game;

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

public class Game extends TilesEngine{

  public static final int STATE_SWITCHIN=0;     //场景切入
  public static final int STATE_RUN=1;          //运行
  public static final int STATE_MENU=2;         //菜单
  public static final int STATE_WIN=3;          //过关
  public static final int STATE_LOSE=4;         //失败
  public static final int STATE_SWITCHOUT=5;    //场景切出

  //主角
  private Player player=new Player();
  //关卡
  private int level;
  //生命
  private int life;
  //得分
  private int score;
  //上次加生命得分
  private int preScore;
  //状态
  private int state;
  //幕布高度
  private int curtainHeight;
  private int menuIndex;

  private Resource resource=Resource.getResource();
  private Menu menu;
  private boolean pause;

  private Time winTime=new Time(3000);
  private Time loseTime=new Time(3000);
  private Time gameTime=new Time(600000);

  private int[] scoreBuff=new int[7];

  public Game(){
    setPlayer(player);
  }
  //设置菜单
  public void setMenu(Menu menu){
    this.menu=menu;
  }
  //设置状态
  public void setState(int state){
    this.state=state;
  }
  //返回状态
  public int getState(){
    return state;
  }

  //新游戏
  public void newGame(){
    player.setX(0);
    player.setY(0);
    level=0;
    score=preScore=0;
    life=3;
    loadGame();
  }
  //继续游戏
  public void continueGame(){
    //读关卡信息
    resource.readData();
    level=resource.data[11];
    score=preScore=resource.data[12];
    life=3;
    loadGame();
  }
  //下一关
  private void nextGame(){
    player.setPosition(0,0);
    level++;
    if(level==3){
      //写排行榜数据
      resource.addHiscoreData(score);
      resource.saveData();
      resource.releaseLevel2Game();
      resource.loadMenu();
      getFrameManager().setCurrFrame(menu);
    }
    else{
      loadGame();
    }
  }
  //重新开始这一关
  private void restartGame(){
    life--;
    if(life==0){
      //写排行榜数据和关卡信息
       resource.setGateData(level,score);
       resource.addHiscoreData(score);
       resource.saveData();
       switch(level){
       case 0:
         resource.releaseLevel1Game();
         break;
       case 1:
         resource.releaseLevel2Game();
         break;
       case 2:
         resource.releaseLevel3Game();
         break;
       }
       resource.loadMenu();
       getFrameManager().setCurrFrame(menu);
    }
    else{
      loadGame();
    }
  }
  //载入游戏
  private void loadGame(){
    switch(level){
      case 0:
        resource.releaseLevel1Game();
        resource.releaseLevel2Game();
        resource.releaseLevel3Game();
        resource.loadLevel1Game();
        loadMap("/image/map1.png",resource.imgLevel1Tiles,resource.imgLevel1Back);
        break;
      case 1:
        resource.releaseLevel1Game();
        resource.releaseLevel2Game();
        resource.releaseLevel3Game();
        resource.loadLevel2Game();
        loadMap("/image/map2.png",resource.imgLevel2Tiles,resource.imgLevel2Back);
        break;
      case 2:
        resource.releaseLevel1Game();
        resource.releaseLevel2Game();
        resource.releaseLevel3Game();
        resource.loadLevel3Game();
        loadMap("/image/map3.png",resource.imgLevel3Tiles,resource.imgLevel3Back);
        break;
    }
    curtainHeight=XCanvas.HEIGHT/8+1;
    state=STATE_SWITCHIN;
    gameTime.restart();
    gameTime.update(1);
    setReel(REEL_BOTH);
  }
  //载入幽灵
  protected void loadSprites(DataInputStream in) throws Exception{
    int count=in.readInt();

    for(int i=0;i<count;i++){
      switch(in.readInt()){
        //小球
        case 0:
          addSprites(new Ball(in.readInt(),in.readInt()));
          break;
        //固定猴子
        case 1:
          addSprites(new FixedMonkey(in.readInt(),in.readInt(),in.readInt()));
          break;
        //运动猴子
        case 2:
          addSprites(new UnfixedMonkey(in.readInt(),in.readInt(),in.readInt(),in.readInt()));
          break;
        //鳄鱼
        case 3:
          addSprites(new Cayman(in.readInt(),in.readInt(),in.readInt(),in.readInt()));
          break;
        //老虎
        case 4:
          addSprites(new Tiger(in.readInt(),in.readInt(),in.readInt()));
          break;
        //boss
        case 100:
          switch(in.readInt()){
            //固定猴子
            case 1:
              break;
            //运动猴子
            case 2:
              addBoss(new BossUnfixedMonkey(in.readInt(),in.readInt(),in.readInt(),in.readInt(),in.readInt()));
              break;
            //鳄鱼
            case 3:
              addBoss(new BossCayman(in.readInt(),in.readInt(),in.readInt(),in.readInt(),in.readInt()));
              break;
            //老虎
            case 4:
              addBoss(new BossTiger(in.readInt(),in.readInt(),in.readInt(),in.readInt()));
              break;
          }
          break;
      }
    }
  }
  //更新场景切入
  public void updateSwitchIn(int elapsedTime){
    curtainHeight--;
    //切换到运行状态
    if(curtainHeight==0){
      state=STATE_RUN;
      if(resource.isMIPD2_0){
        resource.openMedia.stop();
        resource.winMedia.stop();
        resource.loseMedia.stop();
        resource.backMedia.play();
      }
    }
  }
  //更新运行
  public void updateRun(int elapsedTime){
    //向左走
    if(getKeyStates(XCanvas.KEY_LEFT) || getKeyStates(XCanvas.KEY_NUM4)){
      player.setVelocityX(-2);
    }
    //向右走
    if(getKeyStates(XCanvas.KEY_RIGHT) || getKeyStates(XCanvas.KEY_NUM6)){
      player.setVelocityX(2);
    }
    //不能向回走
    if(player.getX()>(getMapWidth()-XCanvas.WIDTH-50))
      setReel(REEL_SINGLE);
    //胜利
    if(getBossCount()==0){

      if(level==1){
        for(int i=308;i<=316;i++)
          setTile(10,i,(byte)11);
        setTile(10,307,(byte)10);
        setTile(10,317,(byte)12);
      }

      removeAllSprites();
      state=STATE_WIN;
      score+=gameTime.getCurrTime()/1000*100;
      score+=life*10000;
      if(resource.isMIPD2_0){
        resource.backMedia.stop();
        resource.winMedia.play();
      }
      else
        if(resource.sound) resource.winSound.play(1);
    }
    if(gameTime.update(elapsedTime)){
      player.setAct(Sprite.ACT_DEAD);
    }
  }
  //更新胜利
  public void updateWin(int elapsedTime){
    if(winTime.update(elapsedTime)){
      state=STATE_SWITCHOUT;
    }
  }
  //更新失败
  public void updateLose(int elapsedTime){
    if(loseTime.update(elapsedTime)){
      state=STATE_SWITCHOUT;
    }
  }
  //场景切出
  public void updateSwitchOut(int elapsedTime){
    curtainHeight++;
    if(curtainHeight==XCanvas.HEIGHT/8+1){
      if(player.getAct()==Sprite.ACT_DEAD){
        restartGame();
      }
      else{
        nextGame();
      }
    }
  }
  //更新
  public void update(int elapsedTime){
    if(pause || state==STATE_MENU) return;

    super.update(elapsedTime);

    switch(state){
      case STATE_SWITCHIN:
      updateSwitchIn(elapsedTime);
      break;
    case STATE_RUN:
      updateRun(elapsedTime);
      break;
    case STATE_MENU:
      break;
    case STATE_WIN:
      updateWin(elapsedTime);
      break;
    case STATE_LOSE:
      updateLose(elapsedTime);
      break;
    case STATE_SWITCHOUT:
      updateSwitchOut(elapsedTime);
      break;
    }
  }
  //加生命
  private void addLife(){
//    if(score-preScore>=10000){
//      preScore+=10000;
//      if(life<8) life++;
//    }
  }
  //撞击幽灵
  public void playerCollision(Sprite sprite){

    if(state!=STATE_RUN)
      return;

    //撞小球
    if(sprite instanceof Ball){
      removeSprites(sprite);
      score+=100;
      addLife();
    }
    //撞香蕉
    else if(sprite instanceof Banana){
      player.setAct(sprite.ACT_DEAD);
    }
    //撞猴子
    else if(sprite instanceof FixedMonkey || sprite instanceof UnfixedMonkey){
      if(player.getVelocityY()<=0){
        player.setAct(Sprite.ACT_DEAD);
      }

⌨️ 快捷键说明

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