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