📄 gamemodel.java
字号:
}
}
if (type != Globals.DISC && !g_bEnd_Stage)
doGroundChecking(ch);
if (type != Globals.QBERT) { //SLICK || type == Globals.SAM) {
checkCubeColor(ch);
}
}
} else { // need new moves
if (!ch.charOnBoard() && ch.charType() != Globals.QBERT) {
g_Arr1Enemies[ch.charIndex()] = null;
m_arrBoardDetails[ch.charType()] = 0;//false;
m_cur_Num_Enemies--;
} else {
if (g_bEnd_Stage && ch.charType() == Globals.QBERT)
finish_stage = true;
int dir = ch.charDir();
int row = ch.charRow();
int cube = ch.charCube();
}
if (finish_stage && g_bGame_Playing) {
setMode(Globals.MODE_DEATH);
}
}
}
private void moveCharOffScreen(CharacterSprite ch) {
int lives = m_pQBert.charLives() - 1;
m_pQBert.charLives(lives);
m_pBackGroundSprite.updateLivesLeft(lives);
ch.charShowChar(false);
}
private void incPoints(int dPoints) {
int old = m_pQBert.charScore();
int pts = old + dPoints;
boolean bGotLife = false;
if (old < 8000) {
if (pts >= 8000)
bGotLife = true;
} else if ((old-8000) % 14000 > (pts-8000) % 14000) {
bGotLife = true;
}
if (bGotLife) {
int lives = m_pQBert.charLives() + 1;
m_pQBert.charLives(lives);
m_pBackGroundSprite.updateLivesLeft(lives);
}
m_pQBert.charScore(pts);
m_pBackGroundSprite.updateScore(pts);
}
private void checkCubeColor(CharacterSprite ch) {
int row = ch.charRow();
int cube = ch.charCube();
int type = ch.charType();
if (row <= Globals.QBERT_DIMENSIONS && row > 0 && cube <= row && cube > 0) {
int next_color = 0;
int current_color = m_arr2BoardLayout[row - 1][cube - 1];
switch (type) {
case Globals.COILY :
/* Start Commented 21-03-2003 no audio sound for coily move */
//doSoundAction(QbertSound.SOUND_COILY);
/* End Commented 21-03-2003 */
break;
case Globals.SLICK:
case Globals.SAM:
// set current block to
if (current_color != m_startColor) {
m_arr2BoardLayout[row - 1][cube - 1] = m_startColor;
m_pBackGroundSprite.updateBoard(row - 1, cube - 1, m_startColor);
}
break;
case Globals.QBERT :
/* Start Modified 21-03-2003 no audio for qbert move */
//doSoundAction(QbertSound.SOUND_QBERT);
/* End Modified 21-03-2003 */
g_ToDisc_Row = m_pQBert.charRow();
g_ToDisc_Cube = m_pQBert.charCube();
if (current_color != m_endColor) {
if (m_numCubeColors == 3) {
if (current_color == m_interColor1) {
next_color = m_endColor;
incPoints(Globals.PT_CUBE_TO_FINAL_COLOR);
} else {
next_color = m_interColor1;
incPoints(Globals.PT_CUBE_TO_INTERIM_COLOR);
}
} else {
next_color = m_endColor;
incPoints(Globals.PT_CUBE_TO_FINAL_COLOR);
}
m_arr2BoardLayout[row - 1][cube - 1] = next_color;
m_pBackGroundSprite.updateBoard(row - 1, cube - 1, next_color);
} else {
// it is the end color... we need to see how we handle this
switch (m_cubeTurnBackType) {
// case Globals.LVL_CUBE_TBT_ONE_WAY: // doesn't do anything
// break;
case Globals.LVL_CUBE_TBT_TOGGLE_TOP:
if (m_numCubeColors == 3) {
next_color = m_interColor1;
} else {
next_color = m_startColor;
}
break;
case Globals.LVL_CUBE_TBT_CYCLE_TO_BEGINNING:
next_color = m_startColor;
break;
}
if (m_cubeTurnBackType != Globals.LVL_CUBE_TBT_ONE_WAY) {
m_arr2BoardLayout[row - 1][cube - 1] = next_color;
m_pBackGroundSprite.updateBoard(row - 1, cube - 1, next_color);
}
}
checkForEndCondition();
break;
}
}
}
private boolean checkForEndCondition() {
int cubeCount = 0;
for (int i=0; i < Globals.QBERT_DIMENSIONS; i++) {
for (int j=0; j < Globals.QBERT_DIMENSIONS; j++) {
if (m_arr2BoardLayout[i][j] == m_endColor) {
cubeCount++;
}
}
}
if (cubeCount >= Globals.MAX_CUBES) {
finishLevel();
return(true);
}
return(false);
}
private void finishLevel() {
setMode(Globals.MODE_LVL_COMPLETE_FLASHING);
doSoundAction(QbertSound.SOUND_LEVEL);
}
private void updateGameScreen() {
m_pGameScreen.repaint();
m_pGameScreen.serviceRepaints();
}
void drawSavingScreen(Graphics g) {
m_pBackGroundSprite.paint(g);
if (g_TimeStop > 0)
drawTimeStop(g);
drawDiscs(g);
drawEnemies(g);
/* Start Modified 25-04-2003 for chinese support */
Sprite.drawSavingWindow(g, " "+Globals.chineseString[Globals.MISC_TXT_OFFSET]);
/* End Modified 25-04-2003 */
}
void drawLoadingScreen(Graphics g) {
m_pBackGroundSprite.paint(g);
if (g_TimeStop > 0)
drawTimeStop(g);
drawDiscs(g);
drawEnemies(g);
/* Start Modified 25-04-2003 for chinese support */
Sprite.drawSavingWindow(g, " "+Globals.chineseString[Globals.MISC_TXT_OFFSET+1]);
/* End Modified 25-04-2003 */
}
void drawSelf(Graphics g) {
g.setColor(0x000000);
if (g_Game_Mode != Globals.MODE_INTRO) {
if (g_Game_Mode == Globals.MODE_LVL_COMPLETE_FLASHING) {
m_pBackGroundSprite.toggleBoardColor();
} else if (g_Game_Mode == Globals.MODE_LVL_COMPLETE_BONUS) {
if (m_pBackGroundSprite.getFlippedColor() != m_endColor) {
m_pBackGroundSprite.toggleBoardColor();
}
}
if (m_bQbertOnDisc && g_Game_Mode == Globals.MODE_NORMAL && m_flashCounter > 0) {
m_flashCounter--;
m_pBackGroundSprite.paint(g);
} else {
m_pBackGroundSprite.paint(g);
}
if (g_TimeStop > 0) {
drawTimeStop(g);
}
drawDiscs(g);
drawEnemies(g);
}
switch (g_Game_Mode) {
case Globals.MODE_NORMAL :
case Globals.MODE_BOARDRESET :
Sprite.drawQbert(g, m_pQBert);
break;
case Globals.MODE_GAMEOVER :
if (!m_pModeTimer.isOver()) {
boolean draw = false;
if ((m_transitionTicks % 4) > 0) {
draw = true;
}
Sprite.drawGameOver(g, draw);
m_pGameMidlet.g_bFinished_Game = false;
m_transitionTicks++;
} else if (!m_pGameMidlet.g_bFinished_Game) {
m_pGameMidlet.g_bFinished_Game = true;
m_pGameMidlet.m_bSavedGame = false;
m_pGameMidlet.m_bHasBeenSaved = false;
m_pGameMidlet.showHiScores(m_pQBert.charScore());
}
break;
case Globals.MODE_LVL_COMPLETE_FLASHING :
Sprite.drawQbert(g, m_pQBert);
break;
case Globals.MODE_LVL_COMPLETE_BONUS :
Sprite.drawQbert(g, m_pQBert);
drawLvlBonus(g);
break;
case Globals.MODE_LVLCOMPLETE :
Sprite.drawQbert(g, m_pQBert);
break;
case Globals.MODE_INTRO:
Sprite.drawIntroBackground(g, m_arr2IntroColorGrid, m_round, m_level);
Sprite.drawQbert(g, m_pQBert_Intro);
if (m_demoKey != -1) {
/* Start Addition 14-05-2003 for key 4,6 */
if(m_demoKey == (Globals.KEY_1_LL - Canvas.KEY_NUM0)
|| m_demoKey == (Globals.KEY_1_LR - Canvas.KEY_NUM0)){
g.setColor(255,255,4);
g.setFont(Globals.font);
g.drawString(Globals.chineseString[Globals.MISC_TXT_OFFSET+7],86,30,g.TOP |g.LEFT);
//Sprite.drawWord(g, 85, 30, "key");
Sprite.renderScore(g, m_demoKey - 3, 107, 36);
Sprite.drawWord(g,107, 36,"/");
Sprite.renderScore(g, m_demoKey, 119, 36);
}else {
/* End Addition 14-05-2003 */
/* Start Modified 25-04-2003 for chinese support */
g.setColor(255,255,4);
g.setFont(Globals.font);
g.drawString(Globals.chineseString[Globals.MISC_TXT_OFFSET+7],92,30,g.TOP |g.LEFT);
//Sprite.drawWord(g, 85, 30, "key");
Sprite.renderScore(g, m_demoKey, 115, 36);
/* End Modified 25-04-2003 */
}
}
break;
case Globals.MODE_COLLISION :
Sprite.drawQbert(g, m_pQBert);
drawEnemies(g);
Sprite.drawCurse(g, m_pQBert);
break;
}
if (g_bPaused && g_Game_Mode != Globals.MODE_GAMEOVER) {
if (g_Game_Mode != Globals.MODE_INTRO) {
Sprite.drawQbert(g, m_pQBert);
}
Sprite.drawPausedScreen(g, m_pGameScreen.m_selectedIndex);
}
}
private void drawTimeStop(Graphics g) {
int tick = g_TimeStop / 8;
Sprite.drawTimeStop(g, tick);
}
private void drawEnemies(Graphics g) {
for (int i = 0; i < 10; i++) {
if (g_Arr1Enemies[i] != null) {
Sprite.drawCharacter(g, 0, g_Arr1Enemies[i]);
}
}
}
private void drawLvlBonus(Graphics g) {
g.setColor(0);
/* Start Modified 25-04-2003 for chinese support */
g.fillRect(33, 94, 60, 15);
g.setColor(255,255,4);
g.setFont(Globals.font);
g.drawString(Globals.chineseString[Globals.MISC_TXT_OFFSET+2],34, 95,g.TOP | g.LEFT);
//Sprite.drawWord(g, 34, 95, "bonus");
Sprite.renderScore(g, m_waveBonus, 94, 98);
/* End Modified 25-04-2003 */
}
private void drawDiscs(Graphics g) {
int animate = 0;
if (g_bPaused) {
animate = -1;
}
for (int i = 0; i < Globals.MAX_DISCS; i++) {
if (g_Arr1Discs[i] != null) {
Sprite.renderDisc(g, animate, g_Arr1Discs[i]);
}
}
}
void moveQbert(int dir) {
if (g_bGame_Playing) {
g_ToDisc_Row = m_pQBert.charRow();
g_ToDisc_Cube = m_pQBert.charCube();
switch (dir) {
case Globals.UPRIGHT :
m_pQBert.charDir((int) Globals.UPRIGHT);
moveCharUR(m_pQBert);
break;
case Globals.UPLEFT :
m_pQBert.charDir((int) Globals.UPLEFT);
moveCharUL(m_pQBert);
break;
case Globals.DOWNRIGHT :
m_pQBert.charDir((int) Globals.DOWNRIGHT);
moveCharDR(m_pQBert);
break;
case Globals.DOWNLEFT :
m_pQBert.charDir((int) Globals.DOWNLEFT);
moveCharDL(m_pQBert);
break;
}
}
}
private void resetColTimer(CharacterSprite ch) {
int type = ch.charType();
if (type == Globals.QBERT) {
ch.resetRowTimer(Globals.QBERT_COLROW_DELAY);
} else {
ch.resetRowTimer(Globals.ENEMY_COLROW_DELAY);
}
ch.storeOldValues();
}
private void moveCharUR(CharacterSprite ch) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -