📄 gamescreen.java
字号:
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
public class GameScreen extends Canvas implements Runnable{
static final int LOGOSPLASH = 0; //LOGO闪屏
static final int MUSICSELECT = 1; //音乐开关选择界面
static final int MAINMENU = 2; //主菜单
static final int GAMELOADING = 3; //游戏加载
static final int NEWGAME = 4; //新游戏
static final int TRAINING = 5; //训练
static final int SETTING = 6; //设置
static final int HIGHTSCORE = 7; //高分榜
static final int GAMEHELP = 8; //帮助
static final int GAMEABOUT = 9; //关于
static final int QUIT = 10; //退出
static int screenW;
static int screenH;
public GameScreen(GameMIDlet midlet){
this.midlet = midlet;
setFullScreenMode(true);
screenW = 176;
screenH = 208;
bufferImage = Image.createImage(screenW,screenH);
bg = bufferImage.getGraphics();
gameState = LOGOSPLASH;
//gameState = MAINMENU;
buildUpObject();
initGame();
start();
}
//创建对象
private void buildUpObject() {
switch(gameState){
case LOGOSPLASH:
glogo = new GameLogo(this);
break;
case MAINMENU:
gmenu = new GameMenu(this);
break;
case NEWGAME:
gstart = new GameStart(this);
break;
case TRAINING:
break;
case SETTING:
gset = new GameSetting(this);
break;
case GAMEHELP:
ghelp = new GameHelp(this);
break;
case HIGHTSCORE:
grecord = new GameRecord(this);
break;
case GAMEABOUT:
gabout = new GameAbout(this);
break;
}
}
//启动线程
private void start() {
gameRun = true;
Thread t = new Thread(this);
t.start();
}
//初始化
protected void initGame(){
switch(gameState){
case LOGOSPLASH:
glogo.init();
break;
case MUSICSELECT:
break;
case GAMELOADING:
break;
case MAINMENU:
gmenu.init();
break;
case NEWGAME:
gstart.init();
break;
case TRAINING:
break;
case SETTING:
gset.init();
break;
case HIGHTSCORE:
grecord.init();
break;
case GAMEHELP:
ghelp.init();
break;
case GAMEABOUT:
gabout.init();
break;
case QUIT:
break;
}
}
protected void paint(Graphics g) {
// 清屏
g.setColor(0xffffff);
g.fillRect(0, 0, screenW, screenH);
// 绘制离屏屏幕
drawBufferScreen();
// 绘制离屏屏幕到主屏幕
g.drawImage(bufferImage, 0, 0, Graphics.TOP | Graphics.LEFT);
}
private void drawBufferScreen() {
// 清屏
bg.setColor(0xffffff);
bg.fillRect(0, 0, screenW, screenH);
switch(gameState){
case LOGOSPLASH:
glogo.paint(bg);
break;
case MUSICSELECT:
break;
case GAMELOADING:
break;
case MAINMENU:
gmenu.paint(bg);
break;
case NEWGAME:
gstart.paint(bg);
break;
case TRAINING:
break;
case SETTING:
gset.paint(bg);
break;
case HIGHTSCORE:
grecord.paint(bg);
break;
case GAMEHELP:
ghelp.paint(bg);
break;
case GAMEABOUT:
gabout.paint(bg);
break;
case QUIT:
break;
}
}
private void destroy() {
midlet.destroyApp(true);
midlet.notifyDestroyed();
}
public void run() {
while(gameRun){
long lastTime = System.currentTimeMillis(); //记录初始时间
switch(gameState){
case LOGOSPLASH:
glogo.run();
break;
case MUSICSELECT:
break;
case GAMELOADING:
break;
case MAINMENU:
gmenu.run();
break;
case NEWGAME:
gstart.run();
break;
case TRAINING:
break;
case SETTING:
gset.run();
break;
case HIGHTSCORE:
//grecord.run();
break;
case GAMEHELP:
ghelp.run();
break;
case GAMEABOUT:
gabout.run();
break;
case QUIT:
destroy();
break;
}
repaint();
try {
long currTime = System.currentTimeMillis(); //获取当前时间
long takenTime = currTime - lastTime; //计算时间间隔
if(takenTime<deltaTime){ //休眠
Thread.sleep(deltaTime-takenTime);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
protected void keyPressed(int keyCode){
switch(gameState){
case LOGOSPLASH:
glogo.keyPress(keyCode);
break;
case MUSICSELECT:
break;
case GAMELOADING:
break;
case MAINMENU:
gmenu.keyPress(keyCode);
break;
case NEWGAME:
gstart.keyPress(keyCode);
break;
case TRAINING:
break;
case SETTING:
gset.keyPress(keyCode);
break;
case HIGHTSCORE:
grecord.keyPress(keyCode);
break;
case GAMEHELP:
ghelp.keyPress(keyCode);
break;
case GAMEABOUT:
gabout.keyPress(keyCode);
break;
case QUIT:
break;
}
}
// 获取MIDlet
public GameMIDlet getMIDlet(){
return midlet;
}
// 设置游戏状态
public void setGameState(int currState){
releaseRes();
gameState = currState;
buildUpObject();
initGame();
}
// 资源释放
private void releaseRes() {
switch(gameState){
case LOGOSPLASH:
glogo.releaseRes();
break;
case MUSICSELECT:
break;
case GAMELOADING:
break;
case MAINMENU:
gmenu.releaseRes();
break;
case NEWGAME:
gstart.releaseRes();
break;
case TRAINING:
break;
case SETTING:
break;
case HIGHTSCORE:
break;
case GAMEHELP:
break;
case GAMEABOUT:
break;
case QUIT:
break;
}
wait(3);
}
// 暂停
public void wait(int millis){
try {
Thread.sleep(millis);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 获取当前游戏状态
public int getGameState(){
return gameState;
}
public GamePlayer[] getPlayer(){
return gplayer;
}
private GameMIDlet midlet;
private static boolean gameRun = false;
private static int gameState;
private final int deltaTime = 80;
private static Image bufferImage = null;
private static Graphics bg = null;
private static GameLogo glogo = null;
private static GameMenu gmenu = null;
private static GameStart gstart = null;
private static GameSetting gset = null;
private static GameRecord grecord = null;
private static GameHelp ghelp = null;
private static GameAbout gabout = null;
private static GamePlayer gplayer[] = null;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -