📄 battlecanvas.java
字号:
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 + -