⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gamemodel.java

📁 J2ME的游戏原代码!希望能帮助有需要帮助的师兄弟们!
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
                    }
                }


                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 + -