📄 playscreen.java
字号:
/*
* Created on 2006-5-20
*
* 主游戏界面
*/
package com.thinkenjoy.feitian.screen;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import com.thinkenjoy.control.ActorCanvas;
import com.thinkenjoy.control.Control;
import com.thinkenjoy.control.KeyMap;
import com.thinkenjoy.control.ThreadCanvas;
import com.thinkenjoy.feitian.Enemy;
import com.thinkenjoy.feitian.MovingObject;
import com.thinkenjoy.feitian.MovingObjectPool;
import com.thinkenjoy.feitian.Player;
import com.thinkenjoy.feitian.Stage;
import com.thinkenjoy.tools.ImageSet;
import com.thinkenjoy.tools.Tools;
import com.thinkenjoy.feitian.*;
/**
* 主游戏界面
*/
public class PlayScreen extends ActorCanvas {
public static int pass = 0;
public static boolean hasPass = false;
public static final short PLAY_START_Y = 16;
private static final short BOMB_POINT_START_X = 4;
private static final short BOMB_POINT_START_Y = 183;
private static final short BOMB_START_X = 5;
//#if NOK_7210 || NOK_7260
//# public static final short PLAY_END_Y = 120;
//# private static final short BOMB_START_Y = 115;
//#else
//#if NOK_7370 || MOT_E2
//# public static final short PLAY_END_Y = 315;
//# private static final short BOMB_START_Y = 300;
//#else
//#if NOK_6101
//# public static final short PLAY_END_Y = 155;
//# private static final short BOMB_START_Y = 150;
//#else
public static final short PLAY_END_Y = 191;
private static final short BOMB_START_Y = 180;
//#endif
//#endif
//#endif
public static final short PLAY_SCREEN_HEIGHT = 176;
private static final short BOMB_WIDTH = 11;
private static final short BOMB_POINT_WIDTH = 1;
private static final short BOMB_POINT_SEPERATE = 2;
private static final short BOMB_POINT_HEIGHT = 8;
private static final byte START_STATE = 0;
private static final byte PLAY_STATE = 1;
public static byte state;
private int stageNumStartX;
private int stageNumStartY;
private int changeColorDelay;
private String confirmButton;
private byte fontHeight;
private short buttonWidth;
Image treasureEffect;
public static final int NULL = -1;
public static final int REFRESH_RATE = 50;
public static final int MAX_ENEMY_NUM = 20;
public static final int MAX_TOP_SCORE = 8;
/**
* 宝物的索引值
*/
/**
* 小血,10分
*/
static final int TREASURE_01 = 0x06;
/**
* 大血,30分
*/
static final int TREASURE_02 = 0x07;
/**
* 火力卷轴,攻击强度增加
*/
static final int TREASURE_03 = 0x08;
/**
* 立即获得一颗炸弹
*/
static final int TREASURE_04 = 0x09;
private boolean isKeyUp;
private boolean isKeyDown;
private boolean isKeyLeft;
private boolean isKeyRight;
private boolean isKeyFire;
private static PlayScreen instance;
private ImageSet treasureImageSet;
private static Player player;
private static Enemy boss;
public Stage stage;
private Image bombImage;
private Image ui;
private MovingObjectPool treasurePool; //v
public static MovingObjectPool bulletPool; //s
public MovingObjectPool enemyPool; //t
public static MovingObjectPool enemyBulletPool; //u
private int delayChangeAuto;
/**
* 初始化基本对象,为子弹,敌人生成对象池
*/
private PlayScreen() {
changeColorDelay = 3;
confirmButton = "确定";
fontHeight = (byte) Font.getDefaultFont().getHeight();
buttonWidth = (short)Font.getDefaultFont().stringWidth(confirmButton);
bombImage = Tools.getImage("images/stuffs/bomb");
ui = Tools.getImage("images/title/ui");
treasureImageSet = new ImageSet(4);
//#if NOK_QD
//# for(int i = 0;i<4;i++) //宝物
//# {
//# Image[] treasureImage = new Image[2];
//# for(int j = 0; j<2 ;j++)
//# {
//# treasureImage[j] = Tools.getImage("images/stuffs/treasure"+(i*2+j));
//# }
//# treasureImageSet.addState(treasureImage,100);
//# }
//#else
Image treasureImage = Tools.getImage("images/stuffs/treasure");
//#if NOK_7210 || NOK_7260 || NOK_6101
//# treasureImageSet.addState(ImageSet.extractFrames(treasureImage,0,0,2,1,6,12),100);
//# treasureImageSet.addState(ImageSet.extractFrames(treasureImage,0,13,2,1,8,11),100);
//# treasureImageSet.addState(ImageSet.extractFrames(treasureImage,0,24,2,1,12,8),100);
//# treasureImageSet.addState(ImageSet.extractFrames(treasureImage,0,32,2,1,9,11),100);
//#else
treasureImageSet.addState(ImageSet.extractFrames(treasureImage,0,0,2,1,8,14),100);
treasureImageSet.addState(ImageSet.extractFrames(treasureImage,0,14,2,1,10,15),100);
treasureImageSet.addState(ImageSet.extractFrames(treasureImage,0,29,2,1,12,17),100);
treasureImageSet.addState(ImageSet.extractFrames(treasureImage,0,46,2,1,13,12),100);
//#endif
//#endif
/*
*/
//player = new Player(Control.currentPlayer, 1, 5, 5, -30, 89, 34, 25);
//TREASURE POOL
MovingObject treasure[] = new MovingObject[10]; //宝物对象池
for (int i = 0; i < treasure.length; i++) {
treasure[i] = new MovingObject(0, 80, 5, 5, 171, 89, 10, 10);
treasure[i].imageSet = treasureImageSet;
}
treasurePool = new MovingObjectPool(treasure);
Enemy[] mo_1 = new Enemy[20]; //敌人对象池
for (int i_2 = 0; i_2 < mo_1.length; ++i_2) {
mo_1[i_2] = new Enemy(0, 0, 0, 0, 0, 0, 0, 0);
}
enemyPool = new MovingObjectPool(mo_1);
stage = new Stage(1, "images/stage/", enemyPool, boss, treasurePool);
MovingObject[] mo_2 = new MovingObject[15]; //子弹对象池
for (int i_3 = 0; i_3 < mo_2.length; ++i_3) {
mo_2[i_3] = new MovingObject(0, 0, 0, 0, 0, 0, 0, 0);
}
bulletPool = new MovingObjectPool(mo_2);
MovingObject[] mo_3 = new MovingObject[35];
for (int i_4 = 0; i_4 < mo_3.length; ++i_4) {
mo_3[i_4] = new MovingObject(0, 0, 0, 0, 0, 0, 0, 0);
}
enemyBulletPool = new MovingObjectPool(mo_3);
System.gc();
}
/**
* 产生自我的对象
* @return
*/
public static PlayScreen getInstance() {
if (instance == null) {
instance = new PlayScreen();
}
return instance;
}
/**
* 生成玩家,BOSS的对象
*
*/
public static void initialNewCase() {
player = new Player(Control.currentPlayer, 1, 5, 5, -30, 89, 34, 25);
boss = new Enemy(15, 1, 4, 4, 166, 30 + 3, 22, 16);
boss.dead();
}
public void initial() {
state = START_STATE;
player.initial(Control.currentPlayer + 1);
}
/**
* 清空缓冲池里面正在用的数据
*
*/
private void clearPool() {
//宝物
MovingObject treasure = getTreasurePool().getFirstUsed();
while (treasure != null) {
MovingObject next = treasure.getNextLinked();
releaseTreasure(treasure);
treasure = next;
}
//玩家子弹
MovingObject bullet = getBulletPool().getFirstUsed();
while(bullet != null)
{
MovingObject next = bullet.getNextLinked();
releaseBullet(bullet);
bullet = next;
}
MovingObject eBullet = getEnemyBulletPool().getFirstUsed();
while(eBullet != null)
{
MovingObject next = eBullet.getNextLinked();
releaseEnemyBullet(eBullet);
eBullet = next;
}
//敌人
MovingObject enemy = getEnemyPool().getFirstUsed();
while(enemy != null)
{
MovingObject next = enemy.getNextLinked();
releaseEnemy(enemy);
enemy = next;
}
}
/**
* 刷新
*
*/
public void cycle() {
if (state == PLAY_STATE) {
if (stage.canChangeStage()) {
if (Control.getStage() + 1 > Stage.MAX_STAGE) {
Control.setVictory(true);
// Control.show(Control.GAME_END_STAGE);
} else {
clearPool();
Control.setStage(Control.getStage() + 1);
state = START_STATE;
// Control.playGameMusic();
}
} else {
if (player.getLife() <= 0) {
if (Control.getStage() == 4) {
Control.setVictory(true);
} else {
Control.setVictory(false);
}
// Control.show(Control.GAME_END_STAGE);
} else {
playGameStage();
}
}
}
}
/**
* 绘制住界面与UI,以及敌人,子弹和玩家
*/
public void paint(Graphics g) {
switch (state) {
case START_STATE:
g.setColor(0);
g.fillRect(0,0,ThreadCanvas.SCREEN_WIDTH,ThreadCanvas.SCREEN_HEIGHT);
g.setColor(56576);
stageNumStartX = ThreadCanvas.SCREEN_WIDTH / 2 - 18;
stageNumStartY = ThreadCanvas.SCREEN_HEIGHT / 2 - 24;
switch (Control.getStage()) {
case 1: // '\001'
g.drawString("第一关", stageNumStartX, stageNumStartY, 20);
g.drawString("撒哈拉沙漠(白日)", stageNumStartX - 40, stageNumStartY + 30, 20);
break;
case 2:
g.drawString("第二关", stageNumStartX, stageNumStartY, 20);
g.drawString("撒哈拉沙漠(夜晚)", stageNumStartX - 40, stageNumStartY + 30, 20);
break;
case 3:
g.drawString("第三关", stageNumStartX, stageNumStartY, 20);
g.drawString("魔神废墟(外城)", stageNumStartX - 40, stageNumStartY + 30, 20);
break;
case 4:
g.drawString("第四关", stageNumStartX, stageNumStartY, 20);
g.drawString("魔神废墟(内城)", stageNumStartX - 40, stageNumStartY + 30, 20);
break;
}
if (--changeColorDelay <= 0) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -