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

📄 battlecanvas.java

📁 这是我在原来单位的时候写的一个坦克大战的J2ME游戏的代码,可以给其他作J2ME游戏的人作个参考
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
      for (int i = 0; i < MAX_TANK_COUNT; i++) {
        if (null != m_userTankSprite && null != m_userTankSprite[i]) {
          m_layerManager.remove(m_userTankSprite[i]);
          m_userTankSprite[i] = null;
        }

      }
      m_userTankSprite = null;

      for (int i = 0; i < MAX_BOMB_COUNT; i++) {
        if (null != m_planeSprite && null != m_planeSprite[i]) {
          m_layerManager.remove(m_planeSprite[i]);
          m_planeSprite[i] = null;
        }
      }
      m_planeSprite = null;

      GameLogic.stop();
      m_gameLogic = null;

      for(int i = 0; i < m_layerManager.getSize(); i++){
        Layer layer = m_layerManager.getLayerAt(i);
        if(null!=layer){
          m_layerManager.remove(layer);
          layer=null;
        }
      }

      m_layerManager = null;
      instance = null;

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

  }

  private  static void createProgressBar(){
    try {
      //needed for display progress bar
      m_topPanel = null;
      m_topPanel = Image.createImage("/tank/map_res/bottom.png");
      m_progressImage=null;
      m_progressImage=Image.createImage("/tank/map_res/progress.png");
      m_progressOneImage=null;
      m_progressOneImage=Image.createImage("/tank/map_res/progress_missile.png");
      m_backgroundImg=null;
      m_backgroundImg = Image.createImage("/tank/map_res/tank_factory.png");
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
  }

  private static void releaseProgressBar(){
    try {
      m_topPanel=null;
      m_progressImage=null;
      m_progressOneImage=null;
      m_backgroundImg=null;
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
  }

  private void loadResource() {
    try {
      m_currentMenuButtonIndex = 0;
      int startPosX, startPosY = 0;
      Graphics g;
      startPosX = 16;
      startPosY = GameLogic.MAP_CELL_HEIGHT + GameLogic.MAP_HEIGHT + 3;

      int bombStartPosX, bombStartPosY = 0;
      bombStartPosX = 123;
      bombStartPosY = startPosY;


      m_strPoints=new StringBuffer(POINT_NUM_COUNT);

      m_graphics=getGraphics();

      createProgressBar();



      m_panelIcon=null;
      m_panelIcon = Image.createImage("/tank/map_res/bottom_icon.png");
      m_shadowImage=null;
      m_shadowImage = Image.createImage("/tank/map_res/fulfill.png");
      m_enemyNumImage=null;
      m_enemyNumImage=Image.createImage("/tank/map_res/enemy_num.png");
      m_pointNumImage=null;
      m_pointNumImage=Image.createImage("/tank/map_res/point_num.png");
      m_stageNumImage=null;
      m_stageNumImage=Image.createImage("/tank/map_res/stage_num.png");

      //panel top /panel bottom
      m_topPanelImageSprite = new Sprite(m_topPanel, GameLogic.MAP_WIDTH,
                                         GameLogic.MAP_CELL_HEIGHT);
      m_topPanelImageSprite.setRefPixelPosition(0, 0);
      m_layerManager.insert(m_topPanelImageSprite, 0);

      m_bottomPanelImageSprite = new Sprite(m_topPanel, GameLogic.MAP_WIDTH,
                                            GameLogic.MAP_CELL_HEIGHT);
      m_bottomPanelImageSprite.setFrame(1);
      m_bottomPanelImageSprite.setRefPixelPosition(0,
          GameLogic.MAP_HEIGHT + GameLogic.MAP_CELL_HEIGHT);
      m_layerManager.insert(m_bottomPanelImageSprite, 0);

      g=getGraphics();
      DrawTools.displayProgressBarScreen(g, m_progressImage, m_progressOneImage,
                                         m_topPanel, m_backgroundImg,
                                         20);

//shadow 1
      m_shadowImage1 = null;
      m_shadowImage1 = Image.createImage(62, 14);
      g = m_shadowImage1.getGraphics();
      DrawTools.XDrawImage(g, m_shadowImage, 0, 0,
                           1, 1, 62, 14);
      m_shadowImage1Sprite = new Sprite(m_shadowImage1, 62, 14);
      m_shadowImage1Sprite.setRefPixelPosition(16, 2);
      m_layerManager.insert(m_shadowImage1Sprite, 0);
      //shadow2
      m_shadowImage2 = null;
      m_shadowImage2 = Image.createImage(103, 17);
      g = m_shadowImage2.getGraphics();
      DrawTools.XDrawImage(g, m_shadowImage, 0, 0,
                           63, 1, 103, 17);
      m_shadowImage2Sprite = new Sprite(m_shadowImage2, 103, 17);
      m_shadowImage2Sprite.setRefPixelPosition(16,
                                               GameLogic.MAP_HEIGHT +
                                               GameLogic.MAP_CELL_HEIGHT + 3);
      m_layerManager.insert(m_shadowImage2Sprite, 0);

      g=getGraphics();
     DrawTools.displayProgressBarScreen(g, m_progressImage, m_progressOneImage,
                                        m_topPanel, m_backgroundImg,
                                        30);

      //shadow3
      m_shadowImage3 = null;
      m_shadowImage3 = Image.createImage(56, 17);
      g = m_shadowImage3.getGraphics();
      DrawTools.XDrawImage(g, m_shadowImage, 0, 0,
                           165, 1, 56, 17);
      m_shadowImage3Sprite = new Sprite(m_shadowImage3, 56, 17);
      m_shadowImage3Sprite.setRefPixelPosition(123,
                                               GameLogic.MAP_HEIGHT +
                                               GameLogic.MAP_CELL_HEIGHT + 3);
      m_layerManager.insert(m_shadowImage3Sprite, 0);


      //金币
      m_goldCoinImageSprite = new Sprite(m_panelIcon, PANEL_ICON_IMAGE_WIDTH,
                                         PANEL_ICON_IMAGE_HEIGHT);
      m_goldCoinImageSprite.setFrame(PANEL_ICON_IMAGE_GOLD_COIN);
      m_goldCoinImageSprite.setRefPixelPosition(16, 2);
      m_layerManager.insert(m_goldCoinImageSprite, 0);

      //显示敌方坦克剩余个数
      m_enemyTankImageSprite = new Sprite(m_panelIcon, PANEL_ICON_IMAGE_WIDTH,
                                          PANEL_ICON_IMAGE_HEIGHT);
      m_enemyTankImageSprite.setFrame(PANEL_ICON_IMAGE_ENEMY_TANK);
      m_enemyTankImageSprite.setRefPixelPosition(182, 2);
      m_layerManager.insert(m_enemyTankImageSprite, 0);

      g=getGraphics();
     DrawTools.displayProgressBarScreen(g, m_progressImage, m_progressOneImage,
                                        m_topPanel, m_backgroundImg,
                                        50);


      //X
      m_XImageSprite = new Sprite(m_panelIcon, PANEL_ICON_IMAGE_WIDTH,
                                  PANEL_ICON_IMAGE_HEIGHT);
      m_XImageSprite.setFrame(PANEL_ICON_IMAGE_X);
      m_XImageSprite.setRefPixelPosition(198, 2);
      m_layerManager.insert(m_XImageSprite, 0);

      //point num sprite
      int pointPosX, pointPosY = 0;
      pointPosX = PANEL_ICON_GOLD_COIN_POS_X + PANEL_ICON_IMAGE_WIDTH;
      pointPosY = PANEL_ICON_GOLD_COIN_POS_Y;
      m_pointNumImageSprite = new Sprite[POINT_NUM_COUNT];
      for (int i = 0; i < POINT_NUM_COUNT; i++) {
        m_pointNumImageSprite[i] = new Sprite(m_pointNumImage,
                                              PANEL_ICON_POINT_WIDTH,
                                              PANEL_ICON_POINT_HEIGHT);
        m_pointNumImageSprite[i].setRefPixelPosition(pointPosX +
            i * PANEL_ICON_POINT_WIDTH, pointPosY);
        m_pointNumImageSprite[i].setFrame(0);
        m_layerManager.insert(m_pointNumImageSprite[i], 0);
      }

      g=getGraphics();
     DrawTools.displayProgressBarScreen(g, m_progressImage, m_progressOneImage,
                                        m_topPanel, m_backgroundImg,
                                        60);


//剩余坦克的图标
      m_userTankSprite = new Sprite[MAX_TANK_COUNT];
      for (int i = 0; i < MAX_TANK_COUNT; i++) {
        m_userTankSprite[i] = new Sprite(m_panelIcon, PANEL_ICON_IMAGE_WIDTH,
                                         PANEL_ICON_IMAGE_HEIGHT);
        m_userTankSprite[i].setVisible(true);
        m_userTankSprite[i].setRefPixelPosition(startPosX +
                                                i * PANEL_ICON_IMAGE_WIDTH,
                                                startPosY);
        m_layerManager.insert(m_userTankSprite[i], 0);
      }
      //剩余炸弹的图标
      m_planeSprite = new Sprite[MAX_BOMB_COUNT];
      for (int i = 0; i < MAX_BOMB_COUNT; i++) {
        m_planeSprite[i] = new Sprite(m_panelIcon, PANEL_ICON_IMAGE_WIDTH,
                                      PANEL_ICON_IMAGE_HEIGHT);
        m_planeSprite[i].setVisible(true);
        m_planeSprite[i].setRefPixelPosition(bombStartPosX +
                                             i * PANEL_ICON_IMAGE_WIDTH,
                                             bombStartPosY);
        m_layerManager.insert(m_planeSprite[i], 0);
      }



      //green background for menu button
      Image menuBKImage = Image.createImage(MENU_RECT_WIDTH, MENU_RECT_HEIGHT);
      m_menuBackgroundSprite = new Sprite(menuBKImage, MENU_RECT_WIDTH,
                                          MENU_RECT_HEIGHT);
      m_menuBackgroundSprite.setRefPixelPosition(MENU_RECT_X, MENU_RECT_Y);
      m_menuBackgroundSprite.setVisible(false);
      m_layerManager.insert(m_menuBackgroundSprite, 0);
      g = menuBKImage.getGraphics();
      g.setColor(2, 56, 0);
      g.fillRect(0, 0, MENU_RECT_WIDTH, MENU_RECT_HEIGHT);
      g.setColor(127, 255, 0);
      g.drawRect(0, 0, MENU_RECT_WIDTH, MENU_RECT_HEIGHT);
      g = null;
      menuBKImage = null;


      createMenuButton();
      createSwitch();
      createButton();

      g=getGraphics();
     DrawTools.displayProgressBarScreen(g, m_progressImage, m_progressOneImage,
                                        m_topPanel, m_backgroundImg,
                                        70);
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
  }

  private void displayStage() {

    try {
      if (null == m_stageNumImage) {
        return;
      }

      Graphics g = getGraphics();

      //get the tens digit
      int tenDigit = GameLogic.m_currentStage / 10;
      int indDigit = GameLogic.m_currentStage % 10;
      //draw digit
      DrawTools.XDrawImage(g, m_stageNumImage, STAGE_X,
                           STAGE_Y,
                           tenDigit * STAGE_NUM_WIDTH, 0, STAGE_NUM_WIDTH,
                           STAGE_NUM_HEIGHT);
      DrawTools.XDrawImage(g, m_stageNumImage,
                           STAGE_X+STAGE_NUM_WIDTH,
                           STAGE_Y,
                           indDigit * STAGE_NUM_WIDTH, 0, STAGE_NUM_WIDTH,
                           STAGE_NUM_HEIGHT);
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
  }


//实时显示积分
  private void displayPoints() {
    if(GameLogic.m_tank==null||null==m_pointNumImageSprite){
      return;
    }

    int points = GameLogic.m_tank.getPoints();
    m_strPoints.delete(0,POINT_NUM_COUNT-1);
    m_strPoints.append(points);
    //转换成字符串
    //获得每个位上的数值
    //显示每个位上的值
    for (int i = 0; i < POINT_NUM_COUNT; i++) {
      m_pointNumImageSprite[i].setFrame(0);
    }
    for (int i = 0; i < m_strPoints.length(); i++) {
      m_pointNumImageSprite[POINT_NUM_COUNT-m_strPoints.length()+i].setFrame(Character.digit(m_strPoints.charAt(i),10));
    }
  }

  private void displayBombIcons() {
    try {
      if(null ==GameLogic.m_tank||null==m_planeSprite){
        return;
      }

      int bombCount = GameLogic.m_tank.getBombCount();
      for (int i = 0; i < bombCount; i++) {
        m_planeSprite[i].setFrame(PANEL_ICON_IMAGE_BOMB_AVAILABLE);
        if(false== m_planeSprite[i].isVisible()){
          m_planeSprite[i].setVisible(true);
        }
      }
      for (int i = bombCount; i < MAX_BOMB_COUNT; i++) {
        m_planeSprite[i].setFrame(PANEL_ICON_IMAGE_BOMB_USED);
        if(false== m_planeSprite[i].isVisible()){
          m_planeSprite[i].setVisible(true);
        }
      }

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

  private void displayEnemyTanks(){
    try {

      if(m_enemyNumImage==null ||null==m_graphics){
        return;
      }

      int enemyTank=GameLogic.getEnemyTankLeft();
      Graphics g=m_graphics;

      int indDigit=enemyTank%10;
      int tenDigit=enemyTank/10;
  //十位数
      DrawTools.XDrawImage(g,m_enemyNumImage,ENEMY_COUNT_X,ENEMY_COUNT_Y,tenDigit*DrawTools.ENEMY_NUM_WIDTH,0,
                           DrawTools.ENEMY_NUM_WIDTH,DrawTools.ENEMY_NUM_HEIGHT);
      DrawTools.XDrawImage(g,m_enemyNumImage,ENEMY_COUNT_X+DrawTools.ENEMY_NUM_WIDTH,ENEMY_COUNT_Y,
                           indDigit*DrawTools.ENEMY_NUM_WIDTH,0,
                           DrawTools.ENEMY_NUM_WIDTH,DrawTools.ENEMY_NUM_HEIGHT);
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
  }

  private void displayUserTankIcons() {
    if(null==GameLogic.m_tank||null==m_userTankSprite){
      return;
    }

    try {
      int tankLives = GameLogic.m_tank.getTankLives();
      for (int i = 0; i < tankLives; i++) {
        m_userTankSprite[i].setFrame(PANEL_ICON_IMAGE_TANK_ALIVE);
      }
      for (int i = tankLives; i < MAX_TANK_COUNT; i++) {
        m_userTankSprite[i].setFrame(PANEL_ICON_IMAGE_TANK_DEAD);
      }
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
  }

  private static void releaseMenuButton(){
    m_menuButtonImg=null;
    m_menuWordImg=null;

    for (int i = 0; i < MENU_BUTTON_COUNTS; i++) {
      if (null != m_menuButtonImgSprite && null != m_menuButtonImgSprite[i]) {
        m_layerManager.remove(m_menuButtonImgSprite[i]);
        m_menuButtonImgSprite[i] = null;
      }

    }
    m_menuButtonImgSprite = null;

    for (int i = 0; i < MENU_BUTTON_COUNTS; i++) {
      if (null != m_menuWordImgSprite && null != m_menuWordImgSprite[i]) {
        m_layerManager.remove(m_menuWordImgSprite[i]);
        m_menuWordImgSprite[i] = null;
      }

    }
    m_menuWordImgSprite = null;
  }


  private void createSwitch() {
    try {
      m_switchImg = null;
      m_switchImg = Image.createImage("/tank/map_res/switch.png");
      m_switchIndex=new int[DrawTools.SWITCH_WORD_COUNTS];
      m_switchImgSprite = new Sprite[DrawTools.SWITCH_WORD_COUNTS];

      for(int i=0;i<DrawTools.SWITCH_WORD_COUNTS;i++){
        m_switchImgSprite[i] = new Sprite(m_switchImg, DrawTools.SWITCH_WORD_WIDTH,
                                     DrawTools.SWITCH_WORD_HEIGHT);
       m_layerManager.insert(m_switchImgSprite[i], 0);
      }
      if(GameLogic.m_soundOn==true){
    	  m_switchState=DrawTools.SWITCH_OPEN;
      }else{
    	  m_switchState=DrawTools.SWITCH_CLOSE;

⌨️ 快捷键说明

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