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

📄 ge.java

📁 一个j2me游戏代码
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
            {
                m_running = 0;
            }
			break;
		case Def.STATE_LEGAL_TEXTS:
			m_blockKey = true;
			if (m_inputTime > 10)
			{
				m_inputTime = 0;
				if (m_textOver)
				{
                    if (Legal.isEU)
                        m_images[Def.PNG_UBILOGO] = null;
					m_gameState = Def.STATE_SPLASH;
				}
				else
				{
					m_lastInput = Def.KEY_ATTACK;
				}
			}
			break;
        case Def.STATE_SPLASH:
            if (m_lastInput != Def.KEY_NONE)
            {
                m_gameState = Def.STATE_MENU;
			}
			break;
		}
        updateKeys();
	}

	//==========================================================================
	// Paint
	//==========================================================================
	// Called by repaint() -----------------------------------------------------
	public void paint(Graphics g)
    //public void render()
	{
		if (g==null || !m_inited)
			return;
        // Lyman DEBUG
        //m_piece[3] = System.currentTimeMillis();
		m_g = g;

		switch (m_gameState)
		{
		case Def.STATE_RUN:
		case Def.STATE_PAUSE:
		case Def.STATE_EXIT:
		    if (m_gameState == Def.STATE_EXIT && m_pauseIndex < 0)
			{
			    displayBG(2);
			}
			else
			{
				// Display map --------------------------------------------------------
				mapFastDraw (Player.m_camX, Player.m_camY);
				// Lyman DEBUG
				//m_piece[4] = System.currentTimeMillis() - m_piece[3];
				// Display POP & Enemys ----------------------------------------------------
				m_player.displayPlayer();
				// draw face
				if (Player.m_showBar)// just for 3510i
					drawSymbol(SYMBOL_FACE);
				// brush bottom
				if (m_brushBottom)
				{
					m_brushBottom = false;
					m_g.setClip(0, 0, Def.SCREEN_WIDTH, Def.SCREEN_HEIGHT);
					m_g.setColor(0); // black color
					m_g.fillRect(0, Def.SCREEN_HEIGHT-16, Def.SCREEN_WIDTH, 16);
				}
			}
			if (m_gameState == Def.STATE_EXIT)
			{
                afficheSmall("Do you want to", -1, Def.TITLE_Y-sFont_H, Def.TEXT_COLOR0, -1);
                afficheSmall("quit game?",     -1, Def.TITLE_Y, Def.TEXT_COLOR0, -1);
				displayOption("No", "Yes");
			}
			else
			{
				if (m_gameState == Def.STATE_RUN)
				{
					if (m_msgIndex >= 0)
					{
						// Lyman DEBUG
						//m_piece[4] = System.currentTimeMillis() - m_piece[3];
						// draw message
						boolean over = drawMessage(m_text[m_msgIndex], m_msgLine);
						if (m_msgIndex == Def.ID_TUT_WALLING)
						{
    						m_brushTop = true;
						}
						// Lyman DEBUG
						//m_piece[5] = System.currentTimeMillis() - m_piece[3] - m_piece[4];
						if (over)
						{
							if (m_msgIndex == Def.ID_TUT_STRIKE)
							{
								Player.m_prince.setAction(Def.PRINCE_STRIKE, 1);
							}
                            if (m_msgIndex == Def.ID_TUT_DAGGER)
                            {
                                Player.m_prince.noJump = true;
							}
							m_msgIndex = -1;
							m_msgLine = -1;
						}
						else
						{
							if (m_msgTime == 0 && m_lastInput > Def.KEY_NONE)
							{
								m_msgLine++;
							}
							else if (m_curFrameTime > m_msgTime)
							{
								m_msgTime = 0;
							}
						}
						resetKey();
					}
				}
				else //if (m_gameState == Def.STATE_PAUSE)
				{
                    //afficheSmall("LEVEL "+(m_levelSelected+1), -1, Def.TITLE_Y - sFont_H, Def.TEXT_COLOR0, 0);
                    //afficheSmall("PAUSE", -1, Def.TITLE_Y+2, Def.TEXT_COLOR0, 0);
					displayMenu(Def.PAUSE_MENU_Y, m_pauseIndex, Def.TEXT_COLOR0);
				}
				drawSymbol(SYMBOL_HINT);
			}
		    break;
		case Def.STATE_MENU:
            if (m_menuIndex == 1 && m_levelPassed[Def.LEVEL_NUMBER-1] > 0) // no continue when all level passed
				m_menuIndex = 2;
			displayBG(2);
			displayMenu(Def.MENU_Y, m_menuIndex, Def.TEXT_COLOR0);
  			drawSymbol(SYMBOL_HINT);
			break;
        case Def.STATE_MENU_OPTION:
            displayBG(2);
            displayMenu(Def.MENU_OPTION_Y, m_optionIndex, Def.TEXT_COLOR0);
            drawSymbol(SYMBOL_HINT);
			break;
		case Def.STATE_INIT_LEVEL:
            if (m_progress == 0)
                displayBG(2);
            afficheSmall("Level "+(m_levelSelected+1), -1, Def.SPLASH_TEXT_Y, Def.TEXT_COLOR0, -1);
            afficheSmall("Loading...", -1, Def.SPLASH_TEXT_Y+sFont_H, Def.TEXT_COLOR0, -1);
            displayProgress(m_progress, 10);
			break;
		case Def.STATE_BEGIN_SCREEN:
			displayBG(1);
			displayString(STR_STORY_BEGIN);
			drawSymbol(SYMBOL_HINT);
			break;
		case Def.STATE_END_SCREEN:
			displayBG(1);
			displayString(STR_STORY_END);
			drawSymbol(SYMBOL_HINT);
			break;
		case Def.STATE_GAMEOVER:
            displayBG(1);
            afficheSmall("Level Failed", -1, Def.TITLE_Y, Def.TEXT_COLOR0, -1);
			displayOption("Menu", "Again");
			break;
		case Def.STATE_END_LEVEL:
            displayBG(1);
            //afficheSmall("Level Finished", -1, Def.TITLE_Y-sFont_H, Def.TEXT_COLOR0, -1);
            afficheSmall("TIME:  " + m_levelPassTime + "s", -1, Def.SCORE_Y-sFont_H, Def.TEXT_COLOR0, -1);
            afficheSmall("HURT:  " + m_levelPassHurt, -1, Def.SCORE_Y, Def.TEXT_COLOR0, -1);
            afficheSmall("SCORE: " + m_levelScore[m_levelLoad], -1, Def.SCORE_Y+sFont_H, Def.TEXT_COLOR0, -1);
            int score = m_levelScore[m_levelLoad] / 100;
            if (score > 4) score = 4;
            if (m_curFrameTime % 1000 > 500)
                afficheSmall(STR_SCORE[score], -1, Def.SCORE_Y+sFont_H*2, CLR_SCORE[score], -1);
            if (m_levelLoad == Def.LEVEL_NUMBER-1)
                displayOption(null, "Next");
            else
                displayOption("Menu", "Next");
			break;
        case Def.STATE_FIRST_SCREEN:
            loadImage(Def.PNG_GAMELOFT, "/gameloft.png");
            if (m_images[Def.PNG_GAMELOFT] != null)
            {
                m_g.setClip( 0, 0, Def.SCREEN_WIDTH, Def.SCREEN_HEIGHT );
                m_g.setColor(255,255,255);
                m_g.fillRect(0, 0, Def.SCREEN_WIDTH, Def.SCREEN_HEIGHT );
                m_g.drawImage(m_images[Def.PNG_GAMELOFT], Def.SCREEN_WIDTH/2, Def.SCREEN_HEIGHT/2, CENTER);
                m_images[Def.PNG_GAMELOFT] = null;
            }
			break;
		case Def.STATE_NEW_GAME:
            displayBG(2);
            afficheSmall("Do you want to", -1, Def.TITLE_Y-sFont_H, Def.TEXT_COLOR0, -1);
            afficheSmall("reset data?",    -1, Def.TITLE_Y, Def.TEXT_COLOR0, -1);
			displayOption("No", "Yes");
			break;
		case Def.STATE_FREE_TOUR:
			displayBG(1);
            int i, clr = Def.TEXT_COLOR7;
            for (i = -2; i <= 2; i++)
            {
                if (i == 0)
                    clr = Def.TEXT_COLOR8;
                else
                    clr = Def.TEXT_COLOR7;
                displayLevel(Def.TITLE_X, Def.FREETOUR_Y+sFont_H*i, m_levelSelected+i, clr);
			}
			displayOption("Menu", "Select");
			break;
		case Def.STATE_CONTROL:
			displayBG(1);
			displayString(STR_CONTROLS);
			//m_gameState = Def.STATE_MENU;
			drawSymbol(SYMBOL_HINT);
			break;
		case Def.STATE_ABOUT:
			displayBG(1);
			displayString(STR_CREDITS);
			//m_gameState = Def.STATE_MENU;
			drawSymbol(SYMBOL_HINT);
			break;
		case Def.STATE_LEGAL_TEXTS:
			displayBG(0);
			displayString(Legal.STR_LEGAL_TEXTS);
			if (Legal.isEU && m_textOver)
	            drawSymbol(SYMBOL_UBILOGO);
			break;
        case Def.STATE_SPLASH:
            displayBG(2);
            if (m_curFrameTime % 400 < 200)
                afficheSmall("press any key", -1, Def.SPLASH_TEXT_Y, Def.TEXT_COLOR9, -1);
			break;
		}
		/* Lyman DEBUG
		if (m_Debug1 > 0) // show debug1 number in topleft corner
		{
			afficheNumber(m_Debug1, Def.NUMBER_WIDTH, 16, Def.NUMBER_TYPE1);
            if (m_Debug1 == 1) // show free memory
                afficheNumber((int)Runtime.getRuntime().freeMemory(), Def.NUMBER_WIDTH, 16+Def.NUMBER_HEIGHT, Def.NUMBER_TYPE0);
		}
		if (m_Debug2 > 0) // show debug2 number
		{
			afficheNumber(m_Debug2, Def.SCREEN_WIDTH/2, 16, Def.NUMBER_TYPE1);
            if (m_Debug2 == 2)
                afficheNumber(m_updatedAI, Def.SCREEN_WIDTH/2, 16+Def.NUMBER_HEIGHT, Def.NUMBER_TYPE0);
		}
		if (m_Debug3 > 0) // show debug3 number, fps
		{
			afficheNumber(m_Debug3, (Def.SCREEN_WIDTH-Def.NUMBER_WIDTH) / 2, 64, Def.NUMBER_TYPE1);
            if (m_Debug3 == 1)
                afficheNumber(m_lastFps, (Def.SCREEN_WIDTH+Def.NUMBER_WIDTH) / 2 + 2*Def.NUMBER_WIDTH, 64, Def.NUMBER_TYPE0);
            else if (m_Debug3 == 2)
            {
                afficheNumber((int)m_piece[0], (Def.SCREEN_WIDTH+Def.NUMBER_WIDTH) / 2 + 2*Def.NUMBER_WIDTH, 64, Def.NUMBER_TYPE0);
                afficheNumber((int)m_piece[1], (Def.SCREEN_WIDTH+Def.NUMBER_WIDTH) / 2 + 2*Def.NUMBER_WIDTH, 64+Def.NUMBER_HEIGHT, Def.NUMBER_TYPE0);
                afficheNumber((int)m_piece[2], (Def.SCREEN_WIDTH+Def.NUMBER_WIDTH) / 2 + 2*Def.NUMBER_WIDTH, 64+Def.NUMBER_HEIGHT*2, Def.NUMBER_TYPE0);
            }
			else if (m_Debug3 == 3)
			{
				afficheNumber((int)m_piece[4], (Def.SCREEN_WIDTH+Def.NUMBER_WIDTH) / 2 + 2*Def.NUMBER_WIDTH, 64, Def.NUMBER_TYPE0);
				afficheNumber((int)m_piece[5], (Def.SCREEN_WIDTH+Def.NUMBER_WIDTH) / 2 + 2*Def.NUMBER_WIDTH, 64+Def.NUMBER_HEIGHT, Def.NUMBER_TYPE0);
				afficheNumber((int)m_piece[6], (Def.SCREEN_WIDTH+Def.NUMBER_WIDTH) / 2 + 2*Def.NUMBER_WIDTH, 64+Def.NUMBER_HEIGHT*2, Def.NUMBER_TYPE0);
			}
			else if (m_Debug3 == 4)
			{
				afficheNumber((int)m_piece[7], (Def.SCREEN_WIDTH+Def.NUMBER_WIDTH) / 2 + 2*Def.NUMBER_WIDTH, 64, Def.NUMBER_TYPE0);
				afficheNumber((int)m_piece[8], (Def.SCREEN_WIDTH+Def.NUMBER_WIDTH) / 2 + 2*Def.NUMBER_WIDTH, 64+Def.NUMBER_HEIGHT, Def.NUMBER_TYPE0);
				afficheNumber((int)m_piece[9], (Def.SCREEN_WIDTH+Def.NUMBER_WIDTH) / 2 + 2*Def.NUMBER_WIDTH, 64+Def.NUMBER_HEIGHT*2, Def.NUMBER_TYPE0);
			}
		}//*/
		//m_g.setClip(0, Def.SCREEN_HEIGHT-64, Def.SCREEN_WIDTH, 64);
        //m_g.drawString(Integer.toString(m_progress), Def.SCREEN_WIDTH, Def.SCREEN_HEIGHT-32, Graphics.RIGHT | Graphics.BOTTOM);
		//m_g.drawString(Long.toString(Runtime.getRuntime().freeMemory()), Def.SCREEN_WIDTH - 100, Def.SCREEN_HEIGHT, Graphics.LEFT | Graphics.BOTTOM);
		//m_g.drawString(Long.toString(Runtime.getRuntime().totalMemory()), 0, Def.SCREEN_HEIGHT, Graphics.LEFT | Graphics.BOTTOM);

		m_painted = 1;
		m_g = null;
	}

    static void afficheSmall( String str, int x, int y, int clr, int clrBg )
    {
        if (x == -1)
            x = (Def.SCREEN_WIDTH-sFont.stringWidth(str))/2;
        m_g.setFont( sFont );
        m_g.setClip( 0, 0, Def.SCREEN_WIDTH, Def.SCREEN_HEIGHT );
        if (clrBg >= 0)
        {
            m_g.setColor(clrBg);
            m_g.drawString( str, x+1, y, TOPLEFT );
            m_g.drawString( str, x-1, y, TOPLEFT );
            m_g.drawString( str, x, y+1, TOPLEFT );
            m_g.drawString( str, x, y-1, TOPLEFT );
        }
        m_g.setColor(clr);
        m_g.drawString( str, x, y, TOPLEFT );
	}
	/* Lyman DEBUG
	static void afficheNumber( int num, int x, int y, int type )
	{
		int n;
		boolean minus = false;
		if (num < 0)
		{
			minus = true;
			num = -num;
		}
		do
		{
			x -= Def.NUMBER_WIDTH;
			n = num % 10;
			num /= 10;
			m_g.setClip( x, y, Def.NUMBER_WIDTH, Def.NUMBER_HEIGHT );
			m_g.drawImage(m_images[Def.PNG_NUMBER], x-n*Def.NUMBER_WIDTH, y-type*Def.NUMBER_HEIGHT, TOPLEFT);
		} while (num > 0);
		if (minus)
		{
			x -= Def.NUMBER_WIDTH;
			m_g.setClip( x, y, Def.NUMBER_WIDTH, Def.NUMBER_HEIGHT );
			m_g.drawImage(m_images[Def.PNG_NUMBER], x-10*Def.NUMBER_WIDTH, y-type*Def.NUMBER_HEIGHT, TOPLEFT);
		}
	}//*/
    //static void afficheNumber( int num, int x, int y, int type )
    //{
    //    afficheSmall(Integer.toString(num), x, y, Def.TEXT_COLOR0, 0);
	//}
	// Display menu ------------------------------------------------------------
	private void displayBG(int title)
	{
        m_g.setClip( 0, 0, Def.SCREEN_WIDTH, Def.SCREEN_HEIGHT );
        switch (title)
        {
            case 0:
                //fill rect only
                m_g.setColor( 0 );
                m_g.fillRect( 0, 0, Def.SCREEN_WIDTH, Def.SCREEN_HEIGHT );
                break;
            case 1:
                // create story bg image and draw full image
                switchImage(Def.SWITCH_STORY);
                m_g.drawImage(m_images[Def.PNG_STORY], 0, 0, TOPLEFT);
                break;
            case 2:
                //fill rect black
                m_g.setColor( 0 );
                m_g.fillRect( 0, 0, Def.SCREEN_WIDTH, Def.SCREEN_HEIGHT );
                // create menu & logo image and draw
                switchImage(Def.SWITCH_MENU);
                m_g.drawImage(m_images[Def.PNG_SPLASH], Def.SCREEN_WIDTH/2, Def.SCREEN_HEIGHT, BOTTOMCENTER);
                m_g.drawImage(m_images[Def.PNG_MENU], Def.SCREEN_WIDTH/2, 0, TOPCENTER);
                break;
        }
	}
    ///* display menu item
    private void displayMenu(int y, int index, int clr)
    {
        String strTemp = "";
        switch (m_gameState)
        {
            case Def.STATE_MENU:
                index = (index+MENU_ITEM_NUM) % MENU_ITEM_NUM;
                for (int i=0; i<MENU_ITEM_NUM; i++)
                {
                    if (i == 1 && (m_levelPassed[Def.LEVEL_NUMBER-1] > 0 || m_levelPassed[0] == 0))
                        continue;
                    if (i==index)
                        afficheSmall(STR_MENU[i], -1, y, Def.TEXT_COLOR9, 0);
                    else
                        afficheSmall(STR_MENU[i], -1, y, clr, 0);
                    y += sFont_H;
                }
                break;
            case Def.STATE_PAUSE:
                index = (index+PAUSE_ITEM_NUM) % PAUSE_ITEM_NUM;
                for (int i=0; i<PAUSE_ITEM_NUM; i++)
                {
                    strTemp = STR_PAUSE[i];
                    if (i == 1)
                        strTemp += (m_playHint!=0?"On":"Off");
                    else if (i == 2)
                        strTemp += (m_playSound!=0?(m_playSound!=1?"High":"Low"):"Off");
                    if (i==index)
                        afficheSmall(strTemp, -1, y, Def.TEXT_COLOR9, 0);
                    else
                        afficheSmall(strTemp, -1, y, clr, 0);
                    y += sFont_H;
                }
                break;
            case Def.STATE_MENU_OPTION:
                index = (index+OPTION_ITEM_NUM) % OPTION_ITEM_NUM;
                for (int i=0; i<OPTION_ITEM_NUM; i++)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -