📄 ge.java
字号:
//}
/* handle the problem ------------------------------------------------------
static void handleException(String info, Exception e)
{
System.out.println( info + " error: " + e.getMessage() );
m_midlet.notifyDestroyed();
}*/
//==========================================================================
// Game State
//==========================================================================
void levelFinished(boolean pass)
{
if (pass)
{
m_levelPassed[m_levelSelected] = 1;
m_levelPassTime = (m_curFrameTime - m_levelPassTime)/1000;
m_levelScore[m_levelSelected] = (short)(500 - m_levelPassTime - m_levelPassHurt*30 + LEVEL_SCORE[m_levelLoad]);//(m_levelPassHurt+2)/3;
if (m_levelScore[m_levelSelected] < 0) m_levelScore[m_levelSelected] = 0;
playSound(Def.SOUND_LEVELCLEARED_MID, 1);
saveRecord();
m_gameState = Def.STATE_END_LEVEL;
}
else
{
m_gameState = Def.STATE_GAMEOVER;
}
freeImages(false);
}
// update keys pressed
static void updateKeys()
{
m_inputTime++;
for (int key = 0; key <= Def.KEY_ATTACK; key++)
{
if (m_inputBuf[key] == Def.Up_Continuous)
{
if (m_input[key] == Def.Dn_Instant)
m_input[key] = Def.Dn_Continuous;
else if (m_input[key] == Def.Up_Instant)
m_input[key] = Def.Up_Continuous;
}
else
{
m_input[key] = m_inputBuf[key];
m_inputBuf[key] = Def.Up_Continuous;
}
}
m_input[Def.KEY_SOFT1] = Def.Up_Continuous;
m_input[Def.KEY_SOFT2] = Def.Up_Continuous;
m_input[Def.KEY_SOFT3] = Def.Up_Continuous;
}
// Update game state for each frame ----------------------------------------
void updateState()
{
if (m_blockKey) m_blockKey = false;
switch(m_gameState)
{
case Def.STATE_RUN:
if (m_msgIndex < 0)
{
if (m_input[Def.KEY_SOFT1] >= Def.Dn_Instant || m_input[Def.KEY_SOFT2] >= Def.Dn_Instant || m_input[Def.KEY_SOFT3] >= Def.Dn_Instant)
{
pauseGame();
}
else
{
m_player.updatePlayer();
}
}
break;
case Def.STATE_PAUSE:
if (m_input[Def.KEY_SOFT2] >= Def.Dn_Instant)
{
switch(m_pauseIndex)
{
case 0: // resume
m_pauseIndex = -1;
m_gameState = Def.STATE_RUN;
m_levelPassTime = m_curFrameTime - m_levelPassTime;
break;
case 1: // hint
m_playHint = (byte)(1-m_playHint);
saveRecord();
break;
case 2: // sound
//m_playSound = (byte)(1-m_playSound);
m_playSound = (byte)((m_playSound + 2) % 3);
if (m_playSound == 0) stopSound();
saveRecord();
break;
case 3: // Menu
m_pauseIndex = -1;
freeImages(false);
m_gameState = Def.STATE_MENU;
playSound(Def.SOUND_TITLE_MID, 1);
break;
case 4: // Exit
m_gameState = Def.STATE_EXIT;
break;
}
//playSound(Def.SOUND_SWITCHOPTIONS_MID, 1);
resetKey();
}
else if (m_input[Def.KEY_U] == Def.Dn_Instant || m_input[Def.KEY_L] == Def.Dn_Instant)
{
//playSound(Def.SOUND_SELECT_MID, 1);
m_pauseIndex = (m_pauseIndex+PAUSE_ITEM_NUM-1) % PAUSE_ITEM_NUM;
}
else if (m_input[Def.KEY_D] == Def.Dn_Instant || m_input[Def.KEY_R] == Def.Dn_Instant)
{
//playSound(Def.SOUND_SELECT_MID, 1);
m_pauseIndex = (m_pauseIndex+1) % PAUSE_ITEM_NUM;
}
break;
case Def.STATE_MENU:
if (m_input[Def.KEY_SOFT2] >= Def.Dn_Instant)
{
switch(m_menuIndex)
{
case 0: // new game
if (m_levelPassed[0] > 0)
{
m_gameState = Def.STATE_NEW_GAME;
}
else
{
m_textCounter = 0;
m_gameState = Def.STATE_BEGIN_SCREEN;
}
break;
case 1: // continue
for (int i = 0; i < Def.LEVEL_NUMBER; i++)
if (m_levelPassed[i] == 0)
{
m_levelSelected = i;
break;
}
m_gameState = Def.STATE_INIT_LEVEL;
//setCommands("", "");
break;
case 2: // free tour
m_gameState = Def.STATE_FREE_TOUR;
//setCommands("Menu", "Select");
break;
case 3: // option
m_optionIndex = 0;
m_gameState = Def.STATE_MENU_OPTION;
break;
case 4: // about
m_textCounter = 0;
m_gameState = Def.STATE_ABOUT;
break;
case 5: // Exit
m_gameState = Def.STATE_EXIT;
//setCommands("No", "Yes");
break;
}
//playSound(Def.SOUND_SWITCHOPTIONS_MID, 1);
resetKey();
}
else if (m_input[Def.KEY_U] == Def.Dn_Instant || m_input[Def.KEY_L] == Def.Dn_Instant)
{
//playSound(Def.SOUND_SELECT_MID, 1);
m_menuIndex = (m_menuIndex+MENU_ITEM_NUM-1) % MENU_ITEM_NUM;
if (m_menuIndex == 1 && (m_levelPassed[Def.LEVEL_NUMBER-1] > 0 || m_levelPassed[0] == 0)) // no continue when all level passed
m_menuIndex = 0;
}
else if (m_input[Def.KEY_D] == Def.Dn_Instant || m_input[Def.KEY_R] == Def.Dn_Instant)
{
//playSound(Def.SOUND_SELECT_MID, 1);
m_menuIndex = (m_menuIndex+1) % MENU_ITEM_NUM;
if (m_menuIndex == 1 && (m_levelPassed[Def.LEVEL_NUMBER-1] > 0 || m_levelPassed[0] == 0)) // no continue when all level passed
m_menuIndex = 2;
}
break;
case Def.STATE_MENU_OPTION:
if (m_input[Def.KEY_SOFT2] >= Def.Dn_Instant)
{
switch(m_optionIndex)
{
case 0: // resume
m_optionIndex = -1;
m_gameState = Def.STATE_MENU;
break;
case 1: // hint
m_playHint = (byte)(1-m_playHint);
saveRecord();
break;
case 2: // sound
//m_playSound = (byte)(1-m_playSound);
m_playSound = (byte)((m_playSound + 2) % 3);
if (m_playSound == 0) stopSound();
saveRecord();
break;
case 3: // controls
m_textCounter = 0;
m_gameState = Def.STATE_CONTROL;
break;
}
//playSound(Def.SOUND_SWITCHOPTIONS_MID, 1);
resetKey();
}
else if (m_input[Def.KEY_U] == Def.Dn_Instant || m_input[Def.KEY_L] == Def.Dn_Instant)
{
//playSound(Def.SOUND_SELECT_MID, 1);
m_optionIndex = (m_optionIndex+OPTION_ITEM_NUM-1) % OPTION_ITEM_NUM;
}
else if (m_input[Def.KEY_D] == Def.Dn_Instant || m_input[Def.KEY_R] == Def.Dn_Instant)
{
//playSound(Def.SOUND_SELECT_MID, 1);
m_optionIndex = (m_optionIndex+1) % OPTION_ITEM_NUM;
}
break;
case Def.STATE_INIT_LEVEL:
try {
switch(++m_progress)
{
case 1:
freeImages(false);
freeLevelData();
switchImage(Def.SWITCH_NONE);
break;
case 2:
if (loadPlayfield() == 0)
{
m_progress = 0;
m_mapBuf = null;
m_gameState = Def.STATE_MENU;
}
break;
case 3:
if (loadScene() == 0)
{
m_progress = 0;
m_player.freePlayer();
m_gameState = Def.STATE_MENU;
}
break;
case 4:
case 5:
case 6:
case 7:
case 8:
loadImages(false);
break;
case 9:
switchImage(Def.SWITCH_BG);
break;
case 10:
m_player.initPlayer();
break;
case 11:
m_gameState = Def.STATE_RUN;
// init variables
m_progress = 0;
m_msgIndex = -1;
m_msgLine = -1;
m_msgTime = 0;
m_levelPassHurt = 0;
m_levelPassTime = m_curFrameTime;
m_levelLoad = m_levelSelected;
resetKey();
playSound(Def.SOUND_LEVELBEGIN_MID, 1);
break;
}
System.gc();
} catch (Exception e) {
m_progress = 0;
freeImages(false);
freeLevelData();
m_gameState = Def.STATE_MENU;
}
break;
case Def.STATE_BEGIN_SCREEN:
if (m_textOver && m_lastInput != Def.KEY_NONE)
{
resetRecord();
m_levelSelected = 0;
m_gameState = Def.STATE_INIT_LEVEL;
}
break;
case Def.STATE_END_SCREEN:
if (m_textOver && m_lastInput != Def.KEY_NONE)
{
m_gameState = Def.STATE_SPLASH;
m_menuIndex = 2; // free tour
}
break;
case Def.STATE_END_LEVEL:
if (m_input[Def.KEY_SOFT2] >= Def.Dn_Instant)
{
if (m_levelSelected == Def.LEVEL_NUMBER-1)
{
m_levelSelected = 0;
m_textCounter = 0;
resetKey();
m_gameState = Def.STATE_END_SCREEN;
playSound(Def.SOUND_ENDING_MID, 1);
}
else
{
m_levelSelected++;
m_gameState = Def.STATE_INIT_LEVEL;
//setCommands("", "");
}
}
else if (m_input[Def.KEY_SOFT1] >= Def.Dn_Instant)
{
if (m_levelSelected != Def.LEVEL_NUMBER-1)
{
m_levelSelected++;
m_gameState = Def.STATE_MENU;
//setCommands("", "Select");
playSound(Def.SOUND_TITLE_MID, 1);
}
}
break;
case Def.STATE_GAMEOVER:
if (m_input[Def.KEY_SOFT2] >= Def.Dn_Instant)
{
m_gameState = Def.STATE_INIT_LEVEL;
//setCommands("", "");
}
else if (m_input[Def.KEY_SOFT1] >= Def.Dn_Instant)
{
m_gameState = Def.STATE_MENU;
//setCommands("", "Select");
playSound(Def.SOUND_TITLE_MID, 1);
}
break;
case Def.STATE_NEW_GAME:
if (m_input[Def.KEY_SOFT2] >= Def.Dn_Instant)
{
m_textCounter = 0;
m_gameState = Def.STATE_BEGIN_SCREEN;
resetKey();
}
else if (m_input[Def.KEY_SOFT1] >= Def.Dn_Instant)
m_gameState = Def.STATE_MENU;
break;
case Def.STATE_CONTROL:
if (m_textOver && m_lastInput != Def.KEY_NONE)
{
m_gameState = Def.STATE_MENU_OPTION;
}
break;
case Def.STATE_ABOUT:
if (m_textOver && m_lastInput != Def.KEY_NONE)
{
m_gameState = Def.STATE_MENU;
}
break;
case Def.STATE_FREE_TOUR:
if (m_input[Def.KEY_SOFT1] >= Def.Dn_Instant)
{
//GE.playSound(Def.SOUND_SWITCHOPTIONS_MID, 1);
m_gameState = Def.STATE_MENU;
//setCommands("", "Select");
}
else if (m_input[Def.KEY_SOFT2] >= Def.Dn_Instant)
{
if (m_levelPassed[m_levelSelected] > 0)
{
//playSound(Def.SOUND_SWITCHOPTIONS_MID, 1);
m_gameState = Def.STATE_INIT_LEVEL;
}
}
else if (m_input[Def.KEY_U] == Def.Dn_Instant)
{
//GE.playSound(Def.SOUND_SELECT_MID, 1);
m_levelSelected = (m_levelSelected+Def.LEVEL_NUMBER-1) % Def.LEVEL_NUMBER;
}
else if (m_input[Def.KEY_D] == Def.Dn_Instant)
{
//GE.playSound(Def.SOUND_SELECT_MID, 1);
m_levelSelected = (m_levelSelected+1) % Def.LEVEL_NUMBER;
}
break;
case Def.STATE_EXIT:
if (m_input[Def.KEY_SOFT1] >= Def.Dn_Instant)
{
m_gameState = (m_pauseIndex < 0) ? Def.STATE_MENU : Def.STATE_PAUSE;
//setCommands("", "Select");
}
else if (m_input[Def.KEY_SOFT2] >= Def.Dn_Instant)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -