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

📄 battlecanvas.java

📁 这是我在原来单位的时候写的一个坦克大战的J2ME游戏的代码,可以给其他作J2ME游戏的人作个参考
💻 JAVA
📖 第 1 页 / 共 5 页
字号:

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

class PropertyTimerTask extends TimerTask{
  PropertySprite m_propertySprite;

  public PropertyTimerTask(PropertySprite property){
    super();
    m_propertySprite = property;
  }

  public  void run(){
    m_propertySprite.timeout();
  }
}

class PropertySprite extends Sprite {
   private int m_property;
   private int m_currentState;
   private boolean m_threadAlive = true;
   private boolean m_blinkTimeout ;//whether a blink timeout or not

   private final static int PROPERTY_EXISTS_TIME = 10*1000;
   private final static int PROPERTY_BLINK_TIME =   5*1000;

   PropertyTimerTask m_timerTask;
   Timer  m_timer;

   public PropertySprite(Image image, int frameWidth, int frameHeight,
                         int property) {
     super(image, frameWidth, frameHeight);
     m_property = property;
     m_currentState = GameLogic.GAME_STATE_READY;
     setFrame(m_property);

     m_timerTask = new PropertyTimerTask(this);
     m_timer = new Timer();
   }

   private void process(){
   }

   public int getPropertyType(){
	   return m_property;
   }


   public int getGameState(){
   	return m_currentState;
   }

   public void blink() {
     m_blinkTimeout = true;
     //begin a 5 seconds timer for blinking
     //begin a timer for 5 seconds for blinking
     if (null == m_timerTask) {
       m_timerTask = new PropertyTimerTask(this);
     }
     m_timer.schedule(m_timerTask, PROPERTY_BLINK_TIME);
   }

   public void timeout() {
     m_timerTask = null;
     if(m_blinkTimeout){
       reset();
     }else{
       m_currentState = GameLogic.GAME_STATE_LOOP;
       blink();
     }
   }

   public void reset(){
     m_currentState = GameLogic.GAME_STATE_READY;
     setVisible(false);
     if(null != m_timerTask){
       m_timerTask.cancel();
       m_timerTask =null;
     }
   }

   public void start() {
     m_currentState = GameLogic.GAME_STATE_LOOP;
     if (false == isVisible()) {
       setVisible(true);
     }

     //begin a timer for 10seconds
     if (null == m_timerTask) {
       m_timerTask = new PropertyTimerTask(this);
     }
     m_timer.schedule(m_timerTask, PROPERTY_EXISTS_TIME);
   }

   public void stop(){
     m_currentState = GameLogic.GAME_STATE_END;
     m_threadAlive = false;

     //release resources
     if(null != m_timerTask){
       m_timerTask = null;
     }
     m_timer = null;
   }

}

public class BattleCanvas
    extends GameCanvas {
  //user defined members
  private static boolean m_threadAlive = true;
  private static int m_currentState;
  private static boolean m_popupGameMenu;//whether pop up the game menu


  private static int m_currentMenuButtonIndex;
//map
  private static GameLogic m_gameLogic;
  public static LayerManager m_layerManager;
  private static StringBuffer m_strPoints;
  private static Graphics m_graphics;

  //Image资源
  //progress bar resources
  private static Image m_progressImage;
  private static Image m_progressOneImage;
  private static Image m_topPanel;
  private static Image m_backgroundImg;
  private static boolean m_bInProgress;
  private static int m_progress;
  //button
  //button sprite
  private static Sprite[] m_buttonSprite;
  private static Image m_buttonImage;

  private static Image m_panelIcon;//在PANEL上要显示的坦克图标,飞机图标等等.
  private static Image m_shadowImage;//装饰性的条纹
  private static Image m_enemyNumImage;//敌人坦克数目
  private static Image m_pointNumImage;//当前计分
  private static Sprite[] m_pointNumImageSprite;
  private static Image m_stageNumImage;//当前关卡
  private static Sprite[] m_stageNumImageSprite;

  private static Sprite m_topPanelImageSprite;
  private static Sprite m_bottomPanelImageSprite;

  private static Image m_shadowImage1;
  private static Sprite m_shadowImage1Sprite;
  private static Image m_shadowImage2;
  private static Sprite m_shadowImage2Sprite;
  private static Image m_shadowImage3;
  private static Sprite m_shadowImage3Sprite;

  private static Sprite m_goldCoinImageSprite;
  private static Sprite m_XImageSprite;
  private static Sprite m_enemyTankImageSprite;

  private static Sprite []m_userTankSprite;//要在panel上显示的用户坦克
  private static Sprite []m_planeSprite;//剩余的炸弹的个数

  //menu button
  private static Image m_menuButtonImg; //menu_button.png
  private static Image m_menuWordImg; //
  private static Sprite[] m_menuWordImgSprite;
  private static Sprite[] m_menuButtonImgSprite;

  private static Sprite m_menuBackgroundSprite;

  //switch word
  private static Image m_switchImg;
  private static Sprite[] m_switchImgSprite;
  private static int[] m_switchIndex;
  private static int m_switchState;//open/close

 private final static int MENU_BUTTON_MUSIC=3;
//constant macro
  private final static int MENU_BUTTON_COUNTS = 5;
  private final static int MAX_TANK_COUNT=5;
  private final static int MAX_BOMB_COUNT=3;
  private final static int ENEMY_NUM_COUNT=2;
  private final static int STAGE_NUM_COUNT=2;
  private final static int POINT_NUM_COUNT=7;

//width/height
  private final static int PANEL_ICON_IMAGE_WIDTH=18;
  private final static int PANEL_ICON_IMAGE_HEIGHT=14;
  private final static int PANEL_ICON_STAGE_WIDTH=15;
  private final static int PANEL_ICON_STAGE_HEIGHT=14;
  private final static int PANEL_ICON_POINT_WIDTH=6;
  private final static int PANEL_ICON_POINT_HEIGHT=10;
  private final static int PANEL_ICON_ENEMY_WIDTH=7;
  private final static int PANEL_ICON_ENEMY_HEIGHT=10;

  private final static int STAGE_NUM_WIDTH=17;
  private final static int STAGE_NUM_HEIGHT=21;
//index
  private final static int PANEL_ICON_IMAGE_GOLD_COIN=0;
  private final static int PANEL_ICON_IMAGE_ENEMY_TANK=1;
  private final static int PANEL_ICON_IMAGE_TANK_ALIVE=2;
  private final static int PANEL_ICON_IMAGE_TANK_DEAD=3;
  private final static int PANEL_ICON_IMAGE_BOMB_AVAILABLE=4;
  private final static int PANEL_ICON_IMAGE_BOMB_USED=5;
  private final static int PANEL_ICON_IMAGE_X=7;

  //current selection in game menu
  private final static int BACKWAR_INDEX_SELECTED=0;
  private final static int LOADPROGRESS_INDEX_SELECTED=1;
  private final static int TRAINING_INDEX_SELECTED=2;
  private final static int MUSIC_INDEX_SELECTED=3;
  private final static int BACKMENU_INDEX_SELECTED=4;

  //position(x,y)
  private final static int PANEL_ICON_GOLD_COIN_POS_X=16;
  private final static int PANEL_ICON_GOLD_COIN_POS_Y=6;
  private final static int ENEMY_COUNT_X=212;
  private final static int ENEMY_COUNT_Y=4;
  //x pos
  private final static int PANEL_ICON_X_POS_X=198;
  private final static int PANEL_ICON_X_POS_Y=2;
  private final static int MENU_BUTTON_X=67;
  private final static int MENU_BUTTON_Y=100;

  private final static int STAGE_X=104;
  private final static int STAGE_Y=1;

  private final static int[] chosenWordIndex = {
         DrawTools.MENU_BUTTON_WORD_INDEX_BACKWAR_CHOSEN,
         DrawTools.MENU_BUTTON_WORD_INDEX_LOAD_CHOSEN,
         DrawTools.MENU_BUTTON_WORD_INDEX_TRAINING_CHOSEN,
         DrawTools.MENU_BUTTON_WORD_INDEX_MUSIC_CHOSEN,
         DrawTools.MENU_BUTTON_WORD_INDEX_BACKMENU_CHOSEN
     };

     private final static int[] unchosenWordIndex = {
         DrawTools.MENU_BUTTON_WORD_INDEX_BACKWAR_UNCHOSEN,
         DrawTools.MENU_BUTTON_WORD_INDEX_LOAD_UNCHOSEN,
         DrawTools.MENU_BUTTON_WORD_INDEX_TRAINING_UNCHOSEN,
         DrawTools.MENU_BUTTON_WORD_INDEX_NUSIC_UNCHOSEN,
         DrawTools.MENU_BUTTON_WORD_INDEX_BACKMENU_UNCHOSEN
     };

     private  final static int MENU_RECT_X=60;
     private  final static int MENU_RECT_Y=90;
     private  final static int MENU_RECT_WIDTH=120;
     private  final static int MENU_RECT_HEIGHT=130;



  private static BattleCanvas instance;
  
  private static Sprite m_canvasSprite;
  private static Image m_canvasImage;
  private int m_gameStartFrame=0;
  private static int GAME_START_FRAMES=10;
  
  synchronized public static BattleCanvas getInstance() {
    if (instance == null)
      instance = new BattleCanvas();
    return instance;
  }


  private static void createButton(){
    try {
      m_buttonImage = Image.createImage("/tank/map_res/factory_bottom_word.png");
      //button,确定/返回
      m_buttonSprite = new Sprite[DrawTools.BUTTON_SPRITE_COUNTS];
      for (int i = 0; i < DrawTools.BUTTON_SPRITE_COUNTS; i++) {
        m_buttonSprite[i] = new Sprite(m_buttonImage, DrawTools.BUTTON_IMAGE_WIDTH,
                                       DrawTools.BUTTON_IMAGE_HEIGHT);
        m_layerManager.insert(m_buttonSprite[i], 0);
      }

      int []buttonIndex={DrawTools.BUTTON_INDEX_MENU};
      DrawTools.displayButton(m_buttonSprite,1,buttonIndex);

    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
  }
  
  private  void createCanvasSprite() {
		try {
			m_canvasImage=Image.createImage(getWidth(),getHeight());
			m_canvasSprite=new Sprite(m_canvasImage,getWidth(),getHeight());
			m_layerManager.insert(m_canvasSprite,0);
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
  
  private void displayStartScreen() {
		try {
			Graphics g = null;
			if (0 == m_gameStartFrame) {
				g = m_canvasImage.getGraphics();
			}
			m_gameStartFrame++;
			if (false == m_canvasSprite.isVisible()) {
				m_canvasSprite.setVisible(true);
			}
			/**
			 * 1.screen display black at first 
			 * 2.top and bottom panel start move
			 * along the reverse direction.the black screen disappears; 
			 * 3.when the black screen disappears,display the map;
			 */
			

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

  public BattleCanvas() {
    super(false);

    try {
    	
      m_currentState = GameLogic.GAME_STATE_READY;
      m_layerManager = new LayerManager();
      m_gameLogic = new GameLogic(m_layerManager, getGraphics(), this.getWidth(),
                                  this.getHeight());
      loadResource();
      System.gc();
      //load map source
      System.gc();

      Graphics g = getGraphics();

      m_gameLogic.setGameState(GameLogic.GAME_STATE_READY);

      setFullScreenMode(true);
      m_currentMenuButtonIndex = 0;
      m_threadAlive = true;

      DrawTools.displayProgressBarScreen(g, m_progressImage, m_progressOneImage,
                                         m_topPanel, m_backgroundImg,
                                         100);
      
      start();

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

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

      m_topPanel = null;
      m_panelIcon = null;
      m_shadowImage = null;
      m_enemyNumImage = null;
      m_pointNumImage = null;
      m_stageNumImage = null;
      m_shadowImage1 = null;
      m_shadowImage2 = null;
      m_shadowImage3 = null;

	  m_strPoints=null;
          m_buttonImage=null;

      if (null != m_topPanelImageSprite) {
        m_layerManager.remove(m_topPanelImageSprite);
        m_topPanelImageSprite = null;
      }
      if (null != m_bottomPanelImageSprite) {
        m_layerManager.remove(m_bottomPanelImageSprite);
        m_bottomPanelImageSprite = null;
      }
      if (null != m_shadowImage1Sprite) {
        m_layerManager.remove(m_shadowImage1Sprite);
        m_shadowImage1Sprite = null;
      }
      if (null != m_shadowImage2Sprite) {
        m_layerManager.remove(m_shadowImage2Sprite);
        m_shadowImage2Sprite = null;
      }
      if (null != m_shadowImage3Sprite) {
        m_layerManager.remove(m_shadowImage3Sprite);
        m_shadowImage3Sprite = null;
      }
      if (null != m_goldCoinImageSprite) {
        m_layerManager.remove(m_goldCoinImageSprite);
        m_goldCoinImageSprite = null;
      }
      if (null != m_enemyTankImageSprite) {
        m_layerManager.remove(m_enemyTankImageSprite);
        m_enemyTankImageSprite = null;
      }

      if (null != m_XImageSprite) {
        m_layerManager.remove(m_XImageSprite);
        m_XImageSprite = null;

      }

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

      }
      m_pointNumImageSprite = null;

⌨️ 快捷键说明

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