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

📄 battlecanvas.java

📁 这是我在原来单位的时候写的一个坦克大战的J2ME游戏的代码,可以给其他作J2ME游戏的人作个参考
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
  private static boolean m_enemyCleared;//confirm whether the destory enemy key should be handled


//道具相关的属性
  public final static int NUM_OF_PROPERTIES = 7;
  public final static int NUM_OF_PROPERTIES_PER = 3;
  public final static int PROPERTY_IMG_WIDTH = 20;
  public final static int PROPERTY_IMG_HEIGHT = 20;

  //property list
  public final static int PROPERTY_ELEMENT_INVINCIBLY = 0;
  public final static int PROPERTY_ELEMENT_BOMB_ADD = 1;
  public final static int PROPERTY_ELEMENT_ADD_TRACK_MISSILE = 2;
  public final static int PROPERTY_ELEMENT_WRENCH = 3;
  public final static int PROPERTY_ELEMENT_ADD_LIFE = 4;
  public final static int PROPERTY_ELEMENT_DOUBLE_POINTS = 5;
  public final static int PROPERTY_ELEMENT_STRENGTHEN_HEADQUARTERS = 6;

  public final static int PROPERTY_TYPE_POINTS = 0;
  //
  public final static int property_type[][]={
      {1000},
      {1000},
      {1000},
      {1000},
      {1000},
      {1000},
      {1000},
  };

  //计分事件
  public final static int EVENT_ENEMY_TANK_TYPE1_DESTROYED = 0;
  public final static int EVENT_ENEMY_TANK_TYPE2_DESTROYED = 1;
  public final static int EVENT_ENEMY_TANK_TYPE3_DESTROYED = 2;
  public final static int EVENT_HOUSE_DESTROYED = 3;
  public final static int EVENT_STAGE_CLEAR = 4;
  public final static int EVENT_GAME_OVER = 5;

  //奖励计分(easy/normal/hard)
  //event type/easy points,normal points,hard points
  public final static int POINTS_IN_GAME[][]={
  {1000,1000,2000},
  {1500,1500,3000},
  {2000,2000,4000},
  {100,100,200},
  {3000,3000,6000},
  };


  private static Image m_propertyImage;
  private static PropertySprite[] m_propertySprite;


  //random event definitions
  public final static int RANDOM_EVENT_LANDMINE=1;
  public final static int RANDOM_EVENT_LIGHTENING=2;
  public final static int RANDOM_EVENT_ADDPOINTS=3;

  private static boolean m_threadAlive;

  //enemy tank one destroyed
  private static int m_enemyTankOneDestroyed;
  private static int m_enemyTankTwoDestroyed;
  private static int m_enemyTankThreeDestroyed;

  private static int m_totalPoints;

  private static GameLogic instance;
  
  //midi resource;
  public static LPAudioPlayer m_player;
  public static boolean m_soundOn;
  
  
  //A START algorithm
  public static AAsterisk m_asterisk;

  /**
   * 1-15 地雷
21-35闪电
61-80增加积分

   *
   */
  public static int getRandomEvent(){
    int event=0;

    try {
      Random random=new Random();
      int i= random.nextInt(100);

      if(i>=1&&i<=5){
        event=RANDOM_EVENT_LANDMINE;
      }else if(i>=21&&i<=32){
        event=RANDOM_EVENT_LIGHTENING;
      }else if(i>=61&&i<=70){
        event=RANDOM_EVENT_ADDPOINTS;
      }
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }

    return event;
  }


  public static int getTotalPoints() {

    return m_gamePoints;
  }

  public static int getEnemyTankLeft(){
    int tankLeft=game_level[m_gameLevel][GAME_LEVEL_PROPERTY_ENEMY_NUM_ALL]-
        m_enemyDestoryed;
    if(tankLeft<=0){
      tankLeft=0;
    }

    return tankLeft;
  }

  public static int getEnemyTankOneCounts(){
    return m_enemyTankOneDestroyed;
  }
  public static int getEnemyTankTwoCounts(){
    return m_enemyTankTwoDestroyed;
  }
  public static int getEnemyTankThreeCounts(){
    return m_enemyTankThreeDestroyed;
  }

  public static void updateGameInfo(int record, int level,
                                    int points, int tankType, int stage,int lives) {
    if ( -1 != level) {
      m_gameLevel = level;
    }
    if ( -1 != tankType) {
      m_tankType = tankType;
    }
    if ( -1 != stage) {
      m_currentStage = stage;
    }
    if ( -1 != points) {
      m_gamePoints = points;
    }

    if ( -1 != record) {
      m_currentRecord = record;
    }

    if(-1!=lives){
      m_tankLives=lives;
    }
  }


  private void init() {
    m_enemyTankOneDestroyed=0;
    m_enemyTankTwoDestroyed=0;
    m_enemyTankThreeDestroyed=0;
    m_totalPoints=0;

    m_GameState = GAME_STATE_READY;
    m_threadAlive=true;
    m_enemyDestoryed = 0;
    
    m_asterisk=new AAsterisk();
  }

  private static void releaseResource() {
		try {
			if (m_layerManager == null) {
				return;
			}

			m_planeImage = null;
			m_lighteningImage = null;
			m_bombImage = null;
			m_bulletImage_bullet = null;
			m_bulletImage_baby = null;
			m_bulletImage_missile = null;
			m_trackerImage = null;

			/**
			 * 1.stop the bomb music res,begin play bg.midi
			 */
			if (null != m_player) {
				m_player.stop();
				m_player.close();
				m_player = null;
			}
			m_player = new LPAudioPlayer("/tank/bg.mid", "audio/midi");
			if(GameLogic.m_soundOn==true){
				m_player.threadPlay();
			}
			
			releaseEnemyTank();
			releaseTiledLayer();
			releaseTank();
			releaseHeadquarters();
			releaseProperties();

		} catch (Exception ex) {
			ex.printStackTrace();
		}

	}

  public static void startProperties() {
    // 随机启动三个道具 在战场的任何地方
    //下次使用炸弹之前,把原来的道具关掉
    Random rand = new Random();
    int iRandom = 0;
    int iPropertyNums = 0;

    int pos_x, pos_y = 0;

    try {
      for (int i = 0; i < NUM_OF_PROPERTIES; i++) {
        m_propertySprite[i].reset(); //关掉所有的道具
      }

      for (int i = 0; i < NUM_OF_PROPERTIES; i++) {
        iRandom = rand.nextInt(NUM_OF_PROPERTIES - 1);
        if (GAME_STATE_READY == m_propertySprite[iRandom].getGameState()) {
          pos_x = rand.nextInt( (MAP_COLUM_NUM - 1) * MAP_CELL_WIDTH);
          pos_y = MAP_CELL_HEIGHT+rand.nextInt( (MAP_ROW_NUM - 1) * MAP_CELL_HEIGHT);//assure that it is in the region of map
          m_propertySprite[iRandom].setRefPixelPosition(pos_x, pos_y);
          m_propertySprite[iRandom].setVisible(true);
          m_propertySprite[iRandom].start();
          iPropertyNums++;
          if (iPropertyNums >= NUM_OF_PROPERTIES_PER) {
            break; //已经生成了三个道具
          }
        }
      }
      rand=null;

    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
  }


  private static void releaseProperties() {
    try {
      m_propertyImage = null;
      for (int i = 0; i < NUM_OF_PROPERTIES; i++) {
        if (null != m_propertySprite && null != m_propertySprite[i]) {
          m_layerManager.remove(m_propertySprite[i]);
          m_propertySprite[i] = null;
        }
      }
      m_propertySprite = null;
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }

  }

  private void createProperties() {
    try {
      System.gc();
      m_propertyImage=null;
      m_propertyImage = Image.createImage("/tank/map_res/property.png");

      m_propertySprite = new PropertySprite[NUM_OF_PROPERTIES];

      for (int i = 0; i < NUM_OF_PROPERTIES; i++) {
        m_propertySprite[i] = new PropertySprite(m_propertyImage,
                                                 PROPERTY_IMG_WIDTH,
                                                 PROPERTY_IMG_HEIGHT, i);
        m_layerManager.insert(m_propertySprite[i],0);
        m_propertySprite[i].setVisible(false);
      }
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
  }


  private static void releaseHeadquarters() {
    try {
      m_headquartersImage = null;
      if (null != m_headquarters) {
        m_layerManager.remove(m_headquarters);
        m_headquarters = null;
      }

    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
  }

  private void createHeadquarters() {
    try {
      System.gc();
      //创建司令部
      m_headquartersImage=null;
      m_headquartersImage = Image.createImage("/tank/map_res/jidi.png");
      m_headquarters = new Sprite(m_headquartersImage,
                                  HEADQUARTERS_IMAGE_WIDTH,
                                  HEADQUARTERS_IMAGE_HEIGHT);
      m_headquartersBlood = HEADQUARTERS_BASIC_BLOOD;
      m_headquarters.setFrame(0);
      //以左上角作为参考坐标点
      m_headquarters.defineReferencePixel(0, 0);
      m_headquarters.setRefPixelPosition(HEADQUARTERS_IMAGE_LOCATION_X,
                                         HEADQUARTERS_IMAGE_LOCATION_Y);
      m_layerManager.insert(m_headquarters, 0);
      
     //we thought the headquarters as fence,so the enemy tank can't access it
      map_element[MAP_COLUM_NUM/2-1][MAP_ROW_NUM-1][MAP_ELEMENT_PROPERTY_GRID_TYPE]=9;
      map_element[MAP_COLUM_NUM/2][MAP_ROW_NUM-1][MAP_ELEMENT_PROPERTY_GRID_TYPE]=9;
      

    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
  }



  private void createTankAppearScene(){
    System.gc();
    try {
        m_tankAppearImage=null;
      m_tankAppearImage=Image.createImage("/tank/bullet_res/appear.png");
      m_tankAppearImageSprite=new Sprite(m_tankAppearImage,APPEAR_IMAGE_WIDTH,APPEAR_IMAGE_HEIGHT);
      m_tankAppearFrame=0;
      int frame[]={0,1,2,3,0,1,2,3};
      m_tankAppearImageSprite.setFrameSequence(frame);
      m_tankAppearImageSprite.defineReferencePixel(GameLogic.TANK_WIDTH/2,GameLogic.TANK_HEIGHT/2);
      m_tankAppearImageSprite.setVisible(false);
      m_layerManager.insert(m_tankAppearImageSprite,0);
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
  }




  /**
   * load 地图资源,用户tank/enemy tank 资源
   */
  private void loadResource() {

    try {
			/**
			 * 1.stop play bg.mid 2.load bomb.mid res
			 * 
			 */
			if (null != m_player) {
				m_player.stop();
				m_player.close();
				m_player = null;
			}
			m_player = new LPAudioPlayer("/tank/bomb.mid", "audio/midi");

			map_element = new int[MAP_COLUM_NUM][MAP_ROW_NUM][MAP_ELEMENT_PROPERTY_NUM];

			System.gc();
			m_planeImage = Image.createImage("/tank/map_res/plane.png");
			m_bombImage = Image.createImage("/tank/bullet_res/bomb.png");
			m_lighteningImage = Image
					.createImage("/tank/bullet_res/lightening.png");
			m_bulletImage_bullet = Image
					.createImage("/tank/bullet_res/bullet.png");
			m_bulletImage_baby = Image
					.createImage("/tank/bullet_res/baby_bullet.png");
			m_bulletImage_missile = Image
					.createImage("/tank/bullet_res/missile.png");
			m_trackerImage = Image.createImage("/tank/bullet_res/tracker.png");

			// tank
			createTank();
			createHeadquarters();
			createProperties();

			// enemy tank
			createEnemyTank();
			createTiledLayer();
			createBoard(LEVEL1);

			createTankAppearScene();

			m_layerManager.append(m_tank);
			m_layerManager.append(m_warMap);
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}


// the element is destroyed,true
  // false,don't provide points
  private static boolean reduce_MapElement_Life(int col, int row, int damage) {
    int mapElementType = 0;

    if(col<0 || row<0 ||col>=MAP_COLUM_NUM||row>=MAP_ROW_NUM){
      return false;
    }

    mapElementType = map_element[col][row][MAP_ELEMENT_PROPERTY_ELEMENT_TYPE];
  

⌨️ 快捷键说明

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